前言
前面几个系列我们主要围绕 Java 后端开发展开,比如 Spring Boot、MyBatis、数据库、Redis、登录认证、缓存、文件上传、参数校验等内容。
这些内容解决的是“项目怎么写”的问题。
但是一个完整项目,不能只停留在本地运行。真正做项目时,还要考虑一个很重要的问题:项目怎么部署到服务器上。
所以从这一篇开始,我们进入新的系列:Linux + Docker 项目部署上线系列。
这个系列会从服务器基础命令开始,逐步讲到 Spring Boot 打包、Linux 运行 jar 包、Docker 部署 MySQL 和 Redis、Docker Compose 编排服务、Nginx 反向代理、前后端分离部署以及常见问题排查。
这一篇先打基础,主要学习:
一、为什么部署项目要学 Linux
我们平时开发 Spring Boot 项目,大多数是在 Windows 或 macOS 上运行。
比如本地启动项目:
mvn spring-boot:run
或者在 IDEA 中直接点击启动按钮。
但是项目真正上线时,通常会部署到 Linux 服务器上。常见原因有:
也就是说,Linux 不一定要一开始就学得很深,但至少要掌握部署项目常用命令。
二、连接 Linux 服务器
如果购买了云服务器,一般会拿到服务器公网 IP、用户名和密码。
常见登录方式是 SSH。
ssh root@服务器IP
例如:
ssh root@192.168.1.100
如果是第一次连接,终端可能会提示是否继续连接,输入:
yes
然后输入服务器密码即可。
文字说明
这里的 root 是服务器用户名。
实际开发中,不建议长期使用 root 用户直接部署项目,更推荐创建普通用户,再按需授权。
不过学习阶段可以先使用 root,重点是把部署流程跑通。
三、Linux 常用目录说明
登录服务器后,可以先查看当前目录:
pwd
查看根目录下有哪些文件夹:
ls /
Linux 常见目录大概如下:
/
├── bin
├── boot
├── dev
├── etc
├── home
├── opt
├── root
├── usr
├── var
└── tmp
常用目录说明:
| /root | root 用户的家目录 |
| /home | 普通用户的家目录 |
| /etc | 系统配置文件目录 |
| /usr | 系统软件安装目录 |
| /opt | 常用于安装第三方软件 |
| /var/log | 系统日志目录 |
| /tmp | 临时文件目录 |
文字说明
部署 Java 项目时,我比较推荐把项目放在:
/opt
比如:
/opt/project
/opt/project/backend
/opt/project/logs
这样结构比较清楚,也方便后期维护。
四、创建项目部署目录
我们先创建一个后面部署项目要用的目录。
mkdir -p /opt/project/backend
进入目录:
cd /opt/project/backend
查看当前目录:
pwd
查看目录内容:
ls
文字说明
mkdir 用来创建目录。
其中:
-p
表示如果上级目录不存在,就一起创建。
比如 /opt/project 不存在时,执行:
mkdir -p /opt/project/backend
会自动创建完整目录。
五、文件和目录常用命令
1. 查看文件列表
ls
显示详细信息:
ls -l
显示隐藏文件:
ls -a
常用组合:
ls -la
2. 进入目录
cd /opt/project/backend
返回上一级:
cd ..
返回用户家目录:
cd ~
3. 查看当前路径
pwd
这个命令很常用,尤其是在服务器上操作时,先确认自己在哪个目录,能减少误操作。
4. 创建文件
touch app.log
5. 创建目录
mkdir logs
递归创建目录:
mkdir -p /opt/project/backend/logs
6. 删除文件或目录
删除文件:
rm app.log
删除目录:
rm -r logs
强制删除:
rm -rf logs
文字说明
rm -rf 要非常谨慎。
尤其不要在根目录 / 或不确定路径下乱用删除命令。
部署项目时,删除前可以先执行:
pwd
ls
确认当前路径和文件内容。
六、上传项目文件到服务器
后面我们会把 Spring Boot 项目打包成 jar 包,再上传到服务器。
常见方式有两种。
1. 使用 scp 上传
在本地电脑执行:
scp target/project.jar root@服务器IP:/opt/project/backend/
例如:
scp target/zhiguang.jar root@192.168.1.100:/opt/project/backend/
文字说明
scp 可以把本地文件复制到远程服务器。
这里的意思是:
把本地 target/zhiguang.jar
上传到服务器 /opt/project/backend/ 目录
2. 使用工具上传
如果不习惯命令行,也可以使用一些图形化工具,比如:
这些工具可以像操作本地文件一样,把 jar 包拖到服务器目录中。
七、查看 Java 项目运行进程
项目部署后,我们经常要查看 Java 进程。
ps -ef | grep java
示例输出:
root 12345 1 0 10:00 ? 00:00:10 java -jar app.jar
root 12399 12300 0 10:01 pts/0 00:00:00 grep –color=auto java
文字说明
这里真正的 Java 项目进程是:
java -jar app.jar
前面的 12345 是进程 ID,也就是 PID。
如果要停止这个进程,可以执行:
kill 12345
如果普通停止不掉,可以使用:
kill -9 12345
不过 kill -9 属于强制停止,不建议作为默认方式。
八、查看端口占用
Spring Boot 项目默认端口一般是 8080。
如果项目启动失败,提示端口被占用,可以查看端口:
netstat -tunlp | grep 8080
有些系统默认没有 netstat,可以使用:
ss -tunlp | grep 8080
示例输出:
tcp LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=12345,fd=123))
文字说明
这里可以看到 8080 端口被 Java 进程占用,进程 ID 是 12345。
如果确认要停止,可以执行:
kill 12345
端口排查是部署项目时非常高频的操作。
九、查看项目日志
后端项目上线后,排查问题最重要的就是看日志。
如果项目日志文件是:
app.log
查看完整日志:
cat app.log
分页查看日志:
less app.log
查看最后 100 行:
tail -n 100 app.log
实时查看日志:
tail -f app.log
实时查看最后 200 行并持续输出:
tail -n 200 -f app.log
文字说明
最常用的是:
tail -f app.log
它可以实时查看项目输出。
比如启动 Spring Boot 项目后,可以通过日志判断:
十、查看磁盘、内存和系统资源
部署项目时,服务器资源也需要关注。
1. 查看磁盘空间
df -h
常见输出:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 15G 25G 38% /
2. 查看目录大小
du -sh /opt/project
3. 查看内存使用
free -h
4. 查看系统运行情况
top
如果安装了 htop,也可以使用:
htop
文字说明
这些命令主要用于排查服务器资源问题。
比如项目突然访问很慢,可以看:
十一、安装常用工具
有些服务器是最小化安装,很多工具可能没有。
可以先安装一些常用工具。
1. CentOS 安装
yum install -y vim wget curl net-tools unzip
2. Ubuntu 安装
apt update
apt install -y vim wget curl net-tools unzip
文字说明
常用工具说明:
| vim | 编辑文件 |
| wget | 下载文件 |
| curl | 测试接口或下载内容 |
| net-tools | 提供 netstat 等命令 |
| unzip | 解压 zip 文件 |
十二、使用 curl 测试接口
后端项目部署后,可以直接在服务器上用 curl 测试接口。
例如:
curl http://localhost:8080/user/login
如果是 POST 请求:
curl -X POST http://localhost:8080/user/login \\
-H "Content-Type: application/json" \\
-d '{"username":"admin","password":"123456"}'
文字说明
curl 在排查接口问题时非常有用。
如果服务器本机访问接口成功,但浏览器访问失败,可能是:
十三、部署前建议准备的目录结构
后续部署 Spring Boot 项目时,可以先准备这样的目录:
/opt/project
├── backend
│ ├── app.jar
│ ├── logs
│ └── config
├── mysql
├── redis
└── nginx
创建命令:
mkdir -p /opt/project/backend/logs
mkdir -p /opt/project/backend/config
mkdir -p /opt/project/mysql
mkdir -p /opt/project/redis
mkdir -p /opt/project/nginx
文字说明
这样划分之后,目录会比较清楚。
后端 jar 包、配置文件、日志文件、MySQL、Redis、Nginx 都有单独位置。
后面如果使用 Docker Compose,也可以直接基于这个目录继续扩展。
十四、常见问题
1. 为什么命令提示 permission denied?
这是权限不足。
可以检查当前用户:
whoami
如果不是 root,可能需要使用:
sudo 命令
或者切换到有权限的用户。
2. 为什么上传 jar 包失败?
常见原因有:
可以先确认服务器目录:
ls /opt/project/backend
3. 为什么项目启动后访问不到?
常见原因有:
排查顺序一般是:
ps -ef | grep java
ss -tunlp | grep 8080
tail -n 200 -f app.log
十五、实际开发建议
1. 每次操作前先确认路径
在服务器上操作时,建议经常执行:
pwd
ls
尤其是删除文件前,一定要确认当前目录。
2. 项目文件统一放到固定目录
不要今天放 /root,明天放 /opt,后天又放 /home。
建议统一放到:
/opt/project
这样后面维护会轻松很多。
3. 日志一定要单独存放
比如:
/opt/project/backend/logs/app.log
不要让日志散落在各个目录。
4. 先学常用命令,不用一开始追求全面
部署项目用到的 Linux 命令其实并不算特别多。
先把目录、文件、进程、端口、日志这些命令掌握,就已经能解决很多部署问题。
十六、总结
这一篇我们正式开始了第六个系列:Linux + Docker 项目部署上线系列。
本篇主要学习了 Linux 服务器部署项目之前必须掌握的一些基础内容:
这些内容虽然不是 Java 代码,但对后端开发非常重要。
因为项目上线以后,很多问题不是出在代码怎么写,而是出在环境、端口、进程、日志和配置上。
下一篇我们就可以继续写:Spring Boot 项目打包成 jar 并在 Linux 运行。




