欢迎光临
我们一直在努力

Linux 环境完整安装部署实施手册(适配上一篇的前后端项目)

适用:CentOS7 / CentOS Stream / Ubuntu 20.04+,生产环境推荐 CentOS Stream9;全程贴合前面的开发 & 发版规范;生产禁止 root 直接操作,做好权限、防火墙、备份。 目标机器:Linux 服务器,开放 80 端口(Nginx),3306/6379不对外暴露,仅容器内网访问。

一、服务器初始化(首次装机必做)

1.1 创建普通运维账号(禁止长期 root 登录)

# 创建账号
useradd ops
# 设置密码
passwd ops
# 赋予sudo权限
usermod -aG wheel ops

后续所有操作使用 ops 用户登录,需要权限时加 sudo。

1.2 系统基础包安装

# CentOS Stream / CentOS7
sudo dnf update -y
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 git wget curl vim

# Ubuntu
sudo apt update -y
sudo apt install -y git wget curl vim

1.3 关闭 SELinux(生产可按需加固,测试直接关闭)

# 临时关闭
sudo setenforce 0
# 永久关闭
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

1.4 防火墙配置(重点!只开放 80 端口)

# 启动防火墙
sudo systemctl start firewalld
sudo systemctl enable firewalld
# 放行80端口
sudo firewall-cmd –permanent –add-service=http
# reload生效
sudo firewall-cmd –reload
# 查看放行端口
sudo firewall-cmd –list-all

❗ 3306、6379 端口不要对外放行,Docker 内部网络互通即可。

二、安装 Docker & Docker Compose v2

2.1 安装 Docker(CentOS)

sudo dnf config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io

Ubuntu 安装命令:

sudo apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io -y

2.2 启动 Docker,设置开机自启

sudo systemctl start docker
sudo systemctl enable docker
# 将ops用户加入docker组,免sudo执行docker命令
sudo usermod -aG docker ops

⚠️ 重新登录服务器,用户组生效。验证:

docker info

2.3 确认 Docker Compose(新版 docker 自带 compose 插件)

docker compose version
# 能输出版本号即成功;如果提示找不到,单独安装插件

三、拉取项目代码(Git,匹配版本管理规范)

按照前面 GitFlow 规范,生产部署代码基于 main 分支打 Tag。

# 切换到/home/ops工作目录
cd /home/ops
# 拉取代码仓库
git clone git@xxx.git demo-project
cd demo-project

# 切换到生产main分支,拉取最新代码
git checkout main
git pull
# (生产规范)切换到对应版本Tag
git checkout V1.0.0

目录结构:

demo-project/
├── backend-java/
├── frontend-vue/
├── init-sql/
│ └── init.sql
├── docker-compose.yml
└── .env # 环境变量文件,**不提交到git仓库!**

3.1 创建.env 环境变量文件(服务器本地创建)

vim .env

写入内容(生产改成强密码)

DB_ROOT_PWD=MyDbPass123!
REDIS_PWD=MyRedisPass456!

保存退出 :wq

权限加固:防止其他用户读取密码文件

chmod 600 .env

