架构变更: - CMS作为独立进程运行(端口9090),不再嵌入Sage - 使用ahserver框架,复用rbac模块做认证授权 - 所有模块共享sage数据库(配置在conf/config.json) 新增文件: - app/cms.py: 独立Web应用主入口(webapp(init)) - app/global_func.py: 全局函数(get_module_dbname/UiWindow等) - conf/config.json: 应用配置模板(数据库/路径/处理器/Redis) - start.sh/stop.sh: 进程管理脚本 - pyproject.toml: 顶层Python包配置 路径重构(去掉/entcms前缀): - 官网首页: /entcms/index.ui → /index.ui - 管理后台: /entcms/admin.ui → /admin.ui - API: /entcms/api/xxx.dspy → /api/xxx.dspy - CRUD: /entcms/cms_content_list → /cms_content_list - dingdingflow保持/dingdingflow前缀(映射子目录) config.json路径映射: - entcms/wwwroot → / (根路径) - dingdingflow/wwwroot → /dingdingflow - bricks/dist → /bricks 构建脚本(build.sh): - 创建独立venv(py3/) - 安装核心依赖(apppublic/sqlor/ahserver/bricks/rbac等) - json2ddl生成CMS业务表DDL - xls2ui生成CRUD UI - 生成systemd服务文件 load_path.py更新: - entcms: 所有路径去掉/entcms前缀 - dingdingflow: 保持/dingdingflow前缀 - 查找set_role_perm.py支持CMS和Sage两种环境 init_superuser.py更新: - 支持CMS独立环境(自动检测py3/conf) - 创建superuser角色并分配全部权限
199 lines
5.6 KiB
Bash
Executable File
199 lines
5.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 开元云科技CMS — 独立Web应用构建脚本
|
|
# 用法: cd ~/repos/cms && ./build.sh
|
|
set -e
|
|
|
|
cdir=$(pwd)
|
|
uname=$(id -un)
|
|
gname=$(id -gn)
|
|
|
|
echo "============================================"
|
|
echo " 开元云科技CMS — 独立Web应用构建"
|
|
echo "============================================"
|
|
|
|
# ===========================================
|
|
# Step 1: Python虚拟环境
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Step 1: 创建Python虚拟环境 ---"
|
|
if [ ! -d "py3" ]; then
|
|
python3 -m venv py3
|
|
fi
|
|
source py3/bin/activate
|
|
|
|
# ===========================================
|
|
# Step 2: 核心依赖
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Step 2: 安装核心依赖 ---"
|
|
mkdir -p pkgs
|
|
|
|
# 核心框架包
|
|
for m in apppublic sqlor ahserver bricks-for-python xls2ddl
|
|
do
|
|
echo " install $m..."
|
|
cd $cdir/pkgs
|
|
if [ ! -d "$m" ]; then
|
|
git clone https://git.opencomputing.cn/yumoqing/$m
|
|
fi
|
|
cd $m
|
|
$cdir/py3/bin/pip install . 2>/dev/null || echo " WARN: $m install failed"
|
|
done
|
|
|
|
# bricks前端
|
|
echo " install bricks..."
|
|
cd $cdir/pkgs
|
|
if [ ! -d "bricks" ]; then
|
|
git clone https://git.opencomputing.cn/yumoqing/bricks
|
|
fi
|
|
cd bricks/bricks
|
|
./build.sh 2>/dev/null || echo " WARN: bricks build skipped"
|
|
|
|
# bricks符号链接
|
|
mkdir -p $cdir/bricks
|
|
if [ -d "$cdir/pkgs/bricks/dist" ]; then
|
|
rm -f $cdir/bricks
|
|
ln -sf $cdir/pkgs/bricks/dist $cdir/bricks
|
|
fi
|
|
|
|
# ===========================================
|
|
# Step 3: RBAC + AppBase模块(认证依赖)
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Step 3: 安装RBAC/AppBase模块 ---"
|
|
for m in appbase rbac checklang
|
|
do
|
|
echo " install $m..."
|
|
cd $cdir/pkgs
|
|
if [ ! -d "$m" ]; then
|
|
git clone https://git.opencomputing.cn/yumoqing/$m
|
|
fi
|
|
cd $m
|
|
$cdir/py3/bin/pip install . 2>/dev/null || echo " WARN: $m install failed"
|
|
done
|
|
|
|
# ===========================================
|
|
# Step 4: CMS业务模块
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Step 4: 安装CMS业务模块 ---"
|
|
|
|
# entcms模块
|
|
echo " install entcms..."
|
|
cd $cdir/entcms
|
|
$cdir/py3/bin/pip install . 2>/dev/null || echo " WARN: entcms install failed"
|
|
|
|
# dingdingflow模块
|
|
echo " install dingdingflow..."
|
|
cd $cdir/dingdingflow
|
|
$cdir/py3/bin/pip install . 2>/dev/null || echo " WARN: dingdingflow install failed"
|
|
|
|
# ===========================================
|
|
# Step 5: 数据库DDL(CMS业务表)
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Step 5: 生成数据库DDL ---"
|
|
|
|
# entcms表DDL
|
|
if [ -d "$cdir/entcms/models" ]; then
|
|
cd $cdir/entcms/models
|
|
echo " 生成 entcms DDL..."
|
|
$cdir/py3/bin/json2ddl mysql . > $cdir/entcms/mysql.ddl.sql 2>/dev/null || echo " WARN: json2ddl failed for entcms"
|
|
echo " DDL已生成: entcms/mysql.ddl.sql"
|
|
fi
|
|
|
|
# dingdingflow表DDL
|
|
if [ -d "$cdir/dingdingflow/models" ]; then
|
|
cd $cdir/dingdingflow/models
|
|
echo " 生成 dingdingflow DDL..."
|
|
$cdir/py3/bin/json2ddl mysql . > $cdir/dingdingflow/mysql.ddl.sql 2>/dev/null || echo " WARN: json2ddl failed for dingdingflow"
|
|
echo " DDL已生成: dingdingflow/mysql.ddl.sql"
|
|
fi
|
|
|
|
# ===========================================
|
|
# Step 6: CRUD UI生成
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Step 6: 生成CRUD UI ---"
|
|
|
|
# entcms CRUD
|
|
if [ -d "$cdir/entcms/json" ]; then
|
|
cd $cdir/entcms/json
|
|
echo " 生成 entcms CRUD UI..."
|
|
for f in *.json; do
|
|
[ -f "$f" ] || continue
|
|
echo " $f"
|
|
$cdir/py3/bin/xls2ui -m ../models -o ../wwwroot entcms $f 2>/dev/null || echo " WARN: xls2ui failed for $f"
|
|
done
|
|
fi
|
|
|
|
# dingdingflow CRUD
|
|
if [ -d "$cdir/dingdingflow/json" ]; then
|
|
cd $cdir/dingdingflow/json
|
|
echo " 生成 dingdingflow CRUD UI..."
|
|
for f in *.json; do
|
|
[ -f "$f" ] || continue
|
|
echo " $f"
|
|
$cdir/py3/bin/xls2ui -m ../models -o ../wwwroot dingdingflow $f 2>/dev/null || echo " WARN: xls2ui failed for $f"
|
|
done
|
|
fi
|
|
|
|
# ===========================================
|
|
# Step 7: 日志和文件目录
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Step 7: 创建运行时目录 ---"
|
|
mkdir -p $cdir/logs
|
|
mkdir -p $cdir/files
|
|
|
|
# ===========================================
|
|
# Step 8: systemd服务文件
|
|
# ===========================================
|
|
echo ""
|
|
echo "--- Step 8: 生成systemd服务文件 ---"
|
|
cat > $cdir/cms.service <<EOF
|
|
[Unit]
|
|
Description=KaiYuan Cloud CMS Web Application
|
|
After=network.target
|
|
|
|
[Service]
|
|
User=$uname
|
|
Group=$gname
|
|
Type=forking
|
|
WorkingDirectory=$cdir
|
|
ExecStart=$cdir/start.sh
|
|
ExecStop=$cdir/stop.sh
|
|
StandardOutput=append:$cdir/logs/cms.log
|
|
StandardError=append:$cdir/logs/cms.log
|
|
SyslogIdentifier=cms
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
echo " cms.service 已生成"
|
|
|
|
# ===========================================
|
|
# Done
|
|
# ===========================================
|
|
cd $cdir
|
|
echo ""
|
|
echo "============================================"
|
|
echo " 构建完成!"
|
|
echo "============================================"
|
|
echo ""
|
|
echo "后续步骤:"
|
|
echo " 1. 编辑 conf/config.json 填入数据库密码"
|
|
echo " 2. 执行DDL创建CMS业务表:"
|
|
echo " mysql -h HOST -u USER -pPASS sage < entcms/mysql.ddl.sql"
|
|
echo " mysql -h HOST -u USER -pPASS sage < dingdingflow/mysql.ddl.sql"
|
|
echo " 3. 加载RBAC权限:"
|
|
echo " py3/bin/python entcms/scripts/load_path.py"
|
|
echo " py3/bin/python dingdingflow/scripts/load_path.py"
|
|
echo " 4. 初始化超级用户:"
|
|
echo " py3/bin/python scripts/init_superuser.py"
|
|
echo " 5. 启动应用:"
|
|
echo " ./start.sh"
|
|
echo ""
|
|
echo "访问地址: http://localhost:9090/"
|
|
echo "管理后台: http://localhost:9090/admin.ui"
|