Docker 部署
准备服务器
bash
docker network create wangquan-network
cp .env.example .env
install -d -o 1000 -g 1000 -m 0750 \
data/logs/resource-service \
data/logs/api \
data/logs/image-worker \
data/logs/video-worker日志目录必须允许容器内 UID/GID 1000:1000 写入,否则 Node.js 会因 EACCES 退出并被健康检查标记为 unhealthy。
图片生产拓扑
当前推荐只启动图片链路所需服务和文档:
bash
docker compose \
-f docker-compose.yml \
-f docker-compose.workers.yml \
up -d --build --force-recreate \
resource-service image-worker markify-api docs.env 中建议明确配置:
dotenv
WORKER_ENDPOINTS=image=http://image-worker:80包含 Video Worker
bash
docker compose \
-f docker-compose.yml \
-f docker-compose.workers.yml \
up -d --build --force-recreateVideo Worker 首次构建会安装 FFmpeg 和大量 Alpine 编解码依赖。视频功能尚未实现时不建议部署它。
检查状态
bash
docker compose \
-f docker-compose.yml \
-f docker-compose.workers.yml \
ps图片拓扑应至少出现:
text
markify-resource
markify-image-worker
markify-api
markify-docs验证内部依赖:
bash
docker exec markify-api node -e \
"fetch('http://image-worker:80/worker/v1/health/ready').then(async r => console.log(r.status, await r.text())).catch(console.error)"验证文档容器:
bash
docker exec markify-docs wget -qO- http://127.0.0.1/health网关接入
项目 Compose 不使用 ports。外部 Nginx、Traefik 或其他网关加入 wangquan-network 后,可分别代理:
text
API → http://markify-api:80
Docs → http://markify-docs:80实时预览需要关闭代理缓冲并允许长连接。最终 ZIP 需要合理的读取超时和响应大小限制。
更新部署
bash
git pull --ff-only
docker compose -f docker-compose.yml -f docker-compose.workers.yml build
docker compose -f docker-compose.yml -f docker-compose.workers.yml up -d --force-recreateResource Service 和 API 重建会使临时资源、预览流和正在执行的任务失效;更新前应停止接受新任务并等待活动请求完成。