cms/build.sh
yumoqing f57bb0b0af fix: CMS completeness修复 — products.ui + 钉钉回调同步 + 文档路径
- P0: 新增 products.ui 产品架构页面
- P1: 实现钉钉审批回调→cms_content状态同步(approved→published, rejected→draft)
- P2: 修复 docs/architecture.md 路径(/entcms/* → /*),补充cms_sections表
- P2: 重命名 init_superuser.py → init_superuser_permissions.py 避免与scripts/冲突
- build.sh 更新构建后步骤说明
2026-06-03 16:16:05 +08:00

202 lines
5.7 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 " py3/bin/python init_superuser_permissions.py"
echo " py3/bin/python init_any_permissions.py"
echo " 6. 启动应用:"
echo " ./start.sh"
echo ""
echo "访问地址: http://localhost:9090/"
echo "管理后台: http://localhost:9090/admin.ui"