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 -ddocker compose up --build -d 做了三件事:
- 构建镜像:Go 多阶段构建(
Dockerfile),产出两个镜像——vistack:latest(api/worker/auth 共用)与vistack-transcoder:latest(内置 FFmpeg); - 拉起基础设施:按健康检查依赖顺序启动 PostgreSQL → Redis / MinIO / Kafka / etcd;
- 拉起业务服务:api → auth → worker → transcoder,最后启动 Traefik 网关。
服务清单
| 服务 | 镜像 target | 端口 | 依赖 |
|---|---|---|---|
postgres | postgres:16-alpine | 5432 | - |
redis | redis:7-alpine | 6379 | - |
minio | minio/minio | 9000(API) / 9001(控制台) | - |
kafka | confluentinc/cp-kafka:7.6.1 | 9092 | KRaft 单节点 |
etcd | quay.io/coreos/etcd:v3.5.16 | 2379 | 注册中心 |
api | vistack(双阶段构建) | 8080 | pg / redis / minio / kafka / auth |
auth | vistack | 8081 / 50052 | pg / minio / etcd |
worker | vistack | - | pg / redis / minio / kafka / etcd |
transcoder | vistack-transcoder(内置 ffmpeg) | 50051 | minio / etcd |
traefik | traefik:v3.3 | 80 / 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/data | PostgreSQL 数据 |
redisdata | /data | Redis 数据 |
miniodata | /data | 原片 / DASH 分片 / 封面 |
kafkadata | /var/lib/kafka/data | Kafka 日志 |
etcddata | /etcd-data | etcd 数据 |
常用运维命令
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 适合单机 / 开发环境。生产环境建议:
- 中间件高可用:etcd 3~5 节点、Kafka 3 broker + 副本因子 ≥ 2、PostgreSQL 主从、Redis Sentinel/Cluster、分布式 MinIO(≥4 节点纠删码);
- 密钥管理:
.env.local中替换默认密码与JWT_SECRET;Auth 私钥通过 Secret 注入(VISTACK_AUTH_RSA_PRIVATE_KEY_FILE),不要写入镜像; - 网关加固:Traefik 仪表盘默认
insecure暴露,生产请移除或加认证; - 弹性伸缩:多机场景推荐直接使用 Kubernetes 部署,配合 HPA 按负载扩缩。
下一步
- 了解各服务如何协作 → 系统架构总览
- 生产集群部署 → Kubernetes 部署
- 遇到问题 → 常见问题 FAQ
