#!/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 <