上一篇我们讲的是最基础的部署方式:
Linux + Nginx + 手动上传代码 + 手动启动项目
这套方式适合入门,但项目一多、环境一复杂,就会开始麻烦。所以学完基础部署后,建议继续了解这些更常见的进阶方法:
-
Docker
-
Docker Compose
-
Jenkins
-
GitHub Actions / GitLab CI
-
Kubernetes(K8s)
这篇不讲太深,只讲两个重点:
它们是干什么的
新手第一次怎么用
一、Docker 怎么用
Docker 的作用是把“项目代码 + 运行环境”打包在一起。
这样你不用再担心:
-
本地能跑,服务器不能跑
-
换台服务器又要重装环境
-
团队每个人环境不一样
Docker 最基本的使用步骤
假设你是一个 Java 项目,常见流程是:
写一个 Dockerfile
用它构建镜像
用镜像启动容器
一个最简单的 Dockerfile 示例:
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
然后在项目目录执行:
docker build -t my-app .
docker run -d -p 8080:8080 –name my-app-container my-app
意思是:
-
docker build:把项目打成镜像
-
docker run:用镜像启动容器
-
-p 8080:8080:把服务器 8080 端口映射到容器 8080
如果是 Node 项目,也类似,只是 Dockerfile 里会换成 Node 环境。
Docker 适合什么场景
-
单个项目想快速迁移
-
想统一开发、测试、生产环境
-
想减少“环境问题”
二、Docker Compose 怎么用
如果你一个项目里不只有后端,还有:
-
前端
-
后端
-
MySQL
-
Redis
这时你一个个 docker run 会很乱,所以要用 Docker Compose。
它的作用是:用一个配置文件统一管理多个容器。
Docker Compose 最基本的使用步骤
先写一个 docker-compose.yml 文件,例如:
version: "3.9"
services:
app:
image: my-app
ports:
– "8080:8080"
depends_on:
– mysql
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: testdb
ports:
– "3306:3306"
然后执行:
docker compose up -d
查看运行状态:
docker compose ps
停止服务:
docker compose down
它解决了什么问题
-
多个服务一起启动
-
多个服务一起停止
-
配置集中管理
-
部署步骤更规范
三、Jenkins 怎么用
Jenkins 是自动化部署工具。它的核心思路是:
代码一提交,Jenkins 自动帮你打包、上传、重启服务
这样你就不用每次都手动部署。
Jenkins 最常见的使用流程
先理解它的工作顺序:
代码放在 Git 仓库
Jenkins 拉取代码
Jenkins 执行打包命令
Jenkins 执行部署命令
服务器上的项目自动更新
Jenkins 第一次怎么上手
最简单的思路不是先学很复杂的流水线,而是先学“建一个任务”。
第一步:安装 Jenkins
Jenkins 一般装在 Linux 服务器上,也可以用 Docker 跑。
很多人一开始会直接用 Docker:
docker run -d \\
-p 8081:8080 \\
-p 50000:50000 \\
–name jenkins \\
jenkins/jenkins:lts
然后浏览器打开:
http://服务器IP:8081
第二步:创建一个任务
进入 Jenkins 后:
新建 Item
选择 Freestyle project
配置 Git 仓库地址
配置构建命令
配置部署命令
第三步:写构建命令
比如 Java 项目:
mvn clean package -DskipTests
比如前端项目:
npm install
npm run build
第四步:写部署命令
比如把打包后的文件复制到服务器目录,再重启项目。
例如:
cp target/app.jar /home/project/backend/app.jar
pkill -f app.jar
nohup java -jar /home/project/backend/app.jar > /home/project/backend/app.log 2>&1 &
这就是最简单的自动部署:Jenkins 帮你执行原本手动输入的命令。
Jenkins 更适合什么场景
-
公司内部项目
-
有专门测试环境、生产环境
-
需要固定发布流程
-
团队成员较多
四、GitHub Actions / GitLab CI 怎么用
这类工具和 Jenkins 很像,区别是它们更贴近代码仓库本身。
你可以理解成:
-
Jenkins:单独装一个自动化平台
-
GitHub Actions / GitLab CI:直接用代码平台自带的自动化能力
GitHub Actions 最简单的使用方式
在项目里新建文件:
.github/workflows/deploy.yml
示例:
name: Deploy
on:
push:
branches:
– main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
– name: Checkout
uses: actions/checkout@v4
– name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
– name: Install
run: npm install
– name: Build
run: npm run build
这表示:
-
当 main 分支有新代码提交
-
自动拉代码
-
自动安装依赖
-
自动执行打包
如果你再配合服务器密钥、上传脚本,还可以继续自动部署到服务器。
它适合什么场景
-
代码托管在 GitHub 或 GitLab
-
想少维护一套额外的 Jenkins
-
团队想把部署流程写进代码仓库
五、Kubernetes(K8s)怎么用
K8s 不适合新手一开始就深入,但你至少要知道它怎么工作。
它不是拿来“代替写代码”的,而是拿来“管理很多容器”的。
比如你有很多服务:
-
用户服务
-
订单服务
-
支付服务
-
商品服务
这时候 K8s 可以帮你做:
-
自动启动容器
-
容器挂了自动重启
-
增加机器后自动分配服务
-
流量大时自动扩容
K8s 最基础的使用方式
最基础的思路是:
先把项目做成 Docker 镜像
把镜像推到镜像仓库
写 K8s 配置文件
用 kubectl 部署
一个非常简化的部署示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
– name: my-app
image: my-app:latest
ports:
– containerPort: 8080
执行命令:
kubectl apply -f deployment.yaml
这表示:
-
部署一个应用
-
运行 2 个副本
-
每个副本跑同一个镜像
K8s 适合什么场景
-
微服务很多
-
需要高可用
-
需要自动扩容
-
需要统一管理大量服务
六、除了这些,还有哪些部署方法
除了上面这些,实际工作中还会碰到几种常见方式。
1. 宝塔面板部署
适合新手或小项目。
常见做法是:
装宝塔面板
在面板里建站
配置 Nginx
上传项目文件
启动后端服务
优点是可视化,缺点是长期容易依赖面板,不利于理解底层。
2. 前端部署到对象存储 + CDN
很多公司前端不会直接放在后端服务器里,而是:
本地执行 npm run build
把 dist 上传到 OSS / COS / S3
再挂 CDN
这样做的优点是:
-
前端访问更快
-
减少源服务器压力
-
静态资源更适合全球分发
3. 用脚本手动自动化部署
有些团队还没上 Jenkins,但也不想完全手动,就会写脚本。
例如写一个 deploy.sh:
git pull
npm install
npm run build
pm2 restart app
然后每次上线直接执行:
sh deploy.sh
这也是一种过渡阶段很常见的部署方式。
七、新手最推荐的学习顺序
不要一开始就学最复杂的。
最推荐顺序是:
手动部署:先理解项目怎么上线
Docker:先解决环境一致性
Docker Compose:再管理多服务
Jenkins 或 GitHub Actions:再做自动化
K8s:最后再学大规模容器管理
八、总结
如果你已经会基础部署,下一步不要只停留在“知道名字”,而是至少要知道这些工具怎么开始用:
-
Docker:写 Dockerfile,构建镜像,启动容器
-
Docker Compose:写 docker-compose.yml,统一启动多个服务
-
Jenkins:创建任务,拉代码,执行构建和部署命令
-
GitHub Actions:写工作流文件,代码提交后自动构建
-
K8s:把 Docker 镜像部署成可管理的服务
真正的学习顺序不是“哪个最火先学哪个”,而是:
先手动,后自动;先单项目,后多服务;先部署成功,后部署优雅。




