feat: v2 版本 #206
@@ -8,26 +8,36 @@ jobs:
|
||||
deploy:
|
||||
runs-on: aliyun
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: "http://8.161.227.145:3000/huanghaosheng/checkout@releases/v4"
|
||||
with:
|
||||
ref: ${{ github.ref }}
|
||||
|
||||
- name: Verify checkout
|
||||
- name: Deploy
|
||||
run: |
|
||||
echo "触发分支: ${GITHUB_REF_NAME}"
|
||||
echo "当前 HEAD: $(git log -1 --oneline)"
|
||||
if [ -d /root/camtalk/.git ]; then
|
||||
cd /root/camtalk
|
||||
git fetch origin ${GITHUB_REF_NAME} --depth=1
|
||||
git reset --hard origin/${GITHUB_REF_NAME}
|
||||
else
|
||||
git clone --depth=1 --branch ${GITHUB_REF_NAME} \
|
||||
http://8.161.227.145:3000/XEngineers/CamTalk.git /tmp/camtalk-deploy
|
||||
mkdir -p /root/camtalk
|
||||
rsync -a --delete \
|
||||
--exclude='.env' \
|
||||
--exclude='pgdata' \
|
||||
--exclude='redisdata' \
|
||||
/tmp/camtalk-deploy/ /root/camtalk/
|
||||
rm -rf /tmp/camtalk-deploy
|
||||
fi
|
||||
|
||||
- name: Install Docker CLI
|
||||
run: apk add --no-cache docker-cli docker-cli-compose rsync
|
||||
# 确保 .env 存在于项目目录(CI 容器内无法直接访问 /opt)
|
||||
if [ ! -f /root/camtalk/.env ]; then
|
||||
cp /opt/camtalk/.env /root/camtalk/.env 2>/dev/null || true
|
||||
fi
|
||||
if [ ! -f /root/camtalk/.env ]; then
|
||||
echo "=============================================="
|
||||
echo " 错误: /root/camtalk/.env 不存在"
|
||||
echo " 请在服务器上执行: cp /opt/camtalk/.env /root/camtalk/.env"
|
||||
echo "=============================================="
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Sync to deploy directory
|
||||
run: |
|
||||
mkdir -p /root/camtalk
|
||||
rsync -a --delete --exclude='.env' --exclude='pgdata' --exclude='redisdata' ./ /root/camtalk/
|
||||
|
||||
- name: Build and Deploy
|
||||
run: |
|
||||
chmod +x /root/camtalk/deploy.sh
|
||||
/root/camtalk/deploy.sh build
|
||||
/root/camtalk/deploy.sh restart
|
||||
/root/camtalk/deploy.sh restart
|
||||
40
deploy.sh
40
deploy.sh
@@ -4,8 +4,9 @@ set -euo pipefail
|
||||
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# .env 固定路径(独立于项目目录,保证持久性)
|
||||
ENV_FILE="/opt/camtalk/.env"
|
||||
# .env 存放于项目目录,供 docker compose env_file 读取
|
||||
#(act_runner 容器内无法访问 /opt/camtalk,需放在项目目录下)
|
||||
ENV_FILE="$PROJECT_DIR/.env"
|
||||
|
||||
# 颜色输出
|
||||
GREEN='\033[0;32m'
|
||||
@@ -15,19 +16,28 @@ info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||||
|
||||
# .env 检查:首次部署时从 .env.example 复制模板,提示用户填写
|
||||
check_env() {
|
||||
local env_example="$PROJECT_DIR/backend/.env.example"
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
mkdir -p "$(dirname "$ENV_FILE")"
|
||||
if [ -f "$env_example" ]; then
|
||||
cp "$env_example" "$ENV_FILE"
|
||||
info "未找到 $ENV_FILE,已从 .env.example 复制模板"
|
||||
echo " 请编辑 $ENV_FILE 填入实际配置后重新运行本脚本"
|
||||
exit 0
|
||||
else
|
||||
echo "错误: $ENV_FILE 和 .env.example 均不存在,请手动创建"
|
||||
exit 1
|
||||
fi
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 如果项目目录没有 .env,尝试从 /opt/camtalk/.env 复制(兼容旧部署)
|
||||
local legacy_env="/opt/camtalk/.env"
|
||||
if [ -f "$legacy_env" ]; then
|
||||
cp "$legacy_env" "$ENV_FILE"
|
||||
info "已从 $legacy_env 复制环境变量文件"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "=============================================="
|
||||
echo " 错误: 未找到环境变量文件"
|
||||
echo ""
|
||||
echo " 请在以下任一位置创建 .env 文件:"
|
||||
echo " 1. $ENV_FILE"
|
||||
echo " 2. $legacy_env(运行本脚本时会自动复制)"
|
||||
echo ""
|
||||
echo " 模板参考: backend/.env.example"
|
||||
echo "=============================================="
|
||||
exit 1
|
||||
}
|
||||
|
||||
check_env
|
||||
@@ -98,4 +108,4 @@ case "${1:-}" in
|
||||
logs) shift; cmd_logs "$@" ;;
|
||||
status) cmd_status ;;
|
||||
*) usage; exit 1 ;;
|
||||
esac
|
||||
esac
|
||||
@@ -18,7 +18,7 @@ services:
|
||||
dockerfile: Dockerfile
|
||||
container_name: camtalk-backend
|
||||
env_file:
|
||||
- /opt/camtalk/.env
|
||||
- .env
|
||||
environment:
|
||||
# 三级存储配置(敏感信息通过 env_file 注入)
|
||||
- CAMTALK_STORAGE_REDIS_ENABLED=${CAMTALK_STORAGE_REDIS_ENABLED:-true}
|
||||
@@ -38,7 +38,7 @@ services:
|
||||
image: docker.m.daocloud.io/library/postgres:15-alpine
|
||||
container_name: camtalk-postgres
|
||||
env_file:
|
||||
- /opt/camtalk/.env
|
||||
- .env
|
||||
environment:
|
||||
POSTGRES_DB: camtalk
|
||||
volumes:
|
||||
@@ -57,7 +57,7 @@ services:
|
||||
image: docker.m.daocloud.io/library/redis:7-alpine
|
||||
container_name: camtalk-redis
|
||||
env_file:
|
||||
- /opt/camtalk/.env
|
||||
- .env
|
||||
command: >
|
||||
sh -c '
|
||||
if [ -n "$$CAMTALK_REDIS_PASSWORD" ]; then
|
||||
|
||||
Reference in New Issue
Block a user