这两天测试Misskey社区程序,据说很强大,但如何强大?国内用的人很少,还是挺冷门的,一点点摸索试试。
0️⃣ 硬件 & 系统
- CPU:Intel N305 2 C 4 T
- 内存:4 GB(推荐再挂 4 GB swap)
- 系统:Ubuntu 22.04 LTS Server
sudo apt update && sudo apt full-upgrade -y
1️⃣ 环境依赖
# Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y \
nodejs build-essential python3 pkg-config \
libvips-dev libcairo2-dev libpango1.0-dev \
libjpeg-dev libgif-dev librsvg2-dev
# pnpm(官方锁死)
corepack enable
corepack prepare pnpm@latest --activate
2️⃣ PostgreSQL 15小内存优化
-
- 官方源安装
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" >/etc/apt/sources.list.d/pgdg.list'
wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update && sudo apt install -y postgresql-15 postgresql-client-15
-
- 建库建用户
sudo -u postgres psql -c "CREATE USER misskey WITH PASSWORD 'dbpass';"
sudo -u postgres createdb -O misskey misskey
-
- 2核4G专用配置
sudo tee /etc/postgresql/15/main/conf.d/misskey.conf <<'EOF'
shared_buffers = 512MB
effective_cache_size = 1GB
work_mem = 4MB
max_connections = 50
listen_addresses = 'localhost'
port = 5432
log_statement = 'ddl'
EOF
sudo systemctl restart postgresql
3️⃣ Redis 256 MB封顶
sudo apt install -y redis-server
sudo tee -a /etc/redis/redis.conf <<'EOF'
maxmemory 256mb
maxmemory-policy allkeys-lru
save 900 1
save 60 10000
appendonly no
EOF
sudo systemctl restart redis
4️⃣ Misskey 源码部署
-
- 目录与用户
sudo useradd -r -s /bin/bash -d /home/misskey misskey
sudo mkdir -p /www/ncn
sudo chown -R misskey:misskey /home/www
-
- 克隆源码
sudo -iu misskey
cd /home/www
git clone -b master https://github.com/misskey-dev/misskey.git nervcn
cd nervcn
-
- 一键配置
cp .config/example.yml .config/default.yml
sed -i 's|url:.*|url: https://www.nervcn.com|' .config/default.yml
sed -i 's|port:.*|port: 3000|' .config/default.yml
sed -i 's|host:.*|host: localhost|' .config/default.yml
sed -i 's|user:.*|user: misskey|' .config/default.yml
sed -i 's|pass:.*|pass: dbpass|' .config/default.yml
-
- 编译
pnpm install --frozen-lockfile
NODE_OPTIONS="--max-old-space-size=3072" pnpm build
NODE_ENV=production pnpm run init
-
- systemd 守护
sudo tee /etc/systemd/system/misskey.service <<'EOF'
[Unit]
Description=Misskey daemon
After=network.target postgresql.service redis.service
[Service]
Type=simple
User=misskey
WorkingDirectory=/www/ncn
ExecStart=/usr/bin/node packages/backend/built/boot/entry.js
Environment=NODE_ENV=production
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now misskey
5️⃣ Nginx 443反代
sudo apt install -y nginx-core
sudo tee /etc/nginx/sites-available/misskey <<'EOF'
server {
listen 80;
server_name www.nervcn.com nervcn.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name www.nervcn.com nervcn.com;
ssl_certificate /etc/ssl/certs/nervcn.crt;
ssl_certificate_key /etc/ssl/private/nervcn.key;
ssl_protocols TLSv1.2 TLSv1.3;
client_max_body_size 64m;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
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;
}
}
EOF
sudo ln -sf /etc/nginx/sites-available/misskey /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
6️⃣ 备案信息插入(底部不跑位)
在 location /
末尾追加:
# 插入备案信息
proxy_set_header Accept-Encoding "";
sub_filter '</body>'
'Copyright © 2010 - 2025 · <a href="https://www.rei3.com" target="_blank" rel="nofollow">万事屋 </a> · <a href="https://beian.miit.gov.cn" target="_blank" rel="nofollow">沪ICP备16001031号-1.</a>
</footer></body>';
sub_filter_once on;
重载生效:
sudo nginx -t && sudo systemctl reload nginx
7️⃣ 开机自启 & 日志切割
-
- 日志切割
sudo tee /etc/logrotate.d/misskey <<'EOF'
/www/ncn/log/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
su misskey misskey
}
EOF
-
- 每日 4 点平滑重启(防内存泄漏)
(crontab -l 2>/dev/null; echo "0 4 * * * /bin/systemctl try-reload-or-restart misskey") | crontab -
8️⃣ 常见问题速查
现象 | 解决 |
---|---|
PostgreSQL 起不来 | 证书权限:sudo chown postgres:postgres /etc/ssl/private/ssl-cert-snakeoil.key |
前端报 Promise | Nginx 缺 WebSocket:proxy_set_header Upgrade $http_upgrade; |
端口 3000 未出现 | 手动跑:NODE_ENV=production /usr/bin/node packages/backend/built/boot/entry.js |
至此,2核4G N305迷你主机已完整跑满Misskey,PostgreSQL 15 + Redis 256 MB全部调优,Nginx 443反代+备案信息一步到位,5000 IP/日稳如老狗。
升级前端无需重新编译,备案永不丢失。
没有回复内容