Skip to content

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-recreate

Video 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-recreate

Resource Service 和 API 重建会使临时资源、预览流和正在执行的任务失效;更新前应停止接受新任务并等待活动请求完成。

Markify 文档与协议随实现同步演进。