2025-05-06
运维
00
请注意,本文编写于 37 天前,最后修改于 22 天前,其中某些信息可能已经过时。

目录

前置条件
Spring Boot 应用实现 DevOps
博客首页部署
博客后台内容管理部署
后记
参考文章

说实话代码部署麻烦一次就够了,不应该次次重复一遍。从而 DevOps 派上用场了。本次选用的是 Github Actions 流水线。不用 Gitee Go 不为别的,单纯的不会使。

前置条件

  • 开发完成代码已经与 Github 仓库进行关联
  • 了解 Linux shell 命令,需要在流水线配置文件中书写相应的 shell 脚本
  • 了解 docker 命令,SpringBoot 应用采用 Docker 部署
  • 了解 Nginx,博客首页以及博客管理页面通过 Nginx 进行部署

Spring Boot 应用实现 DevOps

  1. 编辑 Dockerfile 文件,给 Spring Boot 应用创建 Docker 镜像做准备

    dockerfile
    # 使用官方的 OpenJDK 作为基础镜像 FROM anapsix/alpine-java:8_server-jre_unlimited # 设置工作目录 # WORKDIR /app # 将本地 jar 包复制到镜像中 COPY ./*.jar app.jar # 暴露应用的端口 EXPOSE 8800 # 启动应用 ENTRYPOINT ["java","-Xms256m","-Xmx256m","-jar","/app.jar"]
  2. 配置服务器登录信息以及阿里云容器镜像服务登录信息

    1. 进入代码仓库后点击 Settings,在展开的菜单中选择 Secrets and variables 点击后选择创建 6 个 secrets 分别如下:

      Secrets含义
      DOCKER_LOGIN_URL阿里云 Docker 镜像私有仓库地址
      DOCKER_PASSWORD阿里云 Docker 镜像私有仓库登录密码
      DOCKER_USERNAME阿里云 Docker 镜像私有仓库登录用户名
      SERVER_IP服务器 IP
      SERVER_USER_NAME服务器登录用户名
      SSH_PASSWORD服务器登录密码
  3. 创建 Github Actions 流水线

    1. 首先点击 Actions 点击 New workflow
    2. 选择自定义工作流
    3. 编写工作流文件
    yaml
    name: Docker-Image-CI on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - name: Check out the code uses: actions/checkout@v2 - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Set up JDK 8 uses: actions/setup-java@v4 with: java-version: '8' distribution: 'temurin' cache: 'maven' - name: Build with Maven run: mvn clean package -Dmaven.test.skip=true - name: Move JAR to .github/workflows run: | mkdir -p .github/workflows mv ./target/*.jar .github/workflows/ - name: Log in to Aliyun Docker Registry env: ALIYUN_DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} ALIYUN_DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} ALIYUN_DOCKER_URL: ${{ secrets.DOCKER_LOGIN_URL }} run: | echo "${ALIYUN_DOCKER_PASSWORD}" | docker login "${ALIYUN_DOCKER_URL}" --username "${ALIYUN_DOCKER_USERNAME}" --password-stdin - name: Remove old Docker images run: | docker images --format '{{.Repository}}:{{.Tag}}' | grep 'registry.cn-hangzhou.aliyuncs.com/nongscblog' | xargs -I {} docker rmi -f {} - name: Build Docker image run: docker build -f ./Dockerfile -t nblog-server .github/workflows/ - name: Tag Docker image run: docker tag nblog-server registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest - name: Push Docker image to Aliyun registry run: docker push registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest - name: Set up SSH using username and password env: SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }} SSH_USER: ${{ secrets.SERVER_USER_NAME }} SERVER_IP: ${{ secrets.SERVER_IP }} run: | sudo apt-get update sudo apt-get install -y sshpass sshpass -p "${SSH_PASSWORD}" ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SERVER_IP} << 'EOF' # Login Aliyun Docker Repo # echo "${ALIYUN_DOCKER_PASSWORD}" | docker login "${ALIYUN_DOCKER_URL}" --username "${ALIYUN_DOCKER_USERNAME}" --password-stdin sudo docker login --username=${{ secrets.DOCKER_USERNAME }} --password=${{ secrets.DOCKER_PASSWORD }} ${{ secrets.DOCKER_LOGIN_URL }} # Stop and remove old container sudo docker ps -q -f "name=nblog-server" | xargs -r sudo docker stop sudo docker ps -aq -f "name=nblog-server" | xargs -r sudo docker rm # Remove old Docker images sudo docker image prune -a -f # Remove the specific Docker image sudo docker rmi -f registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest # Pull the new Docker image sudo docker pull registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest # create blog folders sudo mkdir nblog # Run the new container sudo docker run -itd --ulimit nofile=1024 --name nblog-server -p 8800:8800 -v $(pwd)/nblog/logs:/blog-api/log/blog-dev registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest EOF
  4. 工作流文件编写好之后会直接触发 Actions 进行触发构建工作,等待完成直接部署至目标服务器

  5. 查看服务器应用部署情况

博客首页部署

这个部署全靠通义千问,这真是个好东西,兄弟们。正确输出你的需求,直接帮你完事,太棒了

首先这个没有使用 docker 镜像,使用使用 docker 镜像比较麻烦,要涉及容器之间通信问题,我不想解决这个问题,我直接选择逃避这个问题,选择曲线救国。

  1. 配置服务器登录信息以及阿里云容器镜像服务登录信息

    Secrets含义
    DEPLOY_FLODER构建后文件存放位置
    SERVER_IP服务器 IP
    SERVER_USER_NAME服务器登录用户名
    SSH_PASSWORD服务器登录密码
  2. 创建 Github Actions 流水线

    1. 首先点击 Actions 点击 New workflow
    2. 选择自定义工作流
    3. 编写工作流文件
    yaml
    name: BuildandDeployBlogView on: push: branches: - master # 监听main分支的push事件 jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: '16' # 或者你使用的node版本 - name: Install dependencies and build run: | npm install npm run build - name: Deploy to server via SSH uses: appleboy/scp-action@v0.1.0 env: HOST: ${{ secrets.SERVER_IP }} USERNAME: ${{ secrets.SERVER_USER_NAME }} PORT: 22 PASSWORD: ${{ secrets.SSH_PASSWORD }} # 或者使用KEY选项代替PASSWORD with: source: "dist/*" target: ${{ secrets.DEPLOY_FLODER }} # 替换为你的web根目录路径
  3. 工作流文件编写好之后会直接触发 Actions 进行触发构建工作,等待完成直接部署至目标服务器

  4. 查看 dist 文件部署情况

博客后台内容管理部署

与博客首页部署一致,其中需要注意的是 DEPLOY_FLODER 部署文件地址记得区分

后记

使用通义千问来实现自己的博客首页以及博客内容管理部署

参考文章

  1. 带你学习通过GitHub Actions如何快速构建和部署你自己的项目,打造一条属于自己的流水线
  2. GitHub 文档 - Actions

本文作者:Nongsc

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!