InfiniSynapse Private Deployment Guide

基于 Docker Compose 的一键部署,按以下步骤操作即可完成上线。

1. 环境要求

  • 硬件:推荐 8 Core / 32 GB 内存 / 100 GB 磁盘(最低 16 GB 内存,需调低 InfiniSQL 内存参数)
  • 系统:Linux(Ubuntu 22.04 LTS 推荐)
  • 软件:Docker ≥ 24,Docker Compose Plugin ≥ 2.20(命令为 docker compose
  • 网络:能访问 Docker Hub、npm/pip 官方源,以及 infinisynapse.oss-cn-shanghai.aliyuncs.com
  • 需对外开放的端口8088(主应用)、80(管理后台)、3000(鉴权 API,浏览器直连)

未安装 Docker 时可执行:

curl -fsSL https://get.docker.com | sudo bash
sudo systemctl enable --now docker
sudo usermod -aG docker "$USER"

重新登录后通过 docker --version / docker compose version 验证。

2. 获取代码

git clone https://github.com/chaozwn/infini_docker.git
cd infini_docker

离线交付场景下,直接解压收到的压缩包并进入目录即可。

3. 配置 .env

mkdir -p __data/mysql __data/mongo __data/redis
mkdir -p datas persist auto-coder upload tasks
cp .env.example .env

打开 .env至少修改以下几项:

# 数据库与缓存密码(生产强烈建议修改)
DB_PASSWORD=infinisynapse@123
REDIS_PASSWORD=ChangeMeRedisPassword!
MONGO_PASSWORD=infinisynapse2025
# URI 编码后的 Mongo 密码;不含 @ : / ? # & = 等特殊字符时与 MONGO_PASSWORD 填同一个值即可
MONGO_PASSWORD_URIENC=infinisynapse2025

# JWT 密钥(必改,长度 ≥ 32)
JWT_SECRET=ChangeMeJwtSecretAtLeast32Chars

# 账号中心地址与 JWT issuer(必改!见下方说明)
SSO_API_BASE=http://<服务器IP或域名>:3000/api
AUTH_ISSUER=http://<服务器IP或域名>:3000/api

# RS256 签名私钥(必填,否则账号中心签不出 token)
JWT_PRIVATE_KEYS_B64=

⚠️ SSO_API_BASE / AUTH_ISSUER 填写规则(最容易踩坑)

SSO_API_BASE 是账号中心的 API 根地址,前端与主应用据此拨号。AUTH_ISSUER 是写进 token iss 的身份标识:账号中心签发时写入,各服务验签时逐字比对,并据此拼出 ${AUTH_ISSUER}/auth/.well-known/jwks.json 去拉公钥。单机部署里两者填同一个值。

  • 必须填浏览器能访问的服务器 IP 或域名,不能写容器名或 127.0.0.1
  • 端口固定为 3000,路径固定为 /api,末尾不加 /
  • 启用 HTTPS 反代时改为 https://<域名>/api,由反代把 /api 路由到 infini-proxy-server:3000
  • 两者必须逐字一致。只改一个会让签出的 token 全网验不过,现象是「所有人都登不进去」, 而日志里看不出原因。

示例(服务器 IP 为 192.168.1.10):

SSO_API_BASE=http://192.168.1.10:3000/api
AUTH_ISSUER=http://192.168.1.10:3000/api

生成 JWT_PRIVATE_KEYS_B64

账号中心用 RS256 签发登录 token,私钥必须自行生成——刻意不提供默认值,否则所有部署会共用同一把钥匙:

docker compose run --rm --entrypoint "" infini-proxy-server pnpm gen:jwt-keys

把输出中 JWT_PRIVATE_KEYS_B64= 那一整行粘进 .env。日后轮换密钥时在命令末尾加 -- --rotate:新密钥排在最前用于签发,旧密钥保留在后面用于验签存量 token, 这样已登录的用户不会被立刻踢下线。

4. 启动服务

docker compose up -d --build

首次启动会构建镜像并自动跑 MySQL 迁移,约需 10–30 分钟。完成后检查状态:

docker compose ps

infini-synapse-mysql-migrate 显示 Exited (0)(一次性任务,正常)外,其余容器应均为 running

5. 初始化管理员

bash deploy/init-admin.sh

默认创建 admin / 123456。自定义密码或用户名:

ADMIN_USERNAME='your_admin' ADMIN_PASSWORD='YourStrongPassword' bash deploy/init-admin.sh

该脚本按用户名 upsert,后续重置密码重复执行即可。

6. 访问系统

假设服务器 IP 为 192.168.1.10

使用第 5 步创建的账号登录。

7. 常用运维命令

# 查看日志
docker compose logs -f infini-synapse

# 重启某个服务
docker compose restart infini-synapse

# 停止 / 启动全部
docker compose stop
docker compose start

# 备份持久化数据
tar czvf infini-backup-$(date +%F).tgz __data persist datas upload

# 升级
git pull && docker compose up -d --build

持久化数据目录:__data/(MySQL/Mongo/Redis)、persist/(主应用)、datas/upload/

8. 常见问题

登录失败 / 接口 401 / 页面空白

绝大多数是 SSO_API_BASE 配置错误。 打开浏览器 DevTools → Network 查看失败请求的目标地址,应该是 http://<服务器IP或域名>:3000/api/...;如果不是,对照第 3 节修正后重启:

docker compose up -d infini-synapse

另外确认宿主机 3000 端口已对外开放。

登录后所有接口都 401

AUTH_ISSUER 两侧不一致,或 JWT_PRIVATE_KEYS_B64 为空。检查:

# 账号中心起没起来(issuer 未配置时会启动失败并打印原因)
docker compose logs infini-proxy-server | tail -50

# JWKS 能不能取到公钥,取不到说明私钥没配
curl http://<服务器IP或域名>:3000/api/auth/.well-known/jwks.json

改完 .env 后需要重启账号中心与主应用:

docker compose up -d infini-proxy-server infini-synapse

infini-sql 启动失败或 OOM

InfiniSQL 默认占用较多内存。若服务器内存小于 32 GB,在 .env 中下调参数(16 GB 机器示例):

INFINI_SQL_SPARK_DRIVER_MEMORY=6g
INFINI_SQL_MEM_LIMIT=8g
INFINI_SQL_MEMSWAP_LIMIT=10g
docker compose up -d infini-sql

端口冲突

.env 修改 APP_PORT / PROXY_ADMIN_PORT 等端口后 docker compose up -d 重启。

9. 获取帮助