CentOS系统下前后端项目部署攻略

一、系统准备与基础环境搭建

1. 系统更新与依赖安装

bash 复制代码
# 更新系统软件包
sudo yum update -y

# 安装基础开发工具
sudo yum groupinstall "Development Tools" -y

# 安装EPEL仓库(扩展软件包)
sudo yum install epel-release -y

# 安装常用工具
sudo yum install -y wget curl unzip net-tools

2. Java环境配置

bash 复制代码
# 安装JDK 1.8
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y

# 验证安装
java -version
javac -version

3. Docker环境搭建

bash 复制代码
# 安装Docker
sudo yum install docker -y

# 启动Docker服务
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 验证Docker安装
docker --version
docker run hello-world

# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f4)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

二、后端项目部署(Spring Boot)

1. JAR包上传与执行

bash 复制代码
# 创建项目目录
mkdir -p /opt/backend
cd /opt/backend

# 上传JAR包(使用rz命令)
rz -E  # 需要安装lrzsz工具:sudo yum install lrzsz -y

# 查看上传文件
ls -l

# 启动Spring Boot应用
nohup java -jar your-project.jar > backend.log 2>&1 &

# 查看进程
ps -ef | grep java

# 查看日志
tail -f backend.log

nohup:不挂断运行(即使终端关闭也不停止)。
> logs/app.log:标准输出重定向到日志文件。
2>&1:将标准错误输出也重定向到标准输出。
&:后台运行。

2. 使用Systemd管理服务

bash 复制代码
# 创建服务配置文件
sudo vi /etc/systemd/system/backend.service

# 内容如下:
[Unit]
Description=Spring Boot Backend Service
After=syslog.target

[Service]
User=root
ExecStart=/usr/bin/java -jar /opt/backend/your-project.jar
SuccessExitStatus=143
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 重新加载服务配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start backend

# 设置开机自启
sudo systemctl enable backend

# 查看服务状态
sudo systemctl status backend

三、前端项目部署(Vue)

1. Nginx环境配置

bash 复制代码
# 安装Nginx
sudo yum install nginx -y

# 启动Nginx
sudo systemctl start nginx

# 设置开机自启
sudo systemctl enable nginx

# 配置Nginx反向代理
sudo vi /etc/nginx/conf.d/vue.conf

