一、系统准备与基础环境搭建
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进行批量服务器部署
九、安全加固建议
-
限制SSH访问
bashsudo vi /etc/ssh/sshd_config # 修改以下配置: PermitRootLogin no PasswordAuthentication no AllowUsers your_username
重启SSH服务:
bashsudo systemctl restart sshd
-
定期更新系统
bash# 定时任务示例(每周日凌晨更新) sudo crontab -l | { cat; echo "0 0 * * 0 sudo yum update -y"; } | sudo crontab -
-
设置文件权限
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 ),优化代码减少内存占用 |