diff --git a/.github/workflows/README.md b/.github/workflows/README.md index 5e664f9..d2076ff 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -99,9 +99,9 @@ docker login crpi-u2903xccyzd6nqnc.cn-shanghai.personal.cr.aliyuncs.com \ curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh -# 安装 Docker Compose -sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -sudo chmod +x /usr/local/bin/docker-compose +# Docker Compose V2(命令为 docker compose,带空格) +# 多数 Docker 安装已包含插件;若提示找不到 compose: +# sudo apt-get update && sudo apt-get install -y docker-compose-plugin ``` ### 4. 首次部署准备 @@ -164,7 +164,7 @@ mkdir -p /opt/life-echo/api ### 4. 容器启动失败 - 检查 docker-compose.yml 文件是否正确 -- 查看容器日志:`docker-compose logs` +- 查看容器日志:`docker compose logs` - 确认环境变量配置正确 ## 手动触发 diff --git a/.github/workflows/docker-build-deploy.yml b/.github/workflows/docker-build-deploy.yml index 0da841a..7d7231a 100644 --- a/.github/workflows/docker-build-deploy.yml +++ b/.github/workflows/docker-build-deploy.yml @@ -244,9 +244,8 @@ jobs: exit 1 fi - echo "上传候选 compose、Caddyfile 与环境文件..." + echo "上传候选 compose 与环境文件..." scp -P "$SSH_PORT" ./api/docker-compose.yml "$SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/docker-compose.candidate.yml" - scp -P "$SSH_PORT" ./api/Caddyfile "$SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/Caddyfile.candidate" scp -P "$SSH_PORT" "$ENV_SRC" "$SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/.env.candidate" ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" " @@ -271,9 +270,6 @@ jobs: if [ -f '$COMPOSE_FILE' ]; then cp '$COMPOSE_FILE' '${COMPOSE_FILE}.predeploy' fi - if [ -f 'Caddyfile' ]; then - cp 'Caddyfile' 'Caddyfile.predeploy' - fi if [ -f '.env.production' ]; then cp '.env.production' '.env.production.predeploy' fi @@ -281,13 +277,12 @@ jobs: cp '.env' '.env.predeploy' fi mv 'docker-compose.candidate.yml' '$COMPOSE_FILE' - mv 'Caddyfile.candidate' 'Caddyfile' mv '.env.candidate' '.env' - docker-compose -f '$COMPOSE_FILE' up -d --remove-orphans + docker compose -f '$COMPOSE_FILE' up -d --remove-orphans echo '等待服务启动...' sleep 20 docker image prune -f || true - docker-compose -f '$COMPOSE_FILE' ps + docker compose -f '$COMPOSE_FILE' ps " - name: Verify deployment @@ -296,12 +291,12 @@ jobs: ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" " set -euo pipefail cd '$COMPOSE_DIR/api' - docker-compose ps + docker compose ps - API_CID=\$(docker-compose ps -q api) + API_CID=\$(docker compose ps -q api) if [ -z \"\$API_CID\" ]; then echo '未找到 api 容器' - docker-compose logs --tail=80 api || true + docker compose logs --tail=80 api || true exit 1 fi @@ -317,20 +312,9 @@ jobs: if [ \"\$API_HEALTH\" != 'healthy' ]; then echo 'api 容器未在预期时间内变为 healthy' - docker-compose logs --tail=80 api || true + docker compose logs --tail=80 api || true exit 1 fi - CADDY_CID=\$(docker-compose ps -q caddy || true) - if [ -n \"\$CADDY_CID\" ]; then - CADDY_STATE=\$(docker inspect -f '{{.State.Status}}' \"\$CADDY_CID\") - echo \"caddy state: \$CADDY_STATE\" - if [ \"\$CADDY_STATE\" != 'running' ]; then - echo 'caddy 容器未处于 running 状态' - docker-compose logs --tail=80 caddy || true - exit 1 - fi - fi - - docker-compose logs --tail=50 api + docker compose logs --tail=50 api " diff --git a/README.md b/README.md index 4504ec2..8ba2dd4 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ uv sync --dev # 参考 api/README.md 中的环境变量配置说明 # 4. 启动 PostgreSQL 和 Redis -docker-compose -f docker-compose.dev.yml up -d +docker compose -f docker-compose.dev.yml up -d # 5. 数据库迁移 # uv run alembic upgrade head diff --git a/api/.env.example b/api/.env.example index dbf0fc4..7316e32 100644 --- a/api/.env.example +++ b/api/.env.example @@ -7,6 +7,13 @@ # 不要把真实密钥提交到仓库。 # ============================================================================= +# ============================================================================= +# Docker Compose(宿主机独立 Caddy 反代到本 API) +# ============================================================================= +# 映射到宿主机的端口,默认 8000;与同机其它项目冲突时改为未占用端口,并在独立 Caddy 的 Caddyfile 中 reverse_proxy 到 127.0.0.1:该端口。 +# LIFE_ECHO_API_HOST_PORT=8000 +# 若 Caddy 跑在独立容器且非 host 网络,不要用 127.0.0.1,应把 Caddy 加入与本 compose 相同的 Docker 网络,并对 http://life-echo-api-prod:8000 做 reverse_proxy。 + # ============================================================================= # Logging(loguru sink 最低级别:TRACE / DEBUG / INFO / WARNING / ERROR / CRITICAL) # ============================================================================= diff --git a/api/Caddyfile b/api/Caddyfile deleted file mode 100644 index 1083339..0000000 --- a/api/Caddyfile +++ /dev/null @@ -1,4 +0,0 @@ -{$CADDY_PRIMARY_DOMAIN:lifecho.worldsplats.com} { - encode zstd gzip - reverse_proxy api:8000 -} diff --git a/api/README.md b/api/README.md index 1cca388..0e85d6d 100644 --- a/api/README.md +++ b/api/README.md @@ -138,7 +138,7 @@ cd api cd api # 1. 启动 PostgreSQL + Redis -docker-compose -f docker-compose.dev.yml up -d +docker compose -f docker-compose.dev.yml up -d # 2. 安装依赖 pip install -r requirements.txt @@ -178,10 +178,10 @@ cp .env .env.prod # 编辑 .env.prod # 启动所有服务 -docker-compose up -d +docker compose up -d # 查看日志 -docker-compose logs -f +docker compose logs -f ``` 服务启动后,访问: diff --git a/api/deploy.sh b/api/deploy.sh index 4929d6c..8ccbaa9 100755 --- a/api/deploy.sh +++ b/api/deploy.sh @@ -213,9 +213,9 @@ main() { print_success "短信验证码功能部署完成!" echo print_info "后续步骤:" - echo " 1. 使用 Docker 部署: docker-compose up -d" + echo " 1. 使用 Docker 部署: docker compose up -d" echo " 2. 或使用 Systemd 部署: sudo systemctl start life-echo-api" - echo " 3. 查看日志: docker-compose logs -f 或 journalctl -u life-echo-api -f" + echo " 3. 查看日志: docker compose logs -f 或 journalctl -u life-echo-api -f" echo " 4. 运行测试: python test_sms_verification.py" echo " 5. 查看部署文档: docs/部署指南.md" echo diff --git a/api/docker-compose.dev.yml b/api/docker-compose.dev.yml index 66830b4..865b21a 100644 --- a/api/docker-compose.dev.yml +++ b/api/docker-compose.dev.yml @@ -1,5 +1,5 @@ # 开发环境 Docker Compose -# 使用方法: docker-compose -f docker-compose.dev.yml up -d +# 使用方法: docker compose -f docker-compose.dev.yml up -d services: # PostgreSQL 数据库(pg17 + pgvector,memory 模块需要 vector 类型) diff --git a/api/docker-compose.yml b/api/docker-compose.yml index f199ba6..5b63f20 100644 --- a/api/docker-compose.yml +++ b/api/docker-compose.yml @@ -58,8 +58,10 @@ services: dockerfile: Dockerfile image: life-echo-api:latest container_name: life-echo-api-prod - expose: - - "8000" + # 独立 Caddy(宿主机或其它 compose)经 HTTPS 反代;仅绑定本机回环,避免与机上其它项目端口直接对公网。 + # 若与 Cosmetic 等共用主机且 8000 已被占用,在 .env 中设置 LIFE_ECHO_API_HOST_PORT=其它端口并在 Caddyfile 中一致。 + ports: + - "127.0.0.1:${LIFE_ECHO_API_HOST_PORT:-8000}:8000" env_file: - .env environment: @@ -118,28 +120,6 @@ services: max-size: "10m" max-file: "3" - caddy: - image: m.daocloud.io/docker.io/library/caddy:2-alpine - container_name: life-echo-caddy - depends_on: - api: - condition: service_healthy - ports: - - "80:80" - - "443:443" - volumes: - - ./Caddyfile:/etc/caddy/Caddyfile:ro - - caddy_data:/data - - caddy_config:/config - restart: always - networks: - - life-echo-network - logging: - driver: "json-file" - options: - max-size: "10m" - max-file: "3" - # Celery Beat(定时任务调度,可选) # celery-beat: # build: @@ -193,7 +173,3 @@ volumes: driver: local redis_data: driver: local - caddy_data: - driver: local - caddy_config: - driver: local diff --git a/api/docs/本地开发环境配置.md b/api/docs/本地开发环境配置.md index 55633d4..4655865 100644 --- a/api/docs/本地开发环境配置.md +++ b/api/docs/本地开发环境配置.md @@ -30,7 +30,7 @@ ```bash cd api -docker-compose -f docker-compose.dev.yml up -d +docker compose -f docker-compose.dev.yml up -d ``` 验证 Redis 是否运行: @@ -138,13 +138,13 @@ cp .env .env.prod # 编辑 .env.prod 配置生产环境变量 # 启动所有服务 -docker-compose up -d +docker compose up -d # 查看日志 -docker-compose logs -f +docker compose logs -f # 停止服务 -docker-compose down +docker compose down ``` ### 服务扩展 @@ -153,7 +153,7 @@ docker-compose down ```bash # 启动额外的 worker -docker-compose up -d --scale celery-worker=3 +docker compose up -d --scale celery-worker=3 ``` ### 监控(可选) @@ -161,7 +161,7 @@ docker-compose up -d --scale celery-worker=3 启用 Flower 监控面板: 1. 编辑 `docker-compose.yml`,取消 `flower` 服务的注释 -2. 重启服务:`docker-compose up -d` +2. 重启服务:`docker compose up -d` 3. 访问 http://localhost:5555 查看 Celery 任务监控 ## 常见问题 diff --git a/api/docs/部署指南.md b/api/docs/部署指南.md index 4a80ff9..dda4786 100644 --- a/api/docs/部署指南.md +++ b/api/docs/部署指南.md @@ -207,7 +207,7 @@ volumes: ```bash cd api -docker-compose up -d +docker compose up -d ``` #### 5.2 使用Systemd部署 @@ -297,7 +297,7 @@ curl -X POST http://localhost:8000/api/auth/sms/send \ ```bash # Docker部署 -docker-compose logs -f api +docker compose logs -f api # Systemd部署 sudo journalctl -u life-echo-api -f @@ -541,7 +541,7 @@ SELECT 1. 停止新版本服务 ```bash -docker-compose down +docker compose down # 或 sudo systemctl stop life-echo-api ``` @@ -558,7 +558,7 @@ git checkout previous-version 4. 重启服务 ```bash -docker-compose up -d +docker compose up -d # 或 sudo systemctl start life-echo-api ``` diff --git a/app-expo/src/core/config.ts b/app-expo/src/core/config.ts index 27ae64c..1f2c98b 100644 --- a/app-expo/src/core/config.ts +++ b/app-expo/src/core/config.ts @@ -1,6 +1,6 @@ export const config = { - apiBaseUrl: process.env.EXPO_PUBLIC_API_URL ?? 'http://192.168.10.178:8000', - wsBaseUrl: process.env.EXPO_PUBLIC_WS_URL ?? 'ws://192.168.10.178:8000', + apiBaseUrl: process.env.EXPO_PUBLIC_API_URL ?? 'http://192.168.10.151:8000', + wsBaseUrl: process.env.EXPO_PUBLIC_WS_URL ?? 'ws://192.168.10.151:8000', isDebugMode: __DEV__, api: {