欢迎光临
我们一直在努力

项目部署上线进阶:除了 Nginx 手动部署,还能怎么做?

上一篇我们讲的是最基础的部署方式:

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 镜像部署成可管理的服务

    真正的学习顺序不是“哪个最火先学哪个”,而是:

    先手动,后自动;先单项目,后多服务;先部署成功,后部署优雅。

    赞(0)
    未经允许不得转载:171主机测评 » 项目部署上线进阶:除了 Nginx 手动部署,还能怎么做?
    分享到: 更多 (0)

    评论 抢沙发

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