Skip to content

网站部署(三):网站维护与自动化部署

约 1278 字大约 4 分钟

工具Web

2025-04-24

统计数据加载中...

前言

网站上线只是第一步,后续的维护和更新才是确保网站长期稳定运行的关键。本文将介绍如何通过自动化脚本实现高效的网站维护,并且以企业级经常使用的前后端分离的网站架构来做说明。

前后端分离架构

我的网站采用前后端分离架构,以同域名不同路径的方式区分:

  • 前端:blog.alcmaple.cn
  • 后端:blog.alcmaple.cn/api

这种"同域名路径区分方案"有以下优势:

  1. 避免跨域问题
  2. 共享同一SSL证书
  3. 简化DNS配置
  4. 使用户感知为同一个网站

值得注意的是,如果你已经为网站设置了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 "后端部署完成!"

部署脚本原理与执行流程

前端部署流程

  1. 本地构建:执行npm run docs:build命令生成静态文件
  2. 确认部署:提示用户确认部署操作
  3. 文件传输:使用rsync命令将本地构建文件传输到远程服务器
  4. 部署验证:检查传输结果,显示部署状态

rsync是一个高效的文件同步工具,比scp更智能,只传输有变化的文件,大幅提升部署效率。

后端部署流程

  1. 部署准备:显示部署信息并确认
  2. 文件检查:确认本地文件存在
  3. 文件上传:使用scp命令上传应用文件
  4. 数据文件检查:确保必要的数据文件(如comments.json)存在
  5. 服务重启:重启后端服务并验证服务状态

这个脚本特别注意检查comments.json文件的存在性,这是存储博客评论的数据文件。如果不存在,会自动创建一个空的文件并设置适当的权限。

总结

通过自动化脚本实现网站维护,不仅提高了效率,还减少了人为错误。前后端分离的架构结合自动化部署,使网站维护变得更加灵活和可靠。

关键要点:

  1. 前后端分离架构通过同域名不同路径实现
  2. 自动化脚本可以大幅简化部署流程
  3. 前端使用rsync传输静态文件,后端需要重启服务
  4. 脚本可以根据实际需求进行自定义

希望这篇文章对你的网站维护工作有所帮助!如果你有任何问题或改进建议,欢迎在评论区留言交流。

暂无评论

暂无评论,来添加第一条评论吧!