Skip to content

Docker 一键部署

Vistack 通过 compose.yml 实现「一条命令起全套」:API / Auth / Worker / Transcoder 四个业务服务 + PostgreSQL / Redis / MinIO / Kafka / etcd 五个基础设施 + Traefik 统一入口网关。

一键起栈

bash
git clone https://github.com/binhy/vistack.git
cd vistack

cp .env.example .env.local
docker compose up --build -d

docker compose up --build -d 做了三件事:

  1. 构建镜像:Go 多阶段构建(Dockerfile),产出两个镜像——vistack:latest(api/worker/auth 共用)与 vistack-transcoder:latest(内置 FFmpeg);
  2. 拉起基础设施:按健康检查依赖顺序启动 PostgreSQL → Redis / MinIO / Kafka / etcd;
  3. 拉起业务服务:api → auth → worker → transcoder,最后启动 Traefik 网关。

服务清单

服务镜像 target端口依赖
postgrespostgres:16-alpine5432-
redisredis:7-alpine6379-
miniominio/minio9000(API) / 9001(控制台)-
kafkaconfluentinc/cp-kafka:7.6.19092KRaft 单节点
etcdquay.io/coreos/etcd:v3.5.162379注册中心
apivistack(双阶段构建)8080pg / redis / minio / kafka / auth
authvistack8081 / 50052pg / minio / etcd
workervistack-pg / redis / minio / kafka / etcd
transcodervistack-transcoder(内置 ffmpeg)50051minio / etcd
traefiktraefik:v3.380 / 8082(仪表盘)auth / api

统一入口(Traefik)

前端所有请求统一走 http://localhost/api/v1,Traefik 按路径前缀分流(deploy/traefik/dynamic.yml):

/api/v1/auth/*  → auth:8081(认证)
/api/v1/user/*  → auth:8081(用户资料)
其余 /api/v1/*  → api:8080(视频/文件业务)

仪表盘:http://localhost:8082/dashboard/

水平扩容

业务角色全部无状态,可独立扩容:

bash
# 扩容转码节点(计算密集,最常扩)
docker compose up --scale transcoder=3 -d

# 扩容 API / Worker
docker compose up --scale api=2 --scale worker=2 -d

扩容后:

  • 新增 transcoder 会自动向 etcd 注册(租约保活),worker 经 etcd 动态发现 + gRPC round_robin 负载均衡;
  • retry dispatcher / watchdog 由 etcd 领导选举保证全局单例,多 worker 不会重复投递。

数据持久化

compose.yml 定义了 5 个命名卷,docker compose down 不会删除数据:

挂载点内容
pgdata/var/lib/postgresql/dataPostgreSQL 数据
redisdata/dataRedis 数据
miniodata/data原片 / DASH 分片 / 封面
kafkadata/var/lib/kafka/dataKafka 日志
etcddata/etcd-dataetcd 数据

常用运维命令

bash
# 查看所有服务状态
docker compose ps

# 查看某个服务日志
docker compose logs -f api
docker compose logs -f transcoder

# 进入容器排障
docker compose exec redis redis-cli ping
docker compose exec postgres psql -U postgres -c "SELECT count(*) FROM videos;"

# 重建单个服务(配置变更后)
docker compose up -d --build api

# 停止(保留数据)
docker compose down

# 彻底清理(删除数据卷)
docker compose down -v

# 清理构建缓存
docker builder prune

生产部署建议

Compose 适合单机 / 开发环境。生产环境建议:

  1. 中间件高可用:etcd 3~5 节点、Kafka 3 broker + 副本因子 ≥ 2、PostgreSQL 主从、Redis Sentinel/Cluster、分布式 MinIO(≥4 节点纠删码);
  2. 密钥管理.env.local 中替换默认密码与 JWT_SECRET;Auth 私钥通过 Secret 注入(VISTACK_AUTH_RSA_PRIVATE_KEY_FILE),不要写入镜像;
  3. 网关加固:Traefik 仪表盘默认 insecure 暴露,生产请移除或加认证;
  4. 弹性伸缩:多机场景推荐直接使用 Kubernetes 部署,配合 HPA 按负载扩缩。

下一步

基于 MIT License 发布