首页 / 教程文档

Misskey去中心化社区搭建文档(宝塔版)

前言

微博、推特(X)等中心化社交平台,我们早已习惯。但在这些平台上,我们无法真正掌控自己的数据——平台一旦倒闭、被收购或改变规则,用户只能被动接受。如果你追求数据自托管、去中心化、隐私自由,或者只是想为朋友搭建一个私密的小社区,那么 Misskey 或许是一个理想的选择。

Misskey 是一个基于 ActivityPub 协议的去中心化开源社交平台。与推特不同,Misskey 不是一个单一的网站,而是一个由无数个独立实例(服务器)组成的分布式网络。每个实例都可以高度自定义,最重要的是——你可以随时删除、导出或迁移自己的数据,真正掌握数据主权。

项目地址:https://github.com/misskey-dev/misskey
这个日本团队开发的联邦式社交平台,支持:
• 图文/视频动态发布
• 跨平台内容互通(Mastodon/Pixelfed等)
• 个性化UI自定义
• 云端文件存储

四大核心

  1. 去中心化架构:数据不再被大厂垄断,想删帖就删帖
  2. 表情包核弹库:内置上千个魔性颜文字,聊天自带弹幕效果
  3. 隐私保护模式:支持端到端加密私聊,告别偷窥狂
  4. 二次元友好:日系界面设计,还能给帖子打上专属标签
💡 小提示:使用 Misskey 不一定需要自建。你可以先访问 Misskey 服务器列表 加入一个喜欢的实例。但如果你有自建需求,并且愿意投入精力维护,那就继续往下看吧!

准备工作

在开始之前,请确保你已准备好以下资源:

必须项

  • 一台服务器:至少 2 核 CPU、1.5GB 空余内存,推荐使用海外或港澳台服务器(网络更稳定)。
  • 一个域名:选定后请勿更换,因为 Misskey 实例的 URL 是固定的。
  • Docker 环境:Misskey 官方推荐使用 Docker 部署,方便快捷。

非必须但推荐

  • 对象存储 OSS:用于存储用户上传的图片、文件,减轻服务器压力。
  • SMTP 发件服务器:用于发送注册验证、通知邮件。
  • 人机验证服务(如 Cloudflare Turnstile、reCAPTCHA):防止机器人注册。
如果你还没有服务器,可以考虑一些口碑较好的 VPS 服务商,例如小兔互联

准备工作

  • 一台 VPS 服务器(建议至少 2 核 CPU、2GB 内存)
  • 一个已经解析到服务器的域名
  • 宝塔面板
  • 基本的 Linux 操作知识

第一步:安装必要软件

登录宝塔面板,进入 软件商店,搜索并安装以下软件:

  • Nginx(默认版本 1.22 即可)
  • Docker 管理器(用于管理 Docker 容器)
  • 堡塔 Docker 模块 1.0(增强 Docker 管理功能,安装后需在左侧菜单栏开启显示)

安装完成后,打开宝塔的 终端(或通过 SSH 登录服务器),执行以下命令安装 Docker Compose:

sudo apt update
sudo apt install docker-compose -y

第二步:克隆 Misskey 仓库

在服务器上选择一个合适的目录(例如 /home),克隆 Misskey 的官方仓库:

cd /home
git clone -b master https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master

第三步:复制配置文件

将示例配置文件复制为实际使用的文件:

cp .config/docker_example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env
cp ./docker-compose.yml.example ./docker-compose.yml

第四步:修改配置文件

1. 编辑 default.yml

nano .config/default.yml

需要重点关注以下几项:

  • URL:将 url: https://example.tld/ 修改为你的域名,例如:

    url: https://misskey.yourdomain.com
  • 数据库配置:找到 db 部分,修改数据库名称、用户和密码。注意,这里的 host 不能写 localhost127.0.0.1,而需要填写 Docker 容器的 IP 地址。我们先留空,稍后获取。

    db:
      host: 172.xx.xx.xx   # 稍后填写 PostgreSQL 容器的 IP
      port: 5432
      db: misskey
      user: misskeyuser
      pass: your_strong_password
  • Redis 配置:类似地,host 需要填写 Redis 容器的 IP。

    redis:
      host: 172.xx.xx.xx   # 稍后填写 Redis 容器的 IP
      port: 6379
如何获取容器 IP?
可以先启动一次容器(docker-compose up -d),然后执行 docker inspect misskey_db_1 查看 PostgreSQL 容器的 IPAddress,Redis 同理。获取到 IP 后,再编辑 default.yml 填入,然后重启容器。

2. 编辑 docker.env

nano .config/docker.env

设置与 default.yml 一致的数据库信息:

POSTGRES_PASSWORD=your_strong_password
POSTGRES_USER=misskeyuser
POSTGRES_DB=misskey

3. 可选:修改 docker-compose.yml

如果需要调整端口映射或其他参数,可以编辑 docker-compose.yml。默认情况下,Misskey Web 服务会映射到宿主机的 3000 端口,无需修改。


第五步:构建并初始化容器

首先,确保你的域名已经解析到服务器 IP。然后执行以下命令构建 Docker 镜像(此过程可能需要 5-10 分钟,取决于服务器性能):

docker-compose build

构建完成后,初始化数据库:

docker-compose run --rm web pnpm run init

