#!/usr/bin/env bash # Portal Web应用 — 构建脚本 # Portal是CMS业务的独立Web应用壳,通过pip install加载cms模块 # 用法: cd ~/repos/portal && ./build.sh set -e cdir=$(pwd) uname=$(id -un) gname=$(id -gn) echo "============================================" echo " Portal 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 + checklang # =========================================== 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业务模块 (editable mode) # =========================================== echo "" echo "--- Step 4: 安装CMS业务模块 ---" CMS_DIR=~/repos/cms echo " install cms (editable)..." $cdir/py3/bin/pip install -e $CMS_DIR 2>/dev/null || echo " WARN: cms install failed" # =========================================== # Step 5: 数据库DDL (从cms模块的models目录) # =========================================== echo "" echo "--- Step 5: 生成数据库DDL ---" if [ -d "$CMS_DIR/models" ]; then cd $CMS_DIR/models echo " 生成 CMS DDL..." $cdir/py3/bin/json2ddl mysql . > $cdir/cms.ddl.sql 2>/dev/null || echo " WARN: json2ddl failed" echo " DDL已生成: cms.ddl.sql" fi # =========================================== # Step 6: CRUD UI生成 (从cms模块的json目录) # =========================================== echo "" echo "--- Step 6: 生成CRUD UI ---" if [ -d "$CMS_DIR/json" ]; then cd $CMS_DIR/json echo " 生成 CMS CRUD UI..." for f in *.json; do [ -f "$f" ] || continue echo " $f" $cdir/py3/bin/xls2ui -m ../models -o $CMS_DIR/wwwroot cms $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/portal.service <