跳至正文

部署与本地开发

有两条路,按你要做的事选:

你要做的走哪条需要 Rust 工具链
部署一套能用的服务端容器化部署
改服务端代码、调试源码启动

容器化部署(一条命令)

整套 IM 核心(15 个服务)连同基础设施一起起来,不需要本机装 Rust。

cd flare-im-core
cp deploy/.env.example deploy/.env
# 至少填上 FLARE_TOKEN_SECRET,见下方「必须自己填的那一项」

docker compose --env-file deploy/.env \
  -f deploy/docker-compose.yml \
  -f deploy/docker-compose.stack.yml \
  -f deploy/docker-compose.build.yml up -d

三个文件各管一段,分开是为了能单独用:

  • docker-compose.yml —— 基础设施(Consul / PostgreSQL / Redis / NATS / Kafka / 对象存储 / 可观测栈)。只想起中间件、服务跑在本机时单独用它。
  • docker-compose.stack.yml —— 15 个 Flare 服务。一个镜像装全部服务, 它们只差跑哪个二进制,拆 15 个镜像会让 registry 体积和版本偏斜翻倍。
  • docker-compose.build.yml —— 本地构建镜像。有预构建镜像可拉时去掉这一层, 改用 FLARE_IMAGE=<你的镜像>。首次本地构建约 10 分钟。

必须自己填的那一项

FLARE_TOKEN_SECRET 没有默认值,不填直接启动失败。这不是麻烦:

发一个默认签名密钥等于发一个漏洞——任何拿到它的人都能伪造任意用户身份, 而且完全没有症状:服务正常启动、登录正常、日志干净。

生成一个:

openssl rand -base64 48 | tr -d '\n' | head -c 64

业务服务端要用同一个密钥:业务侧签发 IM 连接令牌、核心网关验签, 两边不一致的表现是「登录成功但 IM 连不上」。

改账号密码

全部在 deploy/.env 里,不用动任何 yml:

POSTGRES_USER=flare
POSTGRES_PASSWORD=改成你的
POSTGRES_DB=flare2
REDIS_PASSWORD=            # 留空 = 不启用认证(本地默认)
RUSTFS_ACCESS_KEY=...
RUSTFS_SECRET_KEY=...
GRAFANA_ADMIN_PASSWORD=...

密码里带 @ : / 或空格时,compose 拼不出合法的连接 URL(它不做百分号转义), 这时直接给整条:

DATABASE_URL=postgres://user:p%40ss@postgres:5432/flare2

业务服务端(可选)

社交业务的七个服务叠加在同一套基础设施上,共用同一份 .env

docker compose --env-file deploy/.env \
  -f deploy/docker-compose.yml \
  -f deploy/docker-compose.stack.yml \
  -f ../flare-social/deploy/docker-compose.social.yml up -d

建库是自动的,且分得清全新部署与升级:社交表不存在时执行 init.sql, 已存在时只补增量迁移。这个区分是必需的——init.sql 是重置脚本(37 条 DROP TABLE ... CASCADE),在有数据的库上重跑就是清空。

源码启动(开发用)

要改服务端代码就走这条,需要 Rust 1.94+。

cd flare-im-core/deploy
docker compose up -d        # 只起基础设施

具体服务名与端口以 deploy/README.md 为准。

启动脚本

cd flare-im-core
./scripts/start_server.sh    # 或 start_multi_gateway.sh
./scripts/stop_server.sh

常见端口(开发):

服务端口
access-gateway60051 (WS/QUIC)
其他实例scripts/README.md

验证

# 网关监听
lsof -i :60051

# SDK 示例(需 NEGOTIATION_HOST)
cd flare-im-core-sdk
FLARE_IM_SERVER_URL=ws://localhost:60051 cargo run --example complete_client

配置

生产注意

  • 接入层多副本 + 负载均衡(粘性会话或统一 route)
  • JetStream 集群与 PostgreSQL 高可用
  • 监控:Prometheus 指标 + 分布式追踪(按部署接入)

下一步