fix:更新容器启动
This commit is contained in:
@@ -25,9 +25,12 @@ if [ "${START_ALL:-0}" = "1" ]; then
|
||||
START_BEAT="1"
|
||||
fi
|
||||
|
||||
# Beat 只负责“投递任务到队列”,真正执行仍需要 Worker;避免误配。
|
||||
if [ "$START_BEAT" = "1" ] && [ "$START_WORKER" != "1" ]; then
|
||||
log "提示:已启用 START_BEAT=1,自动同时启用 START_WORKER=1(否则队列无人执行)。"
|
||||
# Beat 只负责“投递任务到队列”,真正执行仍需要 Worker。
|
||||
# 说明:
|
||||
# - 单容器模式:若启动了 API(START_API=1)且同时启用了 Beat,则自动补齐 Worker,避免误配导致“只排程不执行”。
|
||||
# - 多容器模式:允许单独启动 beat 容器(START_API=0, START_BEAT=1),不做自动补齐。
|
||||
if [ "$START_API" = "1" ] && [ "$START_BEAT" = "1" ] && [ "$START_WORKER" != "1" ]; then
|
||||
log "提示:已启用 START_BEAT=1(且 START_API=1),自动同时启用 START_WORKER=1(否则队列无人执行)。"
|
||||
START_WORKER="1"
|
||||
fi
|
||||
|
||||
|
||||
@@ -7,25 +7,30 @@ set -euo pipefail
|
||||
# - 自动启动 uvicorn(默认开启 --reload)
|
||||
#
|
||||
# 用法示例:
|
||||
# ./run.sh # 默认 host=0.0.0.0 port=8000 env=dev reload=on
|
||||
# ./run.sh # 默认一键启动:API + Celery Worker + Celery Beat
|
||||
# ./run.sh --env prod # 使用 .env.prod(若存在且可被 source)
|
||||
# ./run.sh --port 9000 # 改端口
|
||||
# ./run.sh --no-reload # 关闭热更新
|
||||
# ./run.sh --with-worker --with-beat # 同时启动 Celery Worker + Beat(用于定时推送)
|
||||
# ./run.sh --all # 等价于 --with-worker --with-beat
|
||||
# START_ALL=1 ./run.sh # 用环境变量一键启动(适合写到脚本/别名里)
|
||||
# ./run.sh --api-only # 只启动 API(不启动 Worker/Beat)
|
||||
# ./run.sh --install-only # 只安装依赖,不启动
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
用法:
|
||||
./run.sh [--env dev|prod] [--host 0.0.0.0] [--port 8000] [--no-reload] [--with-worker] [--with-beat] [--skip-install] [--install-only]
|
||||
./run.sh [--env dev|prod] [--host 0.0.0.0] [--port 8000] [--no-reload] [--api-only] [--with-worker] [--with-beat] [--all] [--skip-install] [--install-only]
|
||||
|
||||
参数:
|
||||
--env dev|prod 优先尝试加载 .env.dev 或 .env.prod(如果存在)。
|
||||
--host <host> uvicorn host(默认 0.0.0.0)
|
||||
--port <port> uvicorn port(默认 8000)
|
||||
--no-reload 关闭 uvicorn --reload
|
||||
--api-only 只启动 API(不启动 Worker/Beat)
|
||||
--with-worker 同时启动 Celery Worker(处理异步/ETA 任务)
|
||||
--with-beat 同时启动 Celery Beat(定时调度,例如每日生成推送排程)
|
||||
--all 同时启动 Worker + Beat(等价于 --with-worker --with-beat)
|
||||
--skip-install 跳过依赖安装(默认会安装/更新 requirements.txt)
|
||||
--install-only 只安装依赖,不启动服务
|
||||
-h, --help 显示帮助
|
||||
@@ -33,6 +38,7 @@ usage() {
|
||||
说明:
|
||||
- 若你的 .env.* 不是 shell 可 source 的格式(例如包含空格/特殊字符未加引号),建议改成 KEY=value 形式。
|
||||
- 仅启动 API 并不会生成 `push_send_log`;要测试“定时推送”,需要 Beat 调度 `tasks.push.generate_daily_schedule`,并由 Worker 执行后续 ETA 任务。
|
||||
- 也可以用环境变量一键启动:START_ALL=1 ./run.sh
|
||||
- 启动后访问:
|
||||
/healthz 健康检查
|
||||
/docs OpenAPI 文档
|
||||
@@ -49,8 +55,10 @@ PORT="8000"
|
||||
RELOAD="1"
|
||||
SKIP_INSTALL="0"
|
||||
INSTALL_ONLY="0"
|
||||
WITH_WORKER="0"
|
||||
WITH_BEAT="0"
|
||||
API_ONLY="0"
|
||||
# 默认:一键启动(满足“bash run.sh 就全部启动”)
|
||||
WITH_WORKER="1"
|
||||
WITH_BEAT="1"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
@@ -70,6 +78,12 @@ while [[ $# -gt 0 ]]; do
|
||||
RELOAD="0"
|
||||
shift 1
|
||||
;;
|
||||
--api-only)
|
||||
API_ONLY="1"
|
||||
WITH_WORKER="0"
|
||||
WITH_BEAT="0"
|
||||
shift 1
|
||||
;;
|
||||
--with-worker)
|
||||
WITH_WORKER="1"
|
||||
shift 1
|
||||
@@ -78,6 +92,11 @@ while [[ $# -gt 0 ]]; do
|
||||
WITH_BEAT="1"
|
||||
shift 1
|
||||
;;
|
||||
--all)
|
||||
WITH_WORKER="1"
|
||||
WITH_BEAT="1"
|
||||
shift 1
|
||||
;;
|
||||
--skip-install)
|
||||
SKIP_INSTALL="1"
|
||||
shift 1
|
||||
@@ -113,6 +132,19 @@ if [[ -f "$ENV_FILE" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
# 允许通过环境变量一键开启(适合写到别名/CI 脚本里)
|
||||
if [[ "${START_ALL:-0}" == "1" ]]; then
|
||||
WITH_WORKER="1"
|
||||
WITH_BEAT="1"
|
||||
fi
|
||||
|
||||
# 允许通过环境变量强制只启动 API
|
||||
if [[ "${START_API_ONLY:-0}" == "1" ]]; then
|
||||
API_ONLY="1"
|
||||
WITH_WORKER="0"
|
||||
WITH_BEAT="0"
|
||||
fi
|
||||
|
||||
# 让 API/Celery 统一使用同一个 APP_ENV(影响 Redis key 前缀、定时任务配置等)
|
||||
export APP_ENV="${APP_ENV:-$ENV_NAME}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user