文档中心 / 后端部署

后端部署

服务端是整个私有阁系统的大脑:负责账号认证、实时消息投递、群组协作、云盘文件与离线推送。它基于 Node.js + Express + Socket.IO + MySQL 构建,单机即可稳定支撑数千日活,架构上也为集群化预留了空间。

技术栈一览

模块技术说明
运行时Node.js 18 LTS单线程事件驱动,长连接场景内存占用低
Web 框架Express成熟稳定,中间件生态完整
实时通道Socket.IO毫秒级消息与信令投递,自动重连与降级
数据库MySQL 5.7 / 8.0utf8mb4 全字符集,消息持久化
音视频WebRTC + TURN/STUNP2P 优先,中继兜底
文件存储本地磁盘 uploads/结构统一,可平滑迁移对象存储
离线推送APNsiOS 离线消息推送
进程守护pm2崩溃自愈、开机自启、日志管理

环境要求

  • 服务器:Ubuntu 22.04 / Debian 12 / CentOS Stream,2 核 4G 起步,系统盘 40G+。
  • 已安装 Node.js 18 LTS、MySQL 5.7 或 8.0、Nginx。
  • 一个解析到服务器的域名(生产环境建议启用 HTTPS,音视频与剪贴板等浏览器能力在非安全源下受限)。

安装与配置

bash
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_URLSTUN 探测可用公共或自建
SIGNALING_SERVER_URL信令地址默认本机即可
APNS_KEY_ID / APNS_TEAM_ID / APNS_KEY_PATH / APNS_BUNDLE_IDiOS 推送需要离线推送时配置
NODE_ENV运行环境设为 production

进程守护

使用 pm2 托管服务,崩溃自动拉起并随服务器开机自启:

bash
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 升级头与大文件上传限制):

nginx
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 已配置每日定时备份(见「进阶:基础服务部署」)。