
最近在做一个市级的政务站群项目,甲方要求后台不能暴露在互联网中,前端网页需要生成html并推送到另外一台对外的服务器。
本次项目大致方案如下:
管理系统:PageAdmin CMS平台版
分布式储存:腾讯云COS
服务器两台:麒麟v10两台
数据库:人大金仓
中间件:中创
分部署缓存中间件:甲方没有要求,本次项目直接采用redis。
安装好以上所有产品和中间件后,本次项目重点步骤和注意事项:
进入PageAdmin系统站点的后台管理>系统配置>应用设置,如下图

重点设置:
启动站点功能:设置为开启,PageAdmin平台版本默认是支持业务系统和网站统一构建,不开启前台网页会无法打开
站点静态功能:设置为默认开启
静态生成模式:由于前端模版是响应式,这里选择:不区分客户端,如果前端模版分pc和手机端模版,选择第二种模式:PC和手机端分别生成 附件集中储存:选择腾讯云COS,配置好绑定域名,BucketName,AccessKeyId,AccessKeySecret,EndPoint(OSS端点)这些参数,这些参数在腾讯云COS管理界面获取。
进入Html页面刷新菜单,如下图:

这里注意一下:第一次需要全量生成所有页面,以后编辑修改栏目、发布编辑新内容都会自动生成新的html页面。
首页,所有栏目页,所有内容页,所有专题页面全部生成一次,生成结果会通过站内信息异步通知,这里不需要等待,可以去做其他事情即可,异步通知中会有详细的日志,包括生成数量,错误次数,错误地址,错误原因等详细描述,这里比较简答不赘述。
PageAdmin的静态文件默认生成到网站根目录下的html>站点编号>pc目录中,由于是响应式站点,所以静态html都在pc目录中。
重点:PageAdmin修改编辑栏目默认只会更新前10页(可在配置文件中配置数量),如果你的栏目列表超过10页面,需要手工点击更新栏目按钮才能所有所有的分页,这里有个小技巧,可以通过系统自带的页面静态方案来自动生成,静态方案页面可以配置需要定时更新的栏目,定时执行时间,支持选择具体时间和cron表达式两种模式,比如可以每天晚上11点更新所有栏目页面,这里就减少很多运维工作。
html文件跨服务器推送有很多方案,由于两台服务器在同一个局域网段,目前局域网主流两种同步方案有:inotify‑wait + rsync和lsyncd,小编这里使用lsyncd方案,这步主要是配置服务器,下面做一些简单的配置介绍,具体不懂的大家可以自行Ai搜索。
lsyncd方案说明:底层封装 `inotify`,收集文件事件,**合并批量触发 rsync**,避免文件频繁改动时疯狂调用 rsync 进程,性能远高于裸写 inotifywait 脚本。
不废话,直接上安装说明
yum install -y lsyncd rsync# 生成密钥,一路回车,不要设置密码
ssh-keygen -t ed25519
# 推送公钥到目标机器IP,替换为你的目标IP,这里回要求输入目标机器的密码。
ssh-copy-id root@目标ip推送成功后,一定要测试一下是否真的免密了。
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 ✔目标机器权限:
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys2.5. ✔目标机器
SELinux:`restorecon -Rv /root/.ssh`2.6. ✔源机器手动 ssh 测试免密登录,**必须成功,再启动 lsyncd**
源机器
mkdir -p /data/www_src目标机器
mkdir -p /data/www_dst步骤4:编写 lsyncd 配置文件
主配置文件路径:/etc/lsyncd.conf
先备份原始文件
cp /etc/lsyncd.conf /etc/lsyncd.conf.bak清空,写入下面完整配置:
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参数小白解释
source = "/data/www_src/" 末尾斜杠不能丢:同步文件夹里面所有文件,不是同步文件夹本身inotifyMode = "CloseWrite":文件写完关闭后才同步,防止同步半截写入损坏文件delay = 1:事件合并延迟 1 秒;大量文件修改不会疯狂启动 rsync 进程delete = true:源删除文件,目标机器也同步删除。测试阶段建议改为 false,确认业务没问题再打开 true!host:你的目标服务器 IPtargetdir:目标机器目录多目录同步:写多个
sync{...}块即可。
inotify 默认监听文件数量有限,静态站点、大量小文件场景必须调大。
cat >> /etc/sysctl.conf <<'EOF'
fs.inotify.max_user_watches = 1048576
fs.inotify.max_user_instances = 2048
EOF
sysctl -p查看是否生效
cat /proc/sys/fs/inotify/max_user_watches# 设置开机自启并启动
systemctl enable --now lsyncd
# 查看状态
systemctl status lsyncd在源机器创建测试文件
touch /data/www_src/test01.txt
echo "hello lsyncd" > /data/www_src/test02.txt去目标机器查看是否自动生成文件
ls /data/www_dst/删除源文件测试 delete 效果(delete=true 才生效)
rm -f /data/www_src/test01.txt# 实时看运行日志tail -f /var/log/lsyncd.log# 看状态文件,当前监听目录cat /var/log/lsyncd.status常见报错查看:
journalctl -u lsyncd -f/data/www_src → 会把 www_src 整个文件夹同步到目标目录下;/data/www_src/ → 同步文件夹内部所有文件,配置必须带末尾 /。# 重启lsyncd(修改配置后必须重启)
systemctl restart lsyncd
# 停止服务
systemctl stop lsyncd
# 关闭开机自启
systemctl disable lsyncd如果想忽略日志、临时文件,rsync 增加 exclude 参数:
rsync = {
archive = true,
delete = true,
compress = false,
_extra = {"--exclude","*.log","--exclude","tmp/"}到这里,PageAdmin CMS后台生成的html文件就可以同步到目标服务器,根据带宽情况,会有1-3秒的延迟,这个过程可以接受,这里比较麻烦的就是文件同步这块,第一次配置的朋友容易踩坑。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。