Merge remote-tracking branch 'origin/development'
This commit is contained in:
8
.github/workflows/README.md
vendored
8
.github/workflows/README.md
vendored
@@ -99,9 +99,9 @@ docker login crpi-u2903xccyzd6nqnc.cn-shanghai.personal.cr.aliyuncs.com \
|
|||||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||||
sudo sh get-docker.sh
|
sudo sh get-docker.sh
|
||||||
|
|
||||||
# 安装 Docker Compose
|
# Docker Compose V2(命令为 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
|
# 多数 Docker 安装已包含插件;若提示找不到 compose:
|
||||||
sudo chmod +x /usr/local/bin/docker-compose
|
# sudo apt-get update && sudo apt-get install -y docker-compose-plugin
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. 首次部署准备
|
### 4. 首次部署准备
|
||||||
@@ -164,7 +164,7 @@ mkdir -p /opt/life-echo/api
|
|||||||
### 4. 容器启动失败
|
### 4. 容器启动失败
|
||||||
|
|
||||||
- 检查 docker-compose.yml 文件是否正确
|
- 检查 docker-compose.yml 文件是否正确
|
||||||
- 查看容器日志:`docker-compose logs`
|
- 查看容器日志:`docker compose logs`
|
||||||
- 确认环境变量配置正确
|
- 确认环境变量配置正确
|
||||||
|
|
||||||
## 手动触发
|
## 手动触发
|
||||||
|
|||||||
32
.github/workflows/docker-build-deploy.yml
vendored
32
.github/workflows/docker-build-deploy.yml
vendored
@@ -244,9 +244,8 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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/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"
|
scp -P "$SSH_PORT" "$ENV_SRC" "$SSH_USER@$SSH_HOST:$COMPOSE_DIR/api/.env.candidate"
|
||||||
|
|
||||||
ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "
|
ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "
|
||||||
@@ -271,9 +270,6 @@ jobs:
|
|||||||
if [ -f '$COMPOSE_FILE' ]; then
|
if [ -f '$COMPOSE_FILE' ]; then
|
||||||
cp '$COMPOSE_FILE' '${COMPOSE_FILE}.predeploy'
|
cp '$COMPOSE_FILE' '${COMPOSE_FILE}.predeploy'
|
||||||
fi
|
fi
|
||||||
if [ -f 'Caddyfile' ]; then
|
|
||||||
cp 'Caddyfile' 'Caddyfile.predeploy'
|
|
||||||
fi
|
|
||||||
if [ -f '.env.production' ]; then
|
if [ -f '.env.production' ]; then
|
||||||
cp '.env.production' '.env.production.predeploy'
|
cp '.env.production' '.env.production.predeploy'
|
||||||
fi
|
fi
|
||||||
@@ -281,13 +277,12 @@ jobs:
|
|||||||
cp '.env' '.env.predeploy'
|
cp '.env' '.env.predeploy'
|
||||||
fi
|
fi
|
||||||
mv 'docker-compose.candidate.yml' '$COMPOSE_FILE'
|
mv 'docker-compose.candidate.yml' '$COMPOSE_FILE'
|
||||||
mv 'Caddyfile.candidate' 'Caddyfile'
|
|
||||||
mv '.env.candidate' '.env'
|
mv '.env.candidate' '.env'
|
||||||
docker-compose -f '$COMPOSE_FILE' up -d --remove-orphans
|
docker compose -f '$COMPOSE_FILE' up -d --remove-orphans
|
||||||
echo '等待服务启动...'
|
echo '等待服务启动...'
|
||||||
sleep 20
|
sleep 20
|
||||||
docker image prune -f || true
|
docker image prune -f || true
|
||||||
docker-compose -f '$COMPOSE_FILE' ps
|
docker compose -f '$COMPOSE_FILE' ps
|
||||||
"
|
"
|
||||||
|
|
||||||
- name: Verify deployment
|
- name: Verify deployment
|
||||||
@@ -296,12 +291,12 @@ jobs:
|
|||||||
ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "
|
ssh -p "$SSH_PORT" "$SSH_USER@$SSH_HOST" "
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd '$COMPOSE_DIR/api'
|
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
|
if [ -z \"\$API_CID\" ]; then
|
||||||
echo '未找到 api 容器'
|
echo '未找到 api 容器'
|
||||||
docker-compose logs --tail=80 api || true
|
docker compose logs --tail=80 api || true
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -317,20 +312,9 @@ jobs:
|
|||||||
|
|
||||||
if [ \"\$API_HEALTH\" != 'healthy' ]; then
|
if [ \"\$API_HEALTH\" != 'healthy' ]; then
|
||||||
echo 'api 容器未在预期时间内变为 healthy'
|
echo 'api 容器未在预期时间内变为 healthy'
|
||||||
docker-compose logs --tail=80 api || true
|
docker compose logs --tail=80 api || true
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CADDY_CID=\$(docker-compose ps -q caddy || true)
|
docker compose logs --tail=50 api
|
||||||
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
|
|
||||||
"
|
"
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ uv sync --dev
|
|||||||
# 参考 api/README.md 中的环境变量配置说明
|
# 参考 api/README.md 中的环境变量配置说明
|
||||||
|
|
||||||
# 4. 启动 PostgreSQL 和 Redis
|
# 4. 启动 PostgreSQL 和 Redis
|
||||||
docker-compose -f docker-compose.dev.yml up -d
|
docker compose -f docker-compose.dev.yml up -d
|
||||||
|
|
||||||
# 5. 数据库迁移
|
# 5. 数据库迁移
|
||||||
# uv run alembic upgrade head
|
# uv run alembic upgrade head
|
||||||
|
|||||||
@@ -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)
|
# Logging(loguru sink 最低级别:TRACE / DEBUG / INFO / WARNING / ERROR / CRITICAL)
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
{$CADDY_PRIMARY_DOMAIN:lifecho.worldsplats.com} {
|
|
||||||
encode zstd gzip
|
|
||||||
reverse_proxy api:8000
|
|
||||||
}
|
|
||||||
@@ -138,7 +138,7 @@ cd api
|
|||||||
cd api
|
cd api
|
||||||
|
|
||||||
# 1. 启动 PostgreSQL + Redis
|
# 1. 启动 PostgreSQL + Redis
|
||||||
docker-compose -f docker-compose.dev.yml up -d
|
docker compose -f docker-compose.dev.yml up -d
|
||||||
|
|
||||||
# 2. 安装依赖
|
# 2. 安装依赖
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
@@ -178,10 +178,10 @@ cp .env .env.prod
|
|||||||
# 编辑 .env.prod
|
# 编辑 .env.prod
|
||||||
|
|
||||||
# 启动所有服务
|
# 启动所有服务
|
||||||
docker-compose up -d
|
docker compose up -d
|
||||||
|
|
||||||
# 查看日志
|
# 查看日志
|
||||||
docker-compose logs -f
|
docker compose logs -f
|
||||||
```
|
```
|
||||||
|
|
||||||
服务启动后,访问:
|
服务启动后,访问:
|
||||||
|
|||||||
@@ -213,9 +213,9 @@ main() {
|
|||||||
print_success "短信验证码功能部署完成!"
|
print_success "短信验证码功能部署完成!"
|
||||||
echo
|
echo
|
||||||
print_info "后续步骤:"
|
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 " 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 " 4. 运行测试: python test_sms_verification.py"
|
||||||
echo " 5. 查看部署文档: docs/部署指南.md"
|
echo " 5. 查看部署文档: docs/部署指南.md"
|
||||||
echo
|
echo
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# 开发环境 Docker Compose
|
# 开发环境 Docker Compose
|
||||||
# 使用方法: docker-compose -f docker-compose.dev.yml up -d
|
# 使用方法: docker compose -f docker-compose.dev.yml up -d
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# PostgreSQL 数据库(pg17 + pgvector,memory 模块需要 vector 类型)
|
# PostgreSQL 数据库(pg17 + pgvector,memory 模块需要 vector 类型)
|
||||||
|
|||||||
@@ -58,8 +58,10 @@ services:
|
|||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
image: life-echo-api:latest
|
image: life-echo-api:latest
|
||||||
container_name: life-echo-api-prod
|
container_name: life-echo-api-prod
|
||||||
expose:
|
# 独立 Caddy(宿主机或其它 compose)经 HTTPS 反代;仅绑定本机回环,避免与机上其它项目端口直接对公网。
|
||||||
- "8000"
|
# 若与 Cosmetic 等共用主机且 8000 已被占用,在 .env 中设置 LIFE_ECHO_API_HOST_PORT=其它端口并在 Caddyfile 中一致。
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:${LIFE_ECHO_API_HOST_PORT:-8000}:8000"
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
@@ -118,28 +120,6 @@ services:
|
|||||||
max-size: "10m"
|
max-size: "10m"
|
||||||
max-file: "3"
|
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(定时任务调度,可选)
|
||||||
# celery-beat:
|
# celery-beat:
|
||||||
# build:
|
# build:
|
||||||
@@ -193,7 +173,3 @@ volumes:
|
|||||||
driver: local
|
driver: local
|
||||||
redis_data:
|
redis_data:
|
||||||
driver: local
|
driver: local
|
||||||
caddy_data:
|
|
||||||
driver: local
|
|
||||||
caddy_config:
|
|
||||||
driver: local
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd api
|
cd api
|
||||||
docker-compose -f docker-compose.dev.yml up -d
|
docker compose -f docker-compose.dev.yml up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
验证 Redis 是否运行:
|
验证 Redis 是否运行:
|
||||||
@@ -138,13 +138,13 @@ cp .env .env.prod
|
|||||||
# 编辑 .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
|
```bash
|
||||||
# 启动额外的 worker
|
# 启动额外的 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 监控面板:
|
启用 Flower 监控面板:
|
||||||
|
|
||||||
1. 编辑 `docker-compose.yml`,取消 `flower` 服务的注释
|
1. 编辑 `docker-compose.yml`,取消 `flower` 服务的注释
|
||||||
2. 重启服务:`docker-compose up -d`
|
2. 重启服务:`docker compose up -d`
|
||||||
3. 访问 http://localhost:5555 查看 Celery 任务监控
|
3. 访问 http://localhost:5555 查看 Celery 任务监控
|
||||||
|
|
||||||
## 常见问题
|
## 常见问题
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ volumes:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd api
|
cd api
|
||||||
docker-compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 5.2 使用Systemd部署
|
#### 5.2 使用Systemd部署
|
||||||
@@ -297,7 +297,7 @@ curl -X POST http://localhost:8000/api/auth/sms/send \
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Docker部署
|
# Docker部署
|
||||||
docker-compose logs -f api
|
docker compose logs -f api
|
||||||
|
|
||||||
# Systemd部署
|
# Systemd部署
|
||||||
sudo journalctl -u life-echo-api -f
|
sudo journalctl -u life-echo-api -f
|
||||||
@@ -541,7 +541,7 @@ SELECT
|
|||||||
|
|
||||||
1. 停止新版本服务
|
1. 停止新版本服务
|
||||||
```bash
|
```bash
|
||||||
docker-compose down
|
docker compose down
|
||||||
# 或
|
# 或
|
||||||
sudo systemctl stop life-echo-api
|
sudo systemctl stop life-echo-api
|
||||||
```
|
```
|
||||||
@@ -558,7 +558,7 @@ git checkout previous-version
|
|||||||
|
|
||||||
4. 重启服务
|
4. 重启服务
|
||||||
```bash
|
```bash
|
||||||
docker-compose up -d
|
docker compose up -d
|
||||||
# 或
|
# 或
|
||||||
sudo systemctl start life-echo-api
|
sudo systemctl start life-echo-api
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
export const config = {
|
export const config = {
|
||||||
apiBaseUrl: process.env.EXPO_PUBLIC_API_URL ?? 'http://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.178:8000',
|
wsBaseUrl: process.env.EXPO_PUBLIC_WS_URL ?? 'ws://192.168.10.151:8000',
|
||||||
isDebugMode: __DEV__,
|
isDebugMode: __DEV__,
|
||||||
|
|
||||||
api: {
|
api: {
|
||||||
|
|||||||
Reference in New Issue
Block a user