cms/build.sh
yumoqing 208625415a refactor: 统一wwwroot目录结构
- 将 entcms/wwwroot/* 移到 wwwroot/
- 将 dingdingflow/wwwroot/* 移到 wwwroot/dingdingflow/
- 更新 config.json 使用单一 wwwroot 映射
- 更新 init_any_permissions.py 扫描新路径
- 更新 init_superuser_permissions.py 用法说明
- 废弃 entcms/scripts/load_path.py 和 dingdingflow/scripts/load_path.py
- 更新 build.sh 构建步骤
- 更新 README.md 和 docs/architecture.md 目录说明
2026-06-03 16:34:00 +08:00

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. 初始化权限:"
echo " py3/bin/python init_superuser_permissions.py"
echo " py3/bin/python init_any_permissions.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"