# 示例配置:
server {
    listen 80;
    server_name yourdomain.com;

    location / {
        root /opt/frontend/dist;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 重新加载Nginx配置
sudo nginx -s reload

2. Vue项目部署流程

bash 复制代码
# 创建前端目录
mkdir -p /opt/frontend
cd /opt/frontend

# 上传dist包(假设为vue-project-dist.tar.gz)
rz -E

# 解压dist包
tar -zxvf vue-project-dist.tar.gz -C /opt/frontend/

# 验证解压结果
ls -R /opt/frontend/dist/

四、常用Linux命令汇总

1. 目录操作

bash 复制代码
# 切换目录
cd /path/to/directory

# 返回上一级目录
cd ..

# 返回用户主目录
cd ~

# 显示当前目录路径
pwd

# 创建多级目录
mkdir -p /opt/myproject/{bin,conf,logs}

# 删除空目录
rmdir /path/to/empty_dir

# 递归删除目录
rm -rf /path/to/dir

2. 文件操作

bash 复制代码
# 查看文件内容
cat filename.txt
less filename.txt

# 查找文件内容
grep "search_text" filename.txt

# 查找文件位置
find / -name filename.txt 2>/dev/null

# 复制文件/目录
cp source_file destination_path
cp -r source_dir destination_dir

# 移动/重命名文件
mv old_name new_name
mv file.txt /new/path/

# 创建文件
touch newfile.txt

# 编辑文件
vi filename.txt
nano filename.txt

3. 文件备份策略

bash 复制代码
# 完整备份
rsync -avz --delete /source/ /backup/

# 增量备份
rsync -avz --link-dest=/backup/last/ /source/ /backup/new/

# 分区镜像备份
dd if=/dev/sda of=/backup.img bs=4M

# 使用tar备份
tar -cvpzf backup.tar.gz /path/to/backup/

五、Docker容器管理

1. 容器生命周期管理

bash 复制代码
# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 启动容器
docker start container_name

# 停止容器
docker stop container_name

# 强制停止容器
docker kill container_name

# 删除容器
docker rm container_name

# 进入运行中的容器
docker exec -it container_name /bin/bash

# 查看容器日志
docker logs -f container_name

2. 容器运行模式

bash 复制代码
# 交互式容器
docker run -it --name mycontainer centos /bin/bash

# 守护式容器
docker run -d --name mycontainer nginx

# 指定端口映射
docker run -d -p 8080:80 --name myweb nginx

# 挂载目录
docker run -v /host/path:/container/path -d --name myapp myimage

# 设置自启动
docker run --restart=always -d myimage

3. 镜像管理

bash 复制代码
# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 构建镜像
docker build -t myimage:1.0 .

# 推送镜像到仓库
docker push myregistry/myimage:tag

# 删除镜像
docker rmi image_id

六、防火墙与端口开放

bash 复制代码
# 查看防火墙状态
sudo firewall-cmd --state

# 开放80端口
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

# 开放多个端口
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=3000/tcp

# 查看开放端口
sudo firewall-cmd --list-all

七、常见问题排查

1. 日志查看技巧

bash 复制代码
# 实时查看日志
tail -f /var/log/messages

# 查看特定时间段日志
journalctl --since "2025-07-12 00:00" --until "2025-07-13 12:00"

# 查看Nginx错误日志
tail -n 50 /var/log/nginx/error.log

-n 50 表示从文件末尾开始算起的前 50 行。

-f 则是实时跟踪文件更新。

2. 网络诊断命令

bash 复制代码
# 查看端口监听情况
netstat -tuln

# 测试端口连通性
telnet example.com 80

# 查看路由表
route -n

# 网络抓包分析
tcpdump -i eth0 port 80 -w capture.pcap

3. 系统资源监控

bash 复制代码
# 查看实时系统负载
top

# 查看内存使用情况
free -h

# 查看磁盘空间
df -h

# 查看目录大小
du -sh /path/to/dir

八、自动化部署建议

1. 使用Shell脚本

bash 复制代码
#!/bin/bash
# 自动部署脚本示例
APP_NAME="myapp"
JAR_FILE="/opt/backend/${APP_NAME}.jar"
LOG_FILE="/var/log/${APP_NAME}_deploy.log"

echo "=== 开始部署 ===" >> ${LOG_FILE}
date +"%Y-%m-%d %H:%M:%S" >> ${LOG_FILE}

# 停止旧服务
if [ -f /var/run/${APP_NAME}.pid ]; then
    kill -9 $(cat /var/run/${APP_NAME}.pid)
fi

# 启动新服务
nohup java -jar ${JAR_FILE} >> ${LOG_FILE} 2>&1 &
echo $! > /var/run/${APP_NAME}.pid

echo "=== 部署完成 ===" >> ${LOG_FILE}

2. CI/CD集成建议

  • 使用Jenkins/GitLab CI实现自动构建
  • 配置Webhook触发部署流程
  • 使用Ansible进行批量服务器部署

九、安全加固建议

  1. 限制SSH访问

    bash 复制代码
    sudo vi /etc/ssh/sshd_config
    # 修改以下配置:
    PermitRootLogin no
    PasswordAuthentication no
    AllowUsers your_username

    重启SSH服务:

    bash 复制代码
    sudo systemctl restart sshd
  2. 定期更新系统

    bash 复制代码
    # 定时任务示例(每周日凌晨更新)
    sudo crontab -l | { cat; echo "0 0 * * 0 sudo yum update -y"; } | sudo crontab -
  3. 设置文件权限

    bash 复制代码
    # 设置敏感目录权限
    chmod 700 /opt/backend
    chown -R root:root /opt/backend

第十部分:常见错误与解决方案


一、Yum 源失效或元数据过期问题

1. 问题现象

bash 复制代码
yum install lrzsz -y
警告:加载 '/etc/yum.repos.d/CentOS-AppStream.repo' 失败,跳过。
警告:加载 '/etc/yum.repos.d/CentOS-Vault.repo' 失败,跳过。
上次元数据过期检查:1:14:39 前,执行于 2025年07月13日 星期日 16时31分35秒。

2. 原因分析

  • CentOS 8 官方源已失效(官方已停止维护 CentOS 8)
  • 本地 yum 缓存未更新
  • 网络连接异常(无法访问默认镜像源)

3. 解决方案

步骤 1:备份并替换为阿里云 Vault 源
bash 复制代码
# 备份原目录
mv /etc/yum.repos.d /etc/yum.repos.d.bak
mkdir /etc/yum.repos.d

# 下载阿里云 Vault 源(以 CentOS 8.5.2111 为例)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

⚠️ 注意:

替换 8.5.2111 为您的实际系统版本号(通过 cat /etc/redhat-release 查看)

步骤 2:清理缓存并重建元数据
bash 复制代码
yum clean all
rm -rf /var/cache/yum
yum makecache fast
步骤 3:重新安装软件包
bash 复制代码
yum install lrzsz -y

二、Java 环境配置问题

1. 问题现象

bash 复制代码
java -version
-bash: java: command not found

2. 原因分析

  • 未正确安装 JDK
  • 环境变量未配置

3. 解决方案

步骤 1:安装 OpenJDK
bash 复制代码
yum install java-1.8.0-openjdk -y
步骤 2:配置环境变量
bash 复制代码
# 查找 Java 路径
alternatives --config java

# 手动添加到 PATH(以实际路径为准)
echo 'export PATH=$PATH:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-1.el8_6.x86_64/jre/bin' >> ~/.bashrc
source ~/.bashrc

三、Docker 容器启动失败

1. 问题现象

bash 复制代码
docker start mycontainer
Error response from daemon: Cannot start container mycontainer: [8] System error: permission denied

2. 原因分析

  • Docker 服务未运行
  • 权限不足(非 root 用户)
  • 端口冲突

3. 解决方案

步骤 1:启动 Docker 服务
bash 复制代码
systemctl start docker
步骤 2:添加用户到 docker 组
bash 复制代码
usermod -aG docker $USER
newgrp docker
步骤 3:检查端口占用
bash 复制代码
lsof -i :8080  # 替换为目标端口
kill -9 <PID>

四、Nginx 配置错误导致 502 Bad Gateway

1. 问题现象

访问前端页面返回 502 Bad Gateway

2. 原因分析

  • Nginx 配置的后端地址错误
  • 后端服务未启动
  • 权限问题(Nginx 无法读取 dist 文件)

3. 解决方案

步骤 1:检查 Nginx 配置
bash 复制代码
nginx -t  # 验证配置文件语法
步骤 2:检查后端服务状态
bash 复制代码
systemctl status backend  # 替换为后端服务名称
步骤 3:调整文件权限
bash 复制代码
chown -R nginx:nginx /opt/frontend/dist
chmod -R 755 /opt/frontend/dist

五、文件上传/解压失败

1. 问题现象

bash 复制代码
rz -E
rz: can't open /tmp/rzXXX: Permission denied

2. 原因分析

  • /tmp 目录权限不足
  • rz 工具未安装

3. 解决方案

步骤 1:安装 lrzsz
bash 复制代码
yum install lrzsz -y
步骤 2:手动上传文件
bash 复制代码
# 使用 SCP/SFTP 工具上传文件到目标目录
scp local_file user@server:/opt/backend/
步骤 3:解压失败处理
bash 复制代码
# 检查压缩包完整性
file your-file.tar.gz
tar -tvf your-file.tar.gz  # 查看内容

# 强制解压
tar -xvf your-file.tar.gz --strip-components=1 -C /opt/frontend/dist

六、防火墙阻止服务访问

1. 问题现象

无法通过浏览器访问服务(如 80 端口)

2. 原因分析

  • 防火墙未开放对应端口

3. 解决方案

bash 复制代码
# 开放端口(如 80 和 8080)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

# 临时关闭防火墙(不推荐)
systemctl stop firewalld

七、其他常见错误汇总

错误类型 原因 解决方案
No such file or directory 文件路径错误或权限不足 使用 ls -l 验证路径,chmod 修改权限
Permission denied 权限不足(需 root 权限) 使用 sudo 或切换到 root 用户
Address already in use 端口被占用 使用 lsof -i :<port> 查找并终止占用进程
No route to host 网络不通或防火墙限制 检查 iptables/firewalld 配置,确保服务器可访问
OutOfMemoryError 内存不足导致 Java 程序崩溃 调整 JVM 参数(如 -Xmx512m),优化代码减少内存占用
相关推荐
A小辣椒6 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒9 小时前
TShark:基础知识
linux
AlfredZhao11 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式