Misskey 微博
关于Misskey
Misskey 是一个开源分布式微博平台项目。 开发始于2014年,由syuilo在日本开发。 它具有丰富的功能,如驱动器和反应,以及高度可自定义的 UI。
历史
在开发之初,公告板是主要服务,但随着用户发布短文并添加按时间顺序流动的时间线功能,它越来越受欢迎,并且开发逐渐成为主要服务。 它最初不是分布式的,但在 2018 年,ActivityPub 实现了分布式,成为更受人们认可和使用的服务,并一直持续到今天。
我与Misskey的历程
其实我接触misskey也没多久,可以说是相爱相杀,毕竟咱喜欢搞新奇的东西,搭建这个东西也经历了波波折折
体验站
我的 Misskey 实例已经重新上线啦,欢迎来玩:点我前往(屑殇小窝,Misskey v2026.7.0,注册开放,需要邮箱验证)
搭建教程
准备工作
- 一个域名,并解析到你的服务器。分布式联邦靠域名识别实例,上线后域名不能改,想好再动手
- 一台 Linux 服务器(Ubuntu/Debian 最佳),建议 2C4G 起步,内存不足时构建阶段会很难受(见 FAQ 的 swap 方案)
- 两种部署方式二选一:
- Docker Compose:官方推荐,环境隔离、升级简单,下面方式一
- 手动编译:不依赖 Docker、便于定制,需要自己装 Node.js/PostgreSQL/Redis,下面方式二
方式一:Docker Compose 部署(推荐)
克隆与配置
1 | git clone -b master https://github.com/misskey-dev/misskey.git |
编辑 .config/default.yml:1
2
3
4
5
6
7
8
9
10
11
12
13
14# 最终访问地址,必须改成你的域名(上线后不能改!)
url: https://你的域名/
# 监听端口,反代指向这里
port: 3000
# db 和 redis 保持 host 为 db / redis(compose 服务名)
db:
host: db
port: 5432
db: misskey
user: example-misskey-user
pass: example-misskey-pass
redis:
host: redis
port: 6379
编辑 .config/docker.env,把示例密码改成强密码,数据库连接会通过 DATABASE_URL 注入:1
2
3POSTGRES_PASSWORD=换成你的强密码
POSTGRES_USER=misskey
POSTGRES_DB=misskey
构建、初始化、启动
1 | sudo docker compose build # 首次构建比较久 |
浏览器访问 http://服务器IP:3000 看到 Misskey 页面就成功了(下一步配 HTTPS 反代)。
方式二:手动编译部署
安装依赖
1 | # Ubuntu/Debian |
Node.js 要求 v22.15.0+(v22 系列)或 v24.10.0+(v24 系列),推荐用 nvm 安装:1
2
3curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
nvm install 22
pnpm 要求 v10.16.0+,用 corepack 启用:1
2corepack enable
corepack prepare pnpm@latest --activate
为 PostgreSQL 创建数据库和用户:1
sudo -u postgres psql
1
2CREATE USER misskey WITH PASSWORD '你的强密码';
CREATE DATABASE misskey OWNER misskey;
安装 Misskey
Misskey 不允许 root 直接运行,创建独立用户:1
2
3
4
5
6
7sudo adduser --disabled-password --disabled-login misskey
sudo -iu misskey
git clone --recursive https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master
git submodule update --init
NODE_ENV=production pnpm install --frozen-lockfile
配置与初始化
1 | cp .config/example.yml .config/default.yml |
1 | url: https://你的域名/ # 上线后不能改! |
构建并初始化数据库(首次构建较久):1
2NODE_ENV=production pnpm run build
pnpm run init
启动验证:1
NODE_ENV=production pnpm run start
systemd 托管
Ctrl+C 停掉前台进程,创建服务文件让 Misskey 开机自启、崩溃自动重启:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[Unit]
Description=Misskey daemon
[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=misskey
Restart=always
[Install]
WantedBy=multi-user.target1
2
3sudo systemctl daemon-reload
sudo systemctl enable --now misskey
systemctl status misskey
反向代理与 HTTPS(必做)
Misskey 页面和实时时间线依赖 WebSocket,反代必须支持 Upgrade 头,否则会出现”能打开页面但发帖不刷新”的怪问题。官方只建议反代 443 → 3000,不要在 Misskey 前面再叠一层反代。
Nginx
1 | server { |
用 certbot 一键签发 HTTPS 证书:1
2sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d msk.example.com
Caddy(更省事)
Caddy 自动申请并续期证书,配置只有一行:1
2
3msk.example.com {
reverse_proxy 127.0.0.1:3000
}
如果反代和 Misskey 之间有 CDN(如 Cloudflare),需要在 default.yml 里配置
trustProxy信任 CDN 回源 IP,否则限流会把反代 IP 当成用户 IP。
初始设置与日常管理
- 创建管理员:配置里设置了
setupPassword的话,打开站点会引导你进入初始设置,输入该密码即可创建管理员账号。没有设置的话第一个注册的用户会成为管理员 - 站点信息:管理员登录后在「控制台」里改站点名、描述、图标、主题色等
- 注册与邮箱:控制台可开启注册审核、邮箱验证;要发验证邮件必须在 default.yml 配 SMTP:
1
2
3
4
5
6
7smtp:
host: smtp.example.com
port: 465
user: your@mail.com
pass: your-password
secure: true
from: your@mail.com - 对象存储:默认媒体存在本地
files目录,媒体量大之后建议接 S3 兼容存储(Cloudflare R2、Backblaze B2 等),控制台里直接配置
更新与备份
更新
升级前先看 CHANGELOG 有没有额外步骤,然后:1
2
3
4
5
6
7
8# Docker 方式
git stash
git checkout master
git pull
git submodule update --init
git stash pop
sudo docker compose build
sudo docker compose stop && sudo docker compose up -d1
2
3
4
5
6
7
8# 手动方式
git checkout master
git pull
git submodule update --init
NODE_ENV=production pnpm install --frozen-lockfile
NODE_ENV=production pnpm run build
pnpm run migrate
sudo systemctl restart misskey
升级失败时可以试试
pnpm run clean(或pnpm run clean-all)和pnpm rebuild再重新构建。
备份
Misskey 的数据 = PostgreSQL 数据库 + 媒体文件目录,两个都要备份:1
2
3
4# 数据库(压缩导出)
pg_dump -U misskey -Fc misskey | gzip > misskey-$(date +%Y%m%d-%H%M).dump.gz
# 媒体文件(默认目录)
tar -czf files-$(date +%Y%m%d-%H%M).tar.gz files
Docker 方式在容器里执行:1
sudo docker compose exec db pg_dump -U misskey -Fc misskey | gzip > misskey-$(date +%Y%m%d-%H%M).dump.gz
建议用 cron 每天自动备份并同步到其他机器(异地备份防丢站)。
常见问题 FAQ
- 构建或迁移时内存不足(OOM / killed)
加 swap:1
2sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile - 页面能打开,但发帖/时间线不实时刷新
反代没有配置 WebSocket Upgrade 头,对照上文 Nginx/Caddy 配置检查 - 注册时验证邮件收不到
SMTP 配置错误,或者云服务器厂商封了 25 端口(国内厂商默认封),改用 465/587 端口 - 域名能改吗
不能。上线联邦后改 url 会导致签名失效、联邦数据错乱,只能换新域名重新开始 - 为什么显示用户来源 IP 不对 / 莫名被限流
反代或 CDN 后面需要配置trustProxy - 升级后 500 错误
先看日志,试试pnpm run clean+ 重新构建;Docker 方式重新docker compose build后再up -d
如果上面的问题没能解决你的问题,欢迎在评论区留言提问。
评论