网站部署(三):网站维护与自动化部署
统计数据加载中...
前言
网站上线只是第一步,后续的维护和更新才是确保网站长期稳定运行的关键。本文将介绍如何通过自动化脚本实现高效的网站维护,并且以企业级经常使用的前后端分离的网站架构来做说明。
前后端分离架构
我的网站采用前后端分离架构,以同域名不同路径的方式区分:
- 前端:
blog.alcmaple.cn - 后端:
blog.alcmaple.cn/api
这种"同域名路径区分方案"有以下优势:
- 避免跨域问题
- 共享同一SSL证书
- 简化DNS配置
- 使用户感知为同一个网站
值得注意的是,如果你已经为网站设置了SSL证书,进行常规维护不会影响证书的有效性,不需要重新配置证书。
自动化部署脚本
为了提高维护效率,减少手动操作的错误率,我编写了前端和后端的自动部署脚本。这些脚本能够一键完成从本地构建到远程部署的全过程。
前端部署脚本
以下是用于部署前端静态文件的脚本:
#!/bin/bash
# 定义变量
SOURCE_DIR="" # 打包的路径
REMOTE_USER="" # Ubuntu一般是root
REMOTE_HOST="" # 服务器ip地址
REMOTE_DIR="" # 目标目录,会把本地的上传到服务器上这个位置
# 在本地执行
# 生成静态文件
echo "正在生成静态文件..."
npm run docs:build
# 确认部署
echo "即将部署到服务器: $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
read -p "确认部署?(y/n): " confirm
if [ "$confirm" != "y" ]; then
echo "部署已取消"
exit 1
fi
# 使用rsync部署
echo "开始部署..."
rsync -avz $SOURCE_DIR $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
# 检查部署结果
if [ $? -eq 0 ]; then
echo "博客部署完成!"
else
echo "部署失败,请检查错误信息"
fi后端部署脚本
以下是用于部署后端API服务的脚本:
#!/bin/bash
# 定义变量
LOCAL_APP_FILE="app.py" # 本地 app.py 文件路径,根据实际情况修改
REMOTE_USER="root" # 远程服务器用户名
REMOTE_HOST="" # 服务器IP地址
REMOTE_DIR="/root/PlumeMapleBlogAPI/" # 远程后端目录
# 显示部署信息
echo "===== 后端部署脚本 ====="
echo "将部署文件: $LOCAL_APP_FILE"
echo "目标服务器: $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
# 确认部署
read -p "确认部署?(y/n): " confirm
if [ "$confirm" != "y" ]; then
echo "部署已取消"
exit 1
fi
# 检查本地文件是否存在
if [ ! -f "$LOCAL_APP_FILE" ]; then
echo "错误: 本地文件 $LOCAL_APP_FILE 不存在!"
exit 1
fi
# 使用 SCP 上传 app.py 文件
echo "开始上传 app.py 文件..."
scp "$LOCAL_APP_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
# 检查上传结果
if [ $? -eq 0 ]; then
echo "app.py 文件上传成功!"
else
echo "上传失败,请检查错误信息"
exit 1
fi
# 连接到服务器,确保 comments.json 文件存在(如果需要)
echo "检查 comments.json 文件..."
ssh $REMOTE_USER@$REMOTE_HOST "
if [ ! -f \"${REMOTE_DIR}comments.json\" ]; then
echo '创建空的 comments.json 文件...'
echo '[]' > \"${REMOTE_DIR}comments.json\"
chmod 666 \"${REMOTE_DIR}comments.json\"
else
echo 'comments.json 文件已存在'
fi
"
# 重启后端服务
echo "重启后端服务..."
ssh $REMOTE_USER@$REMOTE_HOST "
echo '正在重启 blog_api 服务...'
sudo systemctl restart blog_api
# 检查服务状态
if systemctl is-active --quiet blog_api; then
echo '服务已成功重启'
else
echo '警告: 服务可能未成功重启,请检查状态'
systemctl status blog_api
fi
"
echo "后端部署完成!"部署脚本原理与执行流程
前端部署流程
- 本地构建:执行
npm run docs:build命令生成静态文件 - 确认部署:提示用户确认部署操作
- 文件传输:使用
rsync命令将本地构建文件传输到远程服务器 - 部署验证:检查传输结果,显示部署状态
rsync是一个高效的文件同步工具,比scp更智能,只传输有变化的文件,大幅提升部署效率。
后端部署流程
- 部署准备:显示部署信息并确认
- 文件检查:确认本地文件存在
- 文件上传:使用
scp命令上传应用文件 - 数据文件检查:确保必要的数据文件(如
comments.json)存在 - 服务重启:重启后端服务并验证服务状态
这个脚本特别注意检查comments.json文件的存在性,这是存储博客评论的数据文件。如果不存在,会自动创建一个空的文件并设置适当的权限。
总结
通过自动化脚本实现网站维护,不仅提高了效率,还减少了人为错误。前后端分离的架构结合自动化部署,使网站维护变得更加灵活和可靠。
关键要点:
- 前后端分离架构通过同域名不同路径实现
- 自动化脚本可以大幅简化部署流程
- 前端使用rsync传输静态文件,后端需要重启服务
- 脚本可以根据实际需求进行自定义
希望这篇文章对你的网站维护工作有所帮助!如果你有任何问题或改进建议,欢迎在评论区留言交流。

暂无评论