四、部署前检查清单(上线前核对,对应发版规范)

  • 代码已经合并到 main 分支,已经打 Tag
  • .env 文件不在 git 仓库内,密码复杂度达标
  • application-prod.yml 所有敏感配置使用环境变量注入,无硬编码密码
  • 生产配置关闭 SQL 打印、关闭 swagger
  • 防火墙仅开放 80 端口
  • 服务器磁盘空间充足,备份目录规划好
  • 五、构建镜像 + 启动整套服务

    # 在docker-compose.yml所在目录执行
    docker compose up -d –build

    执行过程:

  • 构建后端 Java 镜像(Maven 打包 jar,构建容器)
  • 构建前端 Vue 镜像(node 编译 dist,打包进 nginx)
  • 拉取 mysql8、redis6 镜像
  • 自动创建容器、启动,后台运行 -d
  • 查看容器状态

    docker compose ps

    预期:4 个容器状态都是 Up。

    查看日志(排查启动失败)

    # 查看后端日志
    docker compose logs -f backend-java
    # 查看前端nginx日志
    docker compose logs -f frontend-nginx
    # 查看mysql日志
    docker compose logs -f mysql

    六、数据库初始化

    mysql 容器第一次启动会自动执行 init-sql/init.sql,创建库和表。 如果需要手动执行 SQL:

    # 进入mysql容器
    docker exec -it demo-mysql mysql -uroot -p
    # 输入.env里面DB_ROOT_PWD密码,验证库表是否存在
    USE demo_db;
    SHOW TABLES;

    七、访问验证(上线冒烟测试,发版必做)

    浏览器访问服务器 IP,打开前端页面; 测试接口:登录、查询等核心业务链路。

    Nginx 转发逻辑:

    • / → 前端静态资源
    • /api/** → 反向代理转发到后端 Java 服务

    八、日常运维操作(对应运维规范)

    8.1 重启服务(发版更新)

    # 代码更新后,重新构建并启动
    docker compose up -d –build

    8.2 停止服务

    docker compose down
    # 如需保留数据卷,不要加 -v;加-v会删除mysql、redis数据!!

    8.3 查看服务资源占用

    docker stats

    8.4 数据库备份(生产定时任务,crontab)

    创建备份脚本 /home/ops/backup_mysql.sh

    #!/bin/bash
    DATE=$(date +%Y%m%d_%H%M%S)
    BACKUP_DIR="/home/ops/db_backup"
    mkdir -p $BACKUP_DIR
    docker exec demo-mysql mysqldump -uroot -pMyDbPass123! demo_db > $BACKUP_DIR/demo_db_$DATE.sql
    # 保留最近30天备份
    find $BACKUP_DIR -name "demo_db_*.sql" -mtime +30 -delete

    赋予执行权限:

    chmod +x /home/ops/backup_mysql.sh

    配置定时任务每日凌晨 2 点自动备份

    crontab -e
    # 添加一行
    0 2 * * * /home/ops/backup_mysql.sh >> /home/ops/backup.log 2>&1

    九、版本回滚操作(故障应急流程)

    当新版本上线出现严重 bug,执行回滚:

  • 停止当前服务:docker compose down
  • 切回上一个稳定 Tag 版本:git checkout V0.9.0
  • 重新构建启动:docker compose up -d –build
  • 业务验证,记录故障台账
  • 如果数据库有变更:优先恢复备份 sql,注意数据库版本变更的兼容性!

    十、生产环境安全加固(可选,建议落地)

  • SSH 密钥登录,关闭密码登录,修改 ssh 默认 22 端口
  • 服务器禁止 root 远程 ssh 登录
  • 定期更新系统补丁 sudo dnf update
  • 容器不要使用 root 用户运行(可修改 Dockerfile 指定普通用户)
  • Nginx 配置 HTTPS 证书,启用 SSL
  • 十一、常见问题排查

  • 后端启动失败:优先看 docker compose logs backend-java,大概率数据库连接失败、密码错误、端口冲突
  • 前端页面空白:查看 nginx 日志,检查 vue 路由 history 配置
  • 前端页面能打开,接口 404:Nginx /api 代理配置写错
  • 数据库连接失败:确认容器名,docker 内部访问 mysql 用容器名 mysql:3306,不是宿主机 IP
  • 十二、交付物 & 台账(满足前面发版规范)

    每次上线,留存:

    • Git Tag 版本号
    • 发版申请表
    • 上线冒烟测试记录
    • 数据库备份文件(发版前自动备份)
    • 运维变更记录

     

    一键部署脚本说明

    脚本名称:install_demo.sh 适配:CentOS Stream9 / CentOS7,Ubuntu 需少量调整; 功能:系统初始化、安装 docker、配置防火墙、创建账号、拉取代码、初始化环境、启动整套 docker‑compose 服务。

    注意:

  • 需要以 root 执行;
  • git 仓库地址需要你替换成自己真实仓库;
  • .env密码在脚本内可修改,部署后权限设置 600;
  • MySQL/Redis 端口不对外暴露,只容器内部访问;
  • 内置 mysql 定时备份任务。
  • #!/bin/bash
    # Java+Vue前后端项目一键部署脚本 install_demo.sh
    # 支持CentOS Stream9 / CentOS7
    # 执行方式: chmod +x install_demo.sh && sudo ./install_demo.sh

    set -e

    ######################## 【请修改这里配置项】########################
    GIT_REPO_URL="git@xxx.git:group/demo-project.git" # 修改为你的git仓库
    PROJECT_NAME="demo-project"
    WORK_HOME="/home/ops"
    PROJECT_DIR="${WORK_HOME}/${PROJECT_NAME}"
    # 生产环境密码,部署后不要硬编码修改脚本,优先服务器.env维护
    DB_ROOT_PWD="DbPass@2026"
    REDIS_PWD="Redis@2026"
    GIT_TAG="V1.0.0" # 部署使用的tag版本
    ###################################################################

    echo "==================== 开始系统初始化 ===================="

    # 1、创建ops运维账号
    if ! id -u ops >/dev/null 2>&1;then
    useradd ops
    echo "ops:Ops@2026" | chpasswd
    usermod -aG wheel ops
    echo "创建ops账号完成"
    fi

    # 2、安装基础依赖包
    dnf update -y
    dnf install -y yum-utils device-mapper-persistent-data lvm2 git wget curl vim firewalld

    # 3、SELinux关闭
    setenforce 0 || true
    sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

    #4、防火墙配置,只开放http 80端口
    systemctl start firewalld
    systemctl enable firewalld
    firewall-cmd –permanent –add-service=http
    firewall-cmd –reload

    echo "==================== 安装Docker ===================="
    # docker源
    dnf config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
    dnf install -y docker-ce docker-ce-cli containerd.io

    systemctl start docker
    systemctl enable docker
    usermod -aG docker ops

    echo "Docker安装完成:"
    docker –version
    docker compose version

    echo "==================== 拉取项目代码 ===================="
    mkdir -p ${WORK_HOME}
    cd ${WORK_HOME}

    if [ ! -d "${PROJECT_DIR}" ];then
    git clone ${GIT_REPO_URL} ${PROJECT_NAME}
    fi

    cd ${PROJECT_DIR}
    git checkout main
    git pull
    git checkout ${GIT_TAG}

    # 创建.env环境变量文件
    cat > ${PROJECT_DIR}/.env << EOF
    DB_ROOT_PWD=${DB_ROOT_PWD}
    REDIS_PWD=${REDIS_PWD}
    EOF

    chmod 600 ${PROJECT_DIR}/.env
    chown -R ops:ops ${PROJECT_DIR}

    echo "==================== 创建Mysql定时备份脚本 ===================="
    BACKUP_SCRIPT="/home/ops/backup_mysql.sh"
    cat > ${BACKUP_SCRIPT} <<'EOF'
    #!/bin/bash
    DATE=$(date +%Y%m%d_%H%M%S)
    BACKUP_DIR="/home/ops/db_backup"
    mkdir -p $BACKUP_DIR
    docker exec demo-mysql mysqldump -uroot -p${DB_ROOT_PWD} demo_db > $BACKUP_DIR/demo_db_$DATE.sql
    find $BACKUP_DIR -name "demo_db_*.sql" -mtime +30 -delete
    EOF

    # 替换脚本内密码变量
    sed -i "s|\\${DB_ROOT_PWD}|${DB_ROOT_PWD}|g" ${BACKUP_SCRIPT}
    chmod +x ${BACKUP_SCRIPT}
    chown ops:ops ${BACKUP_SCRIPT}

    # 设置crontab定时任务,每日凌晨2点备份
    crontab -l > mycron || true
    echo "0 2 * * * /home/ops/backup_mysql.sh >> /home/ops/backup.log 2>&1" >> mycron
    crontab mycron
    rm -f mycron

    echo "==================== 构建并启动容器服务 ===================="
    cd ${PROJECT_DIR}
    # 停止旧实例,不删除数据卷
    docker compose down

    # 构建+后台启动
    docker compose up -d –build

    sleep 10
    echo "==================== 容器状态检查 ===================="
    docker compose ps

    echo ""
    echo "==================== 部署完成 ===================="
    echo "项目目录: ${PROJECT_DIR}"
    echo "备份脚本: ${BACKUP_SCRIPT}"
    echo "访问地址: http://服务器IP"
    echo "查看后端日志命令: cd ${PROJECT_DIR} && docker compose logs -f backend-java"
    echo "回滚方式:切换git tag后执行 docker compose up -d –build"
    echo "注意:数据库端口3306、redis6379不对外暴露!"

    使用步骤

  • 将脚本保存为 install_demo.sh
  • 修改脚本顶部配置:GIT_REPO_URL、GIT_TAG、密码
  • 上传到 CentOS 服务器
  • root 执行:
  • chmod +x install_demo.sh
    sudo ./install_demo.sh

    更新版本脚本 upgrade.sh(用于后续迭代上线,贴合发版流程)

    #!/bin/bash
    # upgrade.sh 版本升级脚本
    set -e
    PROJECT_DIR="/home/ops/demo-project"
    NEW_TAG=$1

    if [ -z "${NEW_TAG}" ];then
    echo "用法: ./upgrade.sh V1.0.1"
    exit 1
    fi

    cd ${PROJECT_DIR}
    echo "拉取最新代码,切换tag: ${NEW_TAG}"
    git fetch –tags
    git checkout ${NEW_TAG}

    # 发版前数据库备份
    /home/ops/backup_mysql.sh

    # 重建启动
    docker compose down
    docker compose up -d –build

    sleep 8
    docker compose ps
    echo "升级完成,检查日志 docker compose logs -f backend-java"

    使用示例:

    chmod +x upgrade.sh
    ./upgrade.sh V1.0.1

    回滚脚本 rollback.sh

    #!/bin/bash
    set -e
    PROJECT_DIR="/home/ops/demo-project"
    ROLLBACK_TAG=$1

    if [ -z "${ROLLBACK_TAG}" ];then
    echo "用法 ./rollback.sh V1.0.0"
    exit 1
    fi

    cd ${PROJECT_DIR}
    git checkout ${ROLLBACK_TAG}

    docker compose down
    docker compose up -d –build

    sleep 8
    docker compose ps
    echo "⚠️如果存在DDL变更,需要手动恢复数据库备份!"

    重要注意事项(生产)

  • git 仓库如果是 ssh 方式,服务器需要配置 ssh 密钥,否则 git clone 失败;没有私有 git,可改用 http 地址
  • `.env 文件禁止提交 git,脚本在服务器本地生成,权限 600 保护密码 **
  • 首次部署 mysql 会自动执行init‑sql/init.sql初始化库表
  • 如果升级涉及数据库 DDL 变更,升级前自动备份,回滚时需要手动恢复 sql 文件
  • 脚本适用于全新机器;如果服务器已经安装 docker,直接运行也兼容。
  • 赞(0)
    未经允许不得转载:171主机测评 » Linux 环境完整安装部署实施手册(适配上一篇的前后端项目)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址