- 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权限初始化
89 lines
3.6 KiB
Bash
Executable File
89 lines
3.6 KiB
Bash
Executable File
#!/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 "╚══════════════════════════════════════════╝"
|