此命令会创建数据库表结构,并提示你输入管理员信息(稍后在 Web 界面完成亦可)。

最后,启动所有容器:

docker-compose up -d

此时,Misskey 应该已经在后台运行,监听本地的 3000 端口。


第六步:配置 Nginx 反向代理

回到宝塔面板,点击左侧 网站,然后点击 添加站点

  • 域名:填写你的 Misskey 域名(如 misskey.yourdomain.com
  • PHP版本:选择 纯静态
  • 其他保持默认,点击 提交

接下来为该站点申请 SSL 证书:

  1. 点击新添加的站点,进入 SSL 选项卡。
  2. 选择 Let's Encrypt,勾选域名,点击 申请。确保域名已正确解析。
  3. 申请成功后,打开 强制 HTTPS

然后配置反向代理:

  1. 在站点设置中,点击 反向代理添加反向代理
  2. 名称:随意填写,如 misskey
  3. 目标URL:填写 http://127.0.0.1:3000(因为 Misskey 运行在本地的 3000 端口)。
  4. 点击 提交

此时,访问你的域名应该就能看到 Misskey 的初始化页面了。

备用方案:手动修改 Nginx 配置

如果宝塔自带的反向代理功能无法正常工作(例如 WebSocket 连接失败),可以手动修改 Nginx 配置文件。点击站点设置中的 配置文件,将内容替换为以下示例(记得修改域名和 SSL 证书路径):

# For WebSocket
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;

server {
    listen 80;
    listen [::]:80;
    server_name misskey.yourdomain.com;

    # For SSL domain validation
    location /.well-known/acme-challenge/ { allow all; }
    location /.well-known/pki-validation/ { allow all; }
    location / { return 301 https://$server_name$request_uri; }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name misskey.yourdomain.com;

    # SSL 证书路径(根据实际情况修改)
    ssl_certificate /www/server/panel/vhost/cert/misskey.yourdomain.com/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/misskey.yourdomain.com/privkey.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:ssl_session_cache:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;

    client_max_body_size 80m;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        # WebSocket support
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        # Cache
        proxy_cache cache1;
        proxy_cache_lock on;
        proxy_cache_use_stale updating;
        add_header X-Cache $upstream_cache_status;
    }
}

保存配置后,重载 Nginx 服务即可。


第七步:初始化 Misskey 实例

在浏览器中访问你的域名,你应该会看到 Misskey 的初始化向导。按照提示填写:

  • 管理员信息:邮箱、密码等
  • 实例设置:实例名称、简介、是否开放注册等

完成后,点击 开始,即可进入你的 Misskey 实例!


日常管理与更新

启动/停止容器

cd /home/misskey
docker-compose stop    # 停止
docker-compose start   # 启动
docker-compose restart # 重启

更新 Misskey 版本

git stash
git checkout master
git pull
git submodule update --init
git stash pop
docker-compose build
docker-compose stop && docker-compose up -d

查看日志

docker-compose logs -f web

常见问题

1. 数据库连接失败

检查 default.yml 中的数据库主机 IP 是否正确,以及 docker.env 中的密码是否匹配。如果使用容器 IP,确保容器已启动并获取了正确 IP。

2. 图片无法上传或显示

确保 Nginx 配置中 client_max_body_size 足够大(例如 80m),并且 Misskey 的对象存储设置正确。如果未配置对象存储,默认使用本地存储,需确保磁盘空间充足。

3. 联合(Federation)失败

检查域名是否可以公开访问,SSL 证书是否有效,以及 /.well-known 路径是否被正确代理。确保 Nginx 配置中包含对 /.well-known 的特殊处理(如证书验证)。


基本管理操作

作为管理员,你可以通过“控制面板”对实例进行各种设置。

  • 生成邀请码:适用于不开放注册的实例,只有持邀请码的用户才能注册。
  • 上传自定义表情符号:支持在帖子、聊天甚至昵称中使用。
  • 常规设置:修改实例名称、描述、图标等。
  • SMTP 设置:配置邮件服务器,用于发送验证和通知邮件。
  • 对象存储:配置 OSS(如 S3、MinIO),将用户文件存储到云端,减轻服务器负担。
  • 人机验证:推荐使用 Turnstile 或 reCAPTCHA,防止恶意注册。

结语

至此,你已经成功搭建了一个属于自己的 Misskey 实例!它不仅是一个社交平台,更是一个去中心化网络中的节点。你可以尝试关注其他实例的用户——例如,访问 https://你的域名/@用户名@其他实例域名,即使对方不在你的服务器注册,也能轻松互动。

Misskey 的可玩性远不止于此:主题定制、插件扩展、机器人开发……等待你去探索。

通过宝塔面板,我们成功搭建了一个属于自己的 Misskey 实例。现在你可以邀请朋友加入,或者将其作为一个私密的社交空间。Misskey 的魅力不仅在于去中心化,还在于极高的自定义性——表情符号、主题、插件等都可以随心调整。享受 DIY 的乐趣吧!

最后提醒一下:如果计划开放注册,请务必量力而行,确保服务器资源充足,并制定清晰的社区规则,善用管理工具维护社区秩序。

如果在搭建过程中遇到任何问题,欢迎在评论区留言交流。

edit 发表评论

您的邮箱地址不会被公开,必填项已用 * 标注