进阶:基础服务部署
私有阁对基础服务的要求非常克制:一台 MySQL 即可完整运行。音视频中继(TURN)与苹果推送(APNs)属于可选增强,按业务需要逐步开启。本文给出每个组件在生产环境的专业部署建议。
服务总览
| 组件 | 是否必需 | 用途 |
|---|---|---|
| MySQL | 必需 | 用户、消息、群组、云盘元数据 |
| TURN / STUN | 建议 | 跨网络音视频中继,弱网环境下保障通话成功率 |
| APNs | iOS 必需 | iOS 离线消息推送 |
| Nginx | 生产建议 | TLS 终结、反代、静态资源 |
MySQL
建议独立实例或独占实例部署,创建 utf8mb4 库与专用账号:
CREATE DATABASE siyouge DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'siyouge'@'127.0.0.1' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON siyouge.* TO 'siyouge'@'127.0.0.1';
FLUSH PRIVILEGES;
要点:
- 账号只允许本机或内网来源连接,不要使用
%放开公网; innodb_buffer_pool_size建议设为可用内存的 50% 左右;- 服务端首次启动会自动建表,无需手工导入。
TURN 音视频中继
双方都在对称 NAT 后时,P2P 直连会失败,需要 TURN 服务器中继音视频流。推荐开源 coturn:
apt install coturn
/etc/turnserver.conf 最小配置:
listening-port=3478
fingerprint
lt-cred-mech
user=siyouge:强密码
realm=im.example.com
防火墙放行 3478(UDP/TCP)与 49152-65535 中继端口段,然后写入服务端 .env:
TURN_SERVER_URL=turn:你的服务器IP:3478
TURN_USERNAME=siyouge
TURN_PASSWORD=强密码
STUN_SERVER_URL=stun:你的服务器IP:3478
APNs 推送
iOS 离线推送需要 Apple Push 令牌。在 Apple Developer 后台创建 Key(APNs AuthKey .p8),记录 Key ID 与 Team ID,把 .p8 文件放到服务器安全目录,再配置 .env:
APNS_KEY_ID=你的KeyID
APNS_TEAM_ID=你的TeamID
APNS_KEY_PATH=/www/siyouge/secrets/AuthKey.p8
APNS_BUNDLE_ID=com.yourcompany.imm
注意 APNS_BUNDLE_ID 必须与 iOS 工程的 Bundle Identifier 一致,否则推送静默失败。
备份与恢复
数据库每日定时备份,上传目录按容量增量备份:
mysqldump -usiyouge -p siyouge | gzip > /backup/siyouge-$(date +%F).sql.gz
恢复:gunzip < 备份文件 | mysql -usiyouge -p siyouge。建议把备份同步到对象存储或另一台机器,异地容灾。
生产检查
- MySQL 仅内网可达,账号最小权限;
- TURN 连通性用 Trickle ICE 测试通过;
- iOS 真机杀掉 App 后仍能收到推送;
- 备份任务在 crontab 中生效,并做过一次完整恢复演练。