diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index b1408a6..e67d243 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -78,6 +78,23 @@ jobs: # 容器内进程是 uid 10001,日志目录要给它写权限 chown -R 10001:10001 "$DIR/storage" + # 配置文件含密钥,不打入镜像,由运维手动放置。缺失或不可读会导致容器启动即 panic, + # 此处提前拦截,避免「容器起不来 → 健康检查失败 → 回滚」这种误导性报错。 + CONFIG_FILE="$DIR/configs/config.yaml" + if [ ! -f "$CONFIG_FILE" ]; then + echo "缺少配置文件:$CONFIG_FILE" >&2 + echo "请参考仓库 configs/config.example.yaml 在生产机放置该文件后重试。" >&2 + exit 1 + fi + # 容器内为 uid 10001,需 other 可读(推荐 644):权限位末位为 4~7 才可读 + case "$(stat -c '%a' "$CONFIG_FILE" 2>/dev/null || echo 644)" in + *4|*5|*6|*7) echo "配置文件就绪:$CONFIG_FILE" ;; + *) + echo "配置文件权限过严:$CONFIG_FILE 需对 uid 10001 可读(chmod 644)" >&2 + exit 1 + ;; + esac + # 记住旧镜像,用于失败回滚 OLD_IMAGE=$(docker inspect -f '{{.Image}}' $APP 2>/dev/null || echo "")