首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PageAdmin CMS实现后台内网和前台外网分离部署的教程

PageAdmin CMS实现后台内网和前台外网分离部署的教程

原创
作者头像
极光科技
发布2026-08-30 00:44:29
发布2026-08-30 00:44:29
960
举报

最近在做一个市级的政务站群项目,甲方要求后台不能暴露在互联网中,前端网页需要生成html并推送到另外一台对外的服务器。

本次项目大致方案如下:

管理系统:PageAdmin CMS平台版

分布式储存:腾讯云COS

服务器两台:麒麟v10两台

数据库:人大金仓

中间件:中创

分部署缓存中间件:甲方没有要求,本次项目直接采用redis。

安装好以上所有产品和中间件后,本次项目重点步骤和注意事项:

一、进入后台开启静态功能和配置分布式储存参数

进入PageAdmin系统站点的后台管理>系统配置>应用设置,如下图

重点设置:

启动站点功能:设置为开启,PageAdmin平台版本默认是支持业务系统和网站统一构建,不开启前台网页会无法打开

站点静态功能:设置为默认开启

静态生成模式:由于前端模版是响应式,这里选择:不区分客户端,如果前端模版分pc和手机端模版,选择第二种模式:PC和手机端分别生成 附件集中储存:选择腾讯云COS,配置好绑定域名,BucketName,AccessKeyId,AccessKeySecret,EndPoint(OSS端点)这些参数,这些参数在腾讯云COS管理界面获取。

二、生成Html页面

进入Html页面刷新菜单,如下图:

这里注意一下:第一次需要全量生成所有页面,以后编辑修改栏目、发布编辑新内容都会自动生成新的html页面。

首页,所有栏目页,所有内容页,所有专题页面全部生成一次,生成结果会通过站内信息异步通知,这里不需要等待,可以去做其他事情即可,异步通知中会有详细的日志,包括生成数量,错误次数,错误地址,错误原因等详细描述,这里比较简答不赘述。

PageAdmin的静态文件默认生成到网站根目录下的html>站点编号>pc目录中,由于是响应式站点,所以静态html都在pc目录中。

重点:PageAdmin修改编辑栏目默认只会更新前10页(可在配置文件中配置数量),如果你的栏目列表超过10页面,需要手工点击更新栏目按钮才能所有所有的分页,这里有个小技巧,可以通过系统自带的页面静态方案来自动生成,静态方案页面可以配置需要定时更新的栏目,定时执行时间,支持选择具体时间和cron表达式两种模式,比如可以每天晚上11点更新所有栏目页面,这里就减少很多运维工作。

三、Html文件跨服务器推送

html文件跨服务器推送有很多方案,由于两台服务器在同一个局域网段,目前局域网主流两种同步方案有:inotify‑wait + rsync和lsyncd,小编这里使用lsyncd方案,这步主要是配置服务器,下面做一些简单的配置介绍,具体不懂的大家可以自行Ai搜索。

 lsyncd方案说明:底层封装 `inotify`,收集文件事件,**合并批量触发 rsync**,避免文件频繁改动时疯狂调用 rsync 进程,性能远高于裸写 inotifywait 脚本。

不废话,直接上安装说明

步骤1、源机器安装 lsyncd rsync

代码语言:javascript
复制
yum install -y lsyncd rsync

步骤2、配置 SSH 免密(必须!否则同步会卡住要密码)

代码语言:javascript
复制
# 生成密钥,一路回车,不要设置密码
ssh-keygen -t ed25519

# 推送公钥到目标机器IP,替换为你的目标IP,这里回要求输入目标机器的密码。
ssh-copy-id root@目标ip

 推送成功后,一定要测试一下是否真的免密了。

代码语言:javascript
复制
ssh root@目标ip

