- 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 更新构建后步骤说明
202 lines
5.7 KiB
Bash
Executable File
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"
|