Docker Compose 部署
在单台服务器上启动 Clouisle 全部服务
Docker Compose 适合单机部署。需要 Docker 和 Docker Compose v2。
引导式安装
curl -fsSL https://raw.githubusercontent.com/clouisle/Clouisle/main/deploy/install.sh | bash选择 Docker Compose,确认安装目录和域名,安装器会下载文件、生成强密钥、校验 Compose、拉取镜像并启动服务。
非交互安装(跳过提示,使用默认值):
CLOUISLE_DEPLOYMENT=docker CLOUISLE_YES=1 curl -fsSL https://raw.githubusercontent.com/clouisle/Clouisle/main/deploy/install.sh | bash默认安装目录为 /opt/clouisle。
手动安装
cd deploy
cp .env.example .env
internal_api_token="$(openssl rand -hex 32)"
sed -i.bak "s/^INTERNAL_API_TOKEN=.*/INTERNAL_API_TOKEN=${internal_api_token}/" .env
rm .env.bak
unset internal_api_token
docker compose pull
docker compose up -dmacOS 的 BSD sed 与 GNU sed 参数不同;在 macOS 上可直接编辑 .env 或使用安装器生成 Token。
检查服务
docker compose ps
docker compose logs -f api
curl http://localhost:8000/api/v1/health将外部反向代理配置为 /api/* 到 api:8000、/ 到 frontend:3000。浏览器入口默认 http://localhost:3000。
服务清单与端口
deploy/docker-compose.yml 定义 5 个应用服务 + 3 个基础设施服务,共 8 个容器:
| 服务 | 镜像 | 启动命令 | 宿主端口 |
|---|---|---|---|
db | clouisle-postgres-pg-search:0.24.3-pg17-alpine1 | postgres -c shared_preload_libraries=pg_search,pg_stat_statements -c pg_stat_statements.track=all | 5432 |
redis | redis:7-alpine | redis-server --requirepass …(设置 REDIS_PASSWORD 时) | 6379 |
qdrant | qdrant/qdrant:v1.18.3 | 默认 | 6333 |
api | clouisle-backend:latest | python main.py server -H 0.0.0.0 -w 4 --no-reload | 8000 |
worker | clouisle-backend:latest | python main.py worker -c 4 -Q default,agent,knowledge,workflow | 无 |
sandbox-worker | clouisle-sandbox-worker:latest | python main.py sandbox-worker -c ${SANDBOX_WORKER_CONCURRENCY:-1} | 无 |
beat | clouisle-backend:latest | python main.py beat | 无 |
frontend | clouisle-frontend:latest | node server.js(镜像默认) | 3000 |
Compose 不含 Nginx 服务。api 的健康检查是容器内 GET http://localhost:8000/api/v1/health;worker 与 sandbox-worker 依赖 api 健康后才启动,beat 与 frontend 只依赖 api 已启动(service_started)。db、redis、qdrant 通过各自健康检查(pg_isready、redis-cli ping、/healthz),应用服务都等它们健康后才启动。
api 独占 uploads_data 卷(挂载 /app/uploads);worker 与 sandbox-worker 不挂该卷,改用 UPLOAD_STORAGE_MODE=remote + API_INTERNAL_BASE_URL=http://api:8000 经内部网关读写文件。sandbox-worker 额外以 user: "0"、cap_add: [SYS_ADMIN]、seccomp=unconfined 运行,bwrap 才能创建用户/挂载命名空间。
生产环境必须为 POSTGRES_PASSWORD 与 INTERNAL_API_TOKEN 提供强随机值:Compose 使用 ${VAR:?required} 语法,未设置时 docker compose up 直接失败。INTERNAL_API_TOKEN 必须被 api、worker、sandbox-worker 共享。
初始化
Tortoise ORM 在 API 启动时自动建表与迁移(无 Alembic)。首个注册用户自动成为超级管理员。
常用操作
docker compose logs -f worker
docker compose restart api
docker compose up -d --scale worker=4
docker compose up -d --scale sandbox-worker=2
docker compose downbeat 必须保持一个副本。docker compose down -v 会删除数据卷,执行前必须完成备份。
worker 默认消费 default,agent,knowledge,workflow 4 个队列,--scale worker=4 会同时扩展这 4 类任务。只扩容某一类任务时,增加一个只订阅单队列的 Worker 服务(如 -Q agent),sandbox 队列由 sandbox-worker 独立消费。队列与任务的对应关系见部署架构 → Celery 队列划分。
这篇文章对你有帮助吗?