能直接登录成功,说明免密成功,一定要测试,不能成功按下免顺序排查: 2.1. ✔源机器:`ssh-keygen -t ed25519` 生成密钥,**密钥不要设置 passphrase 密码** 2.2. ✔源机器:`ssh-copy-id root@目标ip 推送公钥 2.3. ✔目标机器:`PubkeyAuthentication yes` 开启公钥认证,`sshd -t`校验,reload sshd 2.4 ✔目标机器权限:

代码语言:javascript
复制
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

2.5. ✔目标机器 

代码语言:javascript
复制
SELinux:`restorecon -Rv /root/.ssh`

2.6. ✔源机器手动 ssh 测试免密登录,**必须成功,再启动 lsyncd**

步骤3、两边创建目录

源机器

代码语言:javascript
复制
mkdir -p /data/www_src

目标机器

代码语言:javascript
复制
mkdir -p /data/www_dst

步骤4:编写 lsyncd 配置文件

主配置文件路径:/etc/lsyncd.conf

先备份原始文件

代码语言:javascript
复制
cp /etc/lsyncd.conf /etc/lsyncd.conf.bak

清空,写入下面完整配置:

代码语言:javascript
复制
cat > /etc/lsyncd.conf <<'EOF'
settings {
    logfile      = "/var/log/lsyncd.log",
    statusFile   = "/var/log/lsyncd.status",
    inotifyMode  = "CloseWrite",
    delay        = 1,
    maxProcesses = 4,
}

sync {
    default.rsyncssh,
    source    = "/data/www_src/",
    host      = "目标ip",
    targetdir = "/data/www_dst/",
    rsync = {
        archive  = true,
        delete   = true,
        compress = false,
    }
}
EOF

参数小白解释

  1. source = "/data/www_src/" 末尾斜杠不能丢:同步文件夹里面所有文件,不是同步文件夹本身
  2. inotifyMode = "CloseWrite":文件写完关闭后才同步,防止同步半截写入损坏文件
  3. delay = 1:事件合并延迟 1 秒;大量文件修改不会疯狂启动 rsync 进程
  4. delete = true:源删除文件,目标机器也同步删除。测试阶段建议改为 false,确认业务没问题再打开 true!
  5. host:你的目标服务器 IP
  6. targetdir:目标机器目录

多目录同步:写多个 sync{...} 块即可。

步骤5:调内核 inotify 参数(必做!文件多会报错)

inotify 默认监听文件数量有限,静态站点、大量小文件场景必须调大。

代码语言:javascript
复制
cat >> /etc/sysctl.conf <<'EOF'
fs.inotify.max_user_watches = 1048576
fs.inotify.max_user_instances = 2048
EOF

sysctl -p

查看是否生效

代码语言:javascript
复制
cat /proc/sys/fs/inotify/max_user_watches

步骤六:启动服务

代码语言:javascript
复制
# 设置开机自启并启动
systemctl enable --now lsyncd

# 查看状态
systemctl status lsyncd
  • 绿色 active (running) 代表正常运行。
  • 如果报错,看日志排查。

步骤七:测试同步

在源机器创建测试文件

代码语言:javascript
复制
touch /data/www_src/test01.txt
echo "hello lsyncd" > /data/www_src/test02.txt

去目标机器查看是否自动生成文件

代码语言:javascript
复制
ls /data/www_dst/

删除源文件测试 delete 效果(delete=true 才生效)

代码语言:javascript
复制
rm -f /data/www_src/test01.txt

步骤八:日志查看(排错最重要)

代码语言:javascript
复制
# 实时看运行日志
代码语言:javascript
复制
tail -f /var/log/lsyncd.log
代码语言:javascript
复制
# 看状态文件,当前监听目录
代码语言:javascript
复制
cat /var/log/lsyncd.status

常见报错查看:

代码语言:javascript
复制
journalctl -u lsyncd -f

⚠️小白高频踩坑清单

  1. ❌路径末尾斜杠丢失/data/www_src → 会把 www_src 整个文件夹同步到目标目录下;/data/www_src/ → 同步文件夹内部所有文件,配置必须带末尾 /
  2. ❌ssh 免密失败 lsyncd 不会弹出密码输入框,直接同步失败;先手动 ssh 测试确认免密可用。
  3. ❌delete=true 风险很高 会删除目标机器多余文件,刚部署务必设置 delete=false 测试,业务验证没问题再开启。
  4. ❌大文件写入 大文件拷贝时,lsyncd 检测到 close_write 才同步;如果经常同步半截文件,把 delay 调大到 2~3。
  5. ❌权限问题 源目录、目标目录读写权限;ssh 用户要有目标目录写入权限。
  6. ❌防火墙 源机器能通目标机器 22 端口;防火墙放行 ssh。
  7. ❌双向同步 lsyncd 只适合单向:源→目标;不要两边互相 lsyncd,会造成循环同步灾难。双向同步用分布式存储。

常用操作命令

代码语言:javascript
复制
# 重启lsyncd(修改配置后必须重启)
systemctl restart lsyncd

# 停止服务
systemctl stop lsyncd

# 关闭开机自启
systemctl disable lsyncd

扩展:过滤不需要同步文件示例

如果想忽略日志、临时文件,rsync 增加 exclude 参数:

代码语言:javascript
复制
rsync = {
    archive  = true,
    delete   = true,
    compress = false,
    _extra = {"--exclude","*.log","--exclude","tmp/"}

到这里,PageAdmin CMS后台生成的html文件就可以同步到目标服务器,根据带宽情况,会有1-3秒的延迟,这个过程可以接受,这里比较麻烦的就是文件同步这块,第一次配置的朋友容易踩坑。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、进入后台开启静态功能和配置分布式储存参数
  • 二、生成Html页面
  • 三、Html文件跨服务器推送
    • 步骤1、源机器安装 lsyncd rsync
    • 步骤2、配置 SSH 免密(必须!否则同步会卡住要密码)
    • 步骤3、两边创建目录
    • 步骤5:调内核 inotify 参数(必做!文件多会报错)
    • 步骤六:启动服务
    • 步骤七:测试同步
    • 步骤八:日志查看(排错最重要)
    • ⚠️小白高频踩坑清单
    • 常用操作命令
    • 扩展:过滤不需要同步文件示例
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档