diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e2894fe4..6ba501f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -266,7 +266,7 @@ jobs: - name: Verify artifact contents run: | docker run --rm --entrypoint sh "$GOCHAT_IMAGE_REF" -c \ - 'test -s /app/configs/config.production.yaml && test -d /app/migrations && test -s /app/frontend/dist/index.html' + 'test -s /app/configs/config.production.yaml && find /app/migrations -maxdepth 1 -type f -name "*.sql" -print -quit | grep -q . && test -s /app/frontend/dist/index.html && test -s /app/frontend/dist/favicon-32x32.png' docker run --rm --entrypoint sh "$SHANGWUTONG_IMAGE_REF" -c \ 'test -x /usr/local/bin/shangwutong && test -d /data && test -d /backup && test "$(id -u)" -eq 10001' - name: Start production Compose and smoke core pages @@ -275,8 +275,21 @@ jobs: docker compose -f deploy/docker/docker-compose.prod.yml config --format json | python3 -c 'import json, os, sys; config = json.load(sys.stdin); assert all(config["services"][service]["environment"]["GOCHAT_JWT_PREVIOUS_SECRETS"] == os.environ["GOCHAT_JWT_PREVIOUS_SECRETS"] for service in ("gochat", "worker"))' docker compose -f deploy/docker/docker-compose.prod.yml --profile ops run --rm migrate docker compose -f deploy/docker/docker-compose.prod.yml up -d --wait gochat shangwutong + docker compose -f deploy/docker/docker-compose.prod.yml up -d worker + for service in gochat worker shangwutong; do + container_id="$(docker compose -f deploy/docker/docker-compose.prod.yml ps -q "$service")" + test -n "$container_id" + test "$(docker inspect --format '{{.State.Status}}' "$container_id")" = running + done + for service in gochat shangwutong; do + container_id="$(docker compose -f deploy/docker/docker-compose.prod.yml ps -q "$service")" + test "$(docker inspect --format '{{.State.Health.Status}}' "$container_id")" = healthy + done curl -fsS "http://127.0.0.1:$GOCHAT_PORT/health" | grep -q '"status":"healthy"' curl -fsS "http://127.0.0.1:$GOCHAT_PORT/app" | grep -q '/assets/' + curl -fsS "http://127.0.0.1:$GOCHAT_PORT/runtime-config.js" | grep -q 'window.__GOCHAT_CONFIG__' + curl -fsS -o "$RUNNER_TEMP/favicon-32x32.png" "http://127.0.0.1:$GOCHAT_PORT/favicon-32x32.png" + test -s "$RUNNER_TEMP/favicon-32x32.png" docker compose -f deploy/docker/docker-compose.prod.yml exec -T shangwutong \ wget -q -T 3 -O - http://127.0.0.1:9100/readyz | grep -q '"status":"ready"' - name: Stop production Compose diff --git a/README.md b/README.md index 88f1573e..c5107e85 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ Vite dev server 会将 `/api`、`/platform`、`/cable`、`/health` 代理到 GoC GoChat 使用 **Viper 多环境叠加**机制: - `backend/configs/config.yaml` — 默认配置 -- `backend/configs/config.prod.yaml` — 生产覆盖 +- `backend/configs/config.production.yaml` — 生产覆盖 - `backend/configs/config.dev.yaml` — 开发覆盖 - `.env` — 本地覆盖(最高优先级) - 11 个字段支持 **热加载**(无需重启) diff --git a/deploy/docker/docker-compose.prod.yml b/deploy/docker/docker-compose.prod.yml index cc8c0c3b..928351ec 100644 --- a/deploy/docker/docker-compose.prod.yml +++ b/deploy/docker/docker-compose.prod.yml @@ -119,6 +119,8 @@ services: meilisearch: condition: service_healthy command: ["worker"] + healthcheck: + disable: true environment: <<: *gochat-environment GOCHAT_DATABASE_RUN_MIGRATIONS: "false"