后端部署
服务端是整个私有阁系统的大脑:负责账号认证、实时消息投递、群组协作、云盘文件与离线推送。它基于 Node.js + Express + Socket.IO + MySQL 构建,单机即可稳定支撑数千日活,架构上也为集群化预留了空间。
技术栈一览
| 模块 | 技术 | 说明 |
|---|---|---|
| 运行时 | Node.js 18 LTS | 单线程事件驱动,长连接场景内存占用低 |
| Web 框架 | Express | 成熟稳定,中间件生态完整 |
| 实时通道 | Socket.IO | 毫秒级消息与信令投递,自动重连与降级 |
| 数据库 | MySQL 5.7 / 8.0 | utf8mb4 全字符集,消息持久化 |
| 音视频 | WebRTC + TURN/STUN | P2P 优先,中继兜底 |
| 文件存储 | 本地磁盘 uploads/ | 结构统一,可平滑迁移对象存储 |
| 离线推送 | APNs | iOS 离线消息推送 |
| 进程守护 | pm2 | 崩溃自愈、开机自启、日志管理 |
环境要求
- 服务器:Ubuntu 22.04 / Debian 12 / CentOS Stream,2 核 4G 起步,系统盘 40G+。
- 已安装 Node.js 18 LTS、MySQL 5.7 或 8.0、Nginx。
- 一个解析到服务器的域名(生产环境建议启用 HTTPS,音视频与剪贴板等浏览器能力在非安全源下受限)。
安装与配置
cd /www/siyouge/server
npm install --production
.env 生产配置要点(完整字段见 .env.example 注释):
| 变量 | 说明 | 生产建议 |
|---|---|---|
| PORT / HOST | 监听端口与地址 | HOST 用 127.0.0.1,由 Nginx 对外 |
| DB_* | MySQL 连接四项 + 库名 | 使用专用账号,最小权限 |
| JWT_SECRET | 登录态签名密钥 | 64 位以上随机串,妥善保管 |
| TURN_SERVER_URL / TURN_USERNAME / TURN_PASSWORD | 音视频中继 | 公网环境建议配置 coturn |
| STUN_SERVER_URL | STUN 探测 | 可用公共或自建 |
| SIGNALING_SERVER_URL | 信令地址 | 默认本机即可 |
| APNS_KEY_ID / APNS_TEAM_ID / APNS_KEY_PATH / APNS_BUNDLE_ID | iOS 推送 | 需要离线推送时配置 |
| NODE_ENV | 运行环境 | 设为 production |
进程守护
使用 pm2 托管服务,崩溃自动拉起并随服务器开机自启:
npm install -g pm2
cd /www/siyouge/server
pm2 start server.js --name siyouge-server
pm2 save
pm2 startup
常用运维命令:pm2 logs siyouge-server 查看日志,pm2 restart siyouge-server 重启,pm2 monit 观察资源占用。
反向代理与 HTTPS
Nginx 参考配置(重点:WebSocket 升级头与大文件上传限制):
server {
listen 443 ssl http2;
server_name im.example.com;
ssl_certificate /etc/nginx/cert/im.example.com.pem;
ssl_certificate_key /etc/nginx/cert/im.example.com.key;
client_max_body_size 200m;
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_read_timeout 300s;
}
}
证书可用 certbot 免费签发并自动续期:certbot --nginx -d im.example.com。
上线检查
https://你的域名/api/health返回正常;- 客户端使用
wss://完成 WebSocket 握手,消息秒级送达; - 图片、文件上传与下载正常(
client_max_body_size已放大); - 断网重连后消息补齐,离线推送可达;
- 服务器重启后 pm2 自动拉起服务;
- MySQL 已配置每日定时备份(见「进阶:基础服务部署」)。