Skip to content

配置参考

IM 服务端支持通过环境变量或启动参数进行配置。

运行时配置

端口配置

配置项默认值说明
PORT3000HTTP 和 WebSocket 监听端口
bash
# 通过环境变量设置
PORT=8080 node index.js

JWT 配置

配置项默认值说明
JWT_SECRET内置默认JWT 签名密钥(生产环境务必修改)
JWT_EXPIRES_IN7dToken 有效期

安全提醒

生产环境务必修改 JWT_SECRET,使用强随机密钥。

bash
JWT_SECRET=your-strong-secret-key JWT_EXPIRES_IN=14d node index.js

API Key 配置

配置项默认值说明
ADMIN_API_KEY内置默认管理后台 API 认证密钥
bash
ADMIN_API_KEY=your-admin-api-key node index.js

单设备登录

配置项默认值说明
SINGLE_SIGN_ON0设为 1 启用单设备登录(新连接踢掉旧连接)
bash
SINGLE_SIGN_ON=1 node index.js

Web Push 配置

配置项说明
VAPID_PUBLIC_KEYVAPID 公钥
VAPID_PRIVATE_KEYVAPID 私钥
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_modeWALWrite-Ahead Logging,读写并发更优
synchronousNORMAL平衡性能与数据安全
cache_size-80008MB 缓存
temp_storeMEMORY临时数据存内存

写入策略

为提升写入性能,服务端采用 防抖写入 策略:

  • 写操作先放入内存队列
  • 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