feat: live module and jenkins pipeline to harbor deploy
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
# ============================================================
|
||||
# live.fuhua91.com 一键部署脚本
|
||||
#
|
||||
# 用法:
|
||||
# ./deploy.sh 拉取 latest 最新镜像并重启
|
||||
# ./deploy.sh v1.0.0 部署指定版本
|
||||
#
|
||||
# 建议: 放到 /root/deploy.sh,执行 chmod 700 /root/deploy.sh
|
||||
# 依赖: 服务器已安装 docker,且能访问 harbor.fuhua91.com
|
||||
# ============================================================
|
||||
set -euo pipefail
|
||||
|
||||
# ---------- 可按需调整的参数 ----------
|
||||
REGISTRY="harbor.fuhua91.com"
|
||||
PROJECT="live"
|
||||
# Harbor 机器人账号(也可通过环境变量 HARBOR_USER / HARBOR_PASSWORD 覆盖)
|
||||
HARBOR_USER_DEFAULT='robot$live+live'
|
||||
HARBOR_PASSWORD_DEFAULT='R4p6ieacIogXE779eL1HXhCpA4bx4SA7'
|
||||
|
||||
BASE_DIR="/www/wwwroot/live.fuhua91.com"
|
||||
CONFIG_DIR="$BASE_DIR/config" # 后端配置目录 -> 容器内 /data/conf
|
||||
LOG_DIR="$BASE_DIR/log" # 后端日志目录 -> 容器内 /app/logs
|
||||
UPLOADS_DIR="$BASE_DIR/uploads" # 上传文件目录 -> 容器内 /app/uploads
|
||||
|
||||
FRONTEND_PORT=9501 # 前端 nginx 容器
|
||||
BACKEND_PORT=9502 # 后端 API/WebSocket 容器
|
||||
NETWORK="live-net"
|
||||
BACKEND_NAME="live-backend"
|
||||
FRONTEND_NAME="live-frontend"
|
||||
# --------------------------------------
|
||||
|
||||
TAG="${1:-latest}"
|
||||
BACKEND_IMAGE="$REGISTRY/$PROJECT/backend:$TAG"
|
||||
FRONTEND_IMAGE="$REGISTRY/$PROJECT/frontend:$TAG"
|
||||
|
||||
echo "==> 部署版本: $TAG"
|
||||
|
||||
# 1. 准备挂载目录
|
||||
mkdir -p "$CONFIG_DIR" "$LOG_DIR" "$UPLOADS_DIR"
|
||||
|
||||
# 2. 首次运行检查配置文件
|
||||
if [ ! -f "$CONFIG_DIR/config.yaml" ]; then
|
||||
echo "错误: 缺少 $CONFIG_DIR/config.yaml"
|
||||
echo "请先将项目 configs/config.yaml 复制到该路径,"
|
||||
echo "并修改其中的 MySQL / Redis 等连接信息后重新执行本脚本。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. 登录 Harbor(优先使用环境变量 HARBOR_USER / HARBOR_PASSWORD)
|
||||
HARBOR_USER="${HARBOR_USER:-$HARBOR_USER_DEFAULT}"
|
||||
HARBOR_PASSWORD="${HARBOR_PASSWORD:-$HARBOR_PASSWORD_DEFAULT}"
|
||||
echo "==> 登录 $REGISTRY"
|
||||
echo "$HARBOR_PASSWORD" | docker login "$REGISTRY" --username "$HARBOR_USER" --password-stdin >/dev/null
|
||||
|
||||
# 4. 拉取最新镜像
|
||||
echo "==> 拉取镜像"
|
||||
docker pull "$BACKEND_IMAGE"
|
||||
docker pull "$FRONTEND_IMAGE"
|
||||
|
||||
# 5. 重建容器
|
||||
echo "==> 重启容器"
|
||||
docker network create "$NETWORK" >/dev/null 2>&1 || true
|
||||
docker rm -f "$BACKEND_NAME" "$FRONTEND_NAME" 2>/dev/null || true
|
||||
|
||||
# 容器内进程以 uid 1000 (kra) 运行,日志/上传目录需要写权限
|
||||
chown -R 1000:1000 "$LOG_DIR" "$UPLOADS_DIR" 2>/dev/null || \
|
||||
chmod -R 777 "$LOG_DIR" "$UPLOADS_DIR"
|
||||
|
||||
# 后端: 配置 /data/conf,日志 /app/logs,上传 /app/uploads
|
||||
docker run -d --name "$BACKEND_NAME" \
|
||||
--restart always \
|
||||
--network "$NETWORK" \
|
||||
-p "$BACKEND_PORT:8000" \
|
||||
-v "$CONFIG_DIR:/data/conf" \
|
||||
-v "$LOG_DIR:/app/logs" \
|
||||
-v "$UPLOADS_DIR:/app/uploads" \
|
||||
"$BACKEND_IMAGE"
|
||||
|
||||
# 前端: nginx 静态站点,容器内已配置 /api -> live-backend:8000
|
||||
docker run -d --name "$FRONTEND_NAME" \
|
||||
--restart always \
|
||||
--network "$NETWORK" \
|
||||
-p "$FRONTEND_PORT:80" \
|
||||
"$FRONTEND_IMAGE"
|
||||
|
||||
docker logout "$REGISTRY" >/dev/null 2>&1 || true
|
||||
|
||||
echo "==> 部署完成"
|
||||
docker ps --filter "name=$BACKEND_NAME" --filter "name=$FRONTEND_NAME"
|
||||
echo ""
|
||||
echo "前端容器: http://<服务器IP>:$FRONTEND_PORT"
|
||||
echo "后端容器: http://<服务器IP>:$BACKEND_PORT"
|
||||
echo "提示: 网站正常访问走宝塔 nginx 反代(80/443),9501/9502 为直连调试端口,记得放行防火墙。"
|
||||
Reference in New Issue
Block a user