#!/usr/bin/env bash # Portal 一键部署脚本 # 完成从构建到启动的全流程 # 用法: cd ~/repos/portal && ./deploy.sh set -e cdir=$(cd "$(dirname "$0")" && pwd) cd "$cdir" echo "╔══════════════════════════════════════════╗" echo "║ Portal CMS — 一键部署 ║" echo "╚══════════════════════════════════════════╝" echo "" # Step 1: Build echo "=== Step 1/5: 构建 ===" bash "$cdir/build.sh" echo "" # Step 2: Database DDL echo "=== Step 2/5: 创建数据库表 ===" if [ -f "$cdir/cms.ddl.sql" ]; then # 从config.json读取数据库连接信息 DB_HOST=$(python3 -c "import json; c=json.load(open('$cdir/conf/config.json')); print(c['databases']['ocai_cms']['kwargs']['host'])" 2>/dev/null || echo "db") DB_USER=$(python3 -c "import json; c=json.load(open('$cdir/conf/config.json')); print(c['databases']['ocai_cms']['kwargs']['user'])" 2>/dev/null || echo "test") DB_PASS=$(python3 -c " import json, sys sys.path.insert(0, '$cdir') from appPublic.password import decode c=json.load(open('$cdir/conf/config.json')) print(decode(c['databases']['ocai_cms']['kwargs']['password'], c['password_key'])) " 2>/dev/null || echo "") DB_NAME=$(python3 -c "import json; c=json.load(open('$cdir/conf/config.json')); print(c['databases']['ocai_cms']['kwargs']['db'])" 2>/dev/null || echo "ocai_cms") if [ -n "$DB_PASS" ]; then echo " 执行DDL: $DB_HOST/$DB_NAME ..." mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" < "$cdir/cms.ddl.sql" 2>/dev/null && \ echo " ✓ DDL执行成功" || \ echo " ⚠ DDL执行失败(表可能已存在),继续..." else echo " ⚠ 无法读取数据库密码,请手动执行:" echo " mysql -h $DB_HOST -u $DB_USER -p $DB_NAME < cms.ddl.sql" fi else echo " ⚠ cms.ddl.sql 不存在,跳过(请先运行 build.sh)" fi echo "" # Step 3: Init data echo "=== Step 3/5: 加载初始数据 ===" if [ -f "$cdir/py3/bin/python" ]; then "$cdir/py3/bin/python" "$cdir/init_data.py" 2>&1 || echo " ⚠ 初始数据加载失败,继续..." else echo " ⚠ py3未构建,跳过" fi echo "" # Step 4: Init permissions echo "=== Step 4/5: 初始化权限 ===" if [ -f "$cdir/py3/bin/python" ]; then "$cdir/py3/bin/python" "$cdir/init_superuser_permissions.py" 2>&1 || echo " ⚠ superuser权限失败" "$cdir/py3/bin/python" "$cdir/init_any_permissions.py" 2>&1 || echo " ⚠ any权限失败" "$cdir/py3/bin/python" ~/repos/cms/scripts/load_path.py 2>&1 || echo " ⚠ CMS模块权限失败" echo " ✓ 权限初始化完成" else echo " ⚠ py3未构建,跳过" fi echo "" # Step 5: Start echo "=== Step 5/5: 启动应用 ===" if [ -f "$cdir/start.sh" ]; then # 先停掉旧进程 bash "$cdir/stop.sh" 2>/dev/null || true sleep 1 bash "$cdir/start.sh" echo " ✓ 应用已启动" else echo " ⚠ start.sh 不存在" fi echo "" echo "╔══════════════════════════════════════════╗" echo "║ 部署完成! ║" echo "╠══════════════════════════════════════════╣" echo "║ 官网: http://localhost:9090/ ║" echo "║ 管理: http://localhost:9090/cms/admin.ui ║" echo "╚══════════════════════════════════════════╝"