portal/deploy.sh
Hermes Agent ae06dda9da feat: portal webapp - CMS独立Web应用壳
- app/portal.py: 主入口,通过from cms.init import load_cms加载业务模块
- conf/config.json: 应用配置(ocai_cms数据库, 端口9090, cms模块wwwroot挂载到/cms)
- wwwroot/: 公开页面(index/news/cases/products)和公开API
- build.sh: 构建脚本(安装基础设施包+pip install cms模块+DDL/CRUD生成)
- deploy.sh: 一键部署脚本(构建→建表→初始数据→权限→启动)
- init_data.py: 从cms模块init/data.yaml加载初始数据
- init_any/superuser_permissions.py: RBAC权限初始化
2026-06-15 11:06:10 +08:00

89 lines
3.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "╚══════════════════════════════════════════╝"