Appearance
配置参考
IM 服务端支持通过环境变量或启动参数进行配置。
运行时配置
端口配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
| PORT | 3000 | HTTP 和 WebSocket 监听端口 |
bash
# 通过环境变量设置
PORT=8080 node index.jsJWT 配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
| JWT_SECRET | 内置默认 | JWT 签名密钥(生产环境务必修改) |
| JWT_EXPIRES_IN | 7d | Token 有效期 |
安全提醒
生产环境务必修改 JWT_SECRET,使用强随机密钥。
bash
JWT_SECRET=your-strong-secret-key JWT_EXPIRES_IN=14d node index.jsAPI Key 配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
| ADMIN_API_KEY | 内置默认 | 管理后台 API 认证密钥 |
bash
ADMIN_API_KEY=your-admin-api-key node index.js单设备登录
| 配置项 | 默认值 | 说明 |
|---|---|---|
| SINGLE_SIGN_ON | 0 | 设为 1 启用单设备登录(新连接踢掉旧连接) |
bash
SINGLE_SIGN_ON=1 node index.jsWeb Push 配置
| 配置项 | 说明 |
|---|---|
| VAPID_PUBLIC_KEY | VAPID 公钥 |
| VAPID_PRIVATE_KEY | VAPID 私钥 |
| VAPID_EMAIL | 联系邮箱(推送服务需要) |
生成 VAPID 密钥对:
bash
npx web-push generate-vapid-keys数据库配置
IM 使用 SQLite 作为数据库(通过 sql.js WebAssembly 运行),无需安装额外数据库服务。
数据库文件
| 配置项 | 默认值 | 说明 |
|---|---|---|
| DB_PATH | ./data/im.db | 数据库文件路径 |
SQLite PRAGMA 设置
服务端启动时自动设置以下 PRAGMA 参数以优化性能:
| PRAGMA | 值 | 说明 |
|---|---|---|
| journal_mode | WAL | Write-Ahead Logging,读写并发更优 |
| synchronous | NORMAL | 平衡性能与数据安全 |
| cache_size | -8000 | 8MB 缓存 |
| temp_store | MEMORY | 临时数据存内存 |
写入策略
为提升写入性能,服务端采用 防抖写入 策略:
- 写操作先放入内存队列
- 100ms 防抖后批量写入 SQLite
- 服务关闭时强制保存(forceSave)
Nginx 反向代理配置
HTTPS + WebSocket
nginx
upstream im_server {
server 127.0.0.1:3000;
}
server {
listen 443 ssl http2;
server_name chat.example.com;
ssl_certificate /etc/ssl/certs/chat.pem;
ssl_certificate_key /etc/ssl/private/chat.key;
# REST API
location /api/ {
proxy_pass http://im_server;
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 $scheme;
# 限流(可选)
limit_req zone=api burst=20 nodelay;
}
# WebSocket
location / {
proxy_pass http://im_server;
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;
# WebSocket 长连接超时
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name chat.example.com;
return 301 https://$host$request_uri;
}完整启动示例
bash
# 生产环境启动
PORT=3000 \
JWT_SECRET=my-super-secret-key \
JWT_EXPIRES_IN=7d \
ADMIN_API_KEY=admin-key-123 \
SINGLE_SIGN_ON=1 \
VAPID_PUBLIC_KEY=BNxxx \
VAPID_PRIVATE_KEY=xxx \
VAPID_EMAIL=admin@example.com \
DB_PATH=./data/im.db \
node index.js