十分钟完成Springboot 生产环境搭建、代码仓库安装、自动打包部署

在这里插入图片描述

本文登录 Linux 采用证书登录方式部署应用。如果你是Linux初学者,不熟悉 密钥的使用,可以选择密码登录方式,参考本篇文章的密码登录版本

本教程以 Springboot 官方的 HelloWorld 项目为例,教你掌握Springboot项目生产环境搭建、持续集成环境搭建。

如果你不想那么麻烦,也可以一键创建环境

通过此教程,你将获得:

  • Gitlab 代码托管环境

  • Gitlab CI/CD 环境

  • Springboot 生产环境

  • Springboot 项目自动打包部署环境

GitLab 自动打包部署流程如下图,开发者提交代码到GitLab后,会触发编译、构建,然后部署到服务器上。

image-20220426150029370

整个过程采用 CSDN 开发云 搭建,如果你仅仅想学习体验Springboot 生产环境搭建、代码仓库安装、自动打包部署,可以选择按小时计费,体验完毕后释放相关资源,花费只有几元钱

前期准备

SSH密钥对是一种安全便捷的登录认证方式,密钥用于登录 Linux 主机和 GitLab 自动打包部署。

创建密钥在自己的电脑上进行,可根据自己电脑的操作系统类型选择创建密钥的方式

创建密钥

Windows 创建密钥

PuTTY 是一个 SSH 和 telnet 客户端,可使用它登录 Linux 主机。 PuTTY 是开源软件,提供源代码,由一群志愿者开发和支持。

PuTTYGen 用来创建密钥对。

浏览到下面开发者页面,下载 PuTTY 的安装程序

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

下载的文件,按照安装向导完成安装。

也可以从以下链接中下载 PuTTY 的64 位绿色版。绿色版下载后可直接运行,免去安装过程。

PuTTY

PuTTYGen

运行 puttygen.exe ,在 PuTTY 密钥生成器窗口中,单击 【Generate】。在灰色框中移动光标以填充绿色条。

Generating an SSH key pair in Putty.

点击【Save public key】按钮 保存公钥

点击【Save private key】按钮 保存公钥

Linux/MacOS 创建密钥

使用ssh-keygen 生成 SSH 密钥,密钥用来登录 Linux 主机。

ssh-keygen

image-20220421134040207

一路回车就可以完成 创建SSH 密钥,可以看到 ~/.ssh目录下生成了 id_rsaid_rsa.pub 两个文件

image-20220421134123430

密钥使用场景
  • 创建主机时,创建密钥密钥内容填写id_rsa.pub 文件的内容
  • GitLab CI/CD SSH_PRIVATE_KEY 变量使用 id_rsa文件的内容

Linux/MacOS 使用cat命令查看密钥文件内容,windows 下使用type命令或写字板查看密钥文件内容

image-20220421134233886

准备两台主机

购买gitlab 主机

gitlab 主机用于托管项目代码,打包部署项目

访问云主机创建页面,在【镜像市场】选择【Gitlab】

image-20220420173659292

【主机规格】选择4GB/2CPU的以上配置。配置越高,支持的并发用户越多,打包构建的速度越快。gitlab 官方推荐配置是 4GB/4CPU。

注意:2GB 的主机可能安装完就卡死,访问页面一直是 502,根本无法使用。

image-20220421095339435

【登录凭证】选择您的SSH 密钥。若没有密钥,可以点击创建密钥,创建密钥时密钥内容粘贴 id_rsa.pub 文件的 内容。

image-20220420173908366

【弹性公网】选择固定带宽。带宽选择越大,打包构建的速度越快。

image-20220420174454347

如果你仅仅想体验部署过程,可以选择【按小时计费】,整个花费只有几元钱

image-20220422094739576

配置完成后,点击页面底部的【立即购买】

完成购买后,在主机列表可以看到主机的 IP 地址。这个 IP是 gitlab 主机的 ip 地址,下面的配置中会用到。

image-20220420174803254

购买Web 主机

Web 主机用于运行 Springboot 项目

访问云主机创建页面,在【镜像市场】选择【Springboot】,主机规格可选最低规格,其他配置同 gitlab 主机。

image-20220420173525974

配置 hosts 文件

配置本机的 hosts,文本中的ip 地址用你的主机 ip 替换。

此步骤可以跳过,以下步骤中直接使用主机的 ip 地址。

116.196.115.19 gitlab
116.198.43.123 web

配置 gitlab

修改密码

在浏览器地址栏输入 http://gitlab ,访问 上一步购买的gitlab 主机。若访问 gitlab 页面上出现502错误,说明 gitlab 服务正在初始化服务,请稍后再试。

image-20220420150739878

输入用户名 root ,密码 H9ZjJo8jmb1p+2FAEJiA1Mv/ODHyj7JmGpe7joeGiJU=,点击 【Sign in】

成功登录系统后,为了系统安全。请访问 http://gitlab/-/profile/password/edit 修改密码。

HelloWorld 项目代码托管

本次演示的 Springboot HelloWorld 项目,来自 spring 官网教程,是最简单的 Springboot Web 项目,适合初学者入门 Springboot。查看教程地址点击这里

代码仓库托管在 github 上,由于有些时候访问 github 速度比较慢,我们将项目 clone 到了 gitcode

代码仓库的地址是

https://gitcode.net/hjue/gs-spring-boot.git

新建项目gs-spring-boot

点击页面顶部的➕,选择 【新建项目/仓库】

image-20220420152216735

选择【导入项目】

image-20220420152315015

选择 【从 URL 导入仓库】

image-20220420152401985

Git 仓库URL 中输入 https://gitcode.net/hjue/gs-spring-boot.git ,拖动到页面底部,点击【新建项目】

image-20220420152650704

等待不足 1 分钟的时间,即可看到项目主页。

项目代码打包部署

配置部署变量

接下来我们进行项目的配置

image-20220420152937793

点击左侧边栏菜单的【设置】-> 【CI/CD】

image-20220420153137426

点击【变量】->【添加变量】

image-20220420153251700

键输入 SSH_PRIVATE_KEY ,值 粘贴访问服务器的私钥,点击【添加变量】。私钥是文件 id_rsa 的内容。

image-20220420153416290

按照上面的步骤添加APP_HOST变量。键输入APP_HOST,值输入你 Web 服务器的 IP 地址

image-20220420153846704

完成变量添加后,页面显示如下

image-20220420153945016

添加部署脚本

点击左上角项目名称跳转到项目首页

image-20220420154147626

创建web部署服务配置

点击➕,选择【新建文件】

image-20220420154351797

文件名 .gitlab-ci/hello-world.service ,内容粘贴以下内容。注意检查文件名末尾不要有空格。

[Unit]
Description=hello-world
After=syslog.target

[Service]
User=root
ExecStart=/usr/local/apps/hello-world/run.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

image-20220420154732824

滚动到页面底部,点击【Commit changes】。可以看到文件创建成功。

image-20220420154922649

创建运行 springboot 项目脚本

重新回到项目首页,再次添加文件.gitlab-ci/run.sh

文件内容如下:

#!/bin/bash
cd /usr/local/apps/hello-world
java -jar hello-world.jar

image-20220420155211810

添加持续集成配置

添加文件 .gitlab-ci.yml,文件内容如下:

stages:
  - build
  - deploy
  
maven-build:
  image: maven:3-jdk-8
  stage: build
  script: 
    - cd complete
    - mvn clean package -B -Dmaven.test.skip=true
  artifacts:
    paths:
      - complete/target/*.jar

production:
  image: maven:3-jdk-8
  stage: deploy
  before_script:
    - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config'  
  script:
    # 在 web 服务器上创建应用目录
    - ssh root@$APP_HOST "[[ -d /usr/local/apps/hello-world ]] || { mkdir -p /usr/local/apps/hello-world; }"
    # 将应用部署启动脚本到 web 服务器上
    - cat .gitlab-ci/run.sh | ssh root@$APP_HOST "cat > /usr/local/apps/hello-world/run.sh; chmod +x /usr/local/apps/hello-world/run.sh"
    # 复制 jar 文件到服务器
    - scp complete/target/spring-boot-complete-0.0.1-SNAPSHOT.jar root@$APP_HOST:/usr/local/apps/hello-world/hello-world.jar
    # 部署应用为系统服务
    - cat .gitlab-ci/hello-world.service | ssh root@$APP_HOST "cat > ./hello-world.service "
    - ssh root@$APP_HOST "[[ -f /etc/systemd/system/hello-world.service ]] || { mv ./hello-world.service /etc/systemd/system/hello-world.service && systemctl daemon-reload && systemctl enable hello-world.service; }"
    - ssh root@$APP_HOST "[[ -f ./hello-world.service ]] && { rm ./hello-world.service; }"
    # 重启应用服务
    - ssh root@$APP_HOST "systemctl restart hello-world"
    # 查看服务状态
    - ssh root@$APP_HOST "systemctl status hello-world"
  only:
  - main

文件创建成功后,回到项目首页。可以看到项目正在构建。

第一次构建比较慢,大概需要 20 分钟左右,构建的速度和你 gitlab 主机的配置及带宽相关。

点击这个【流水线状态按钮】查看项目构建的进度和构建的日志。

image-20220420160248100

在流水线页面,点击【运行中】按钮,查看流水线的工作情况

image-20220420162809047

点击 构建的作业,可查看构建的日志。从图中可以看到 maven-build 已经成功运行完成。production 任务正在运行中。

image-20220420163101751

最后,在流水线页面,可看到项目部署成功。此次构建用时 8 分钟。

image-20220420170758651

查看部署结果

项目构建成功后,打开浏览器,访问 http://web,页面显示如下内容,表示项目部署成功

image-20220421164832019

至此,完成了代码仓库建立、Springboot 运行环境搭建、项目打包部署的这个过程。

你可以通过 Gitlab 的 WebIDE 修改代码,提交后项目会自动打包部署。

修改代码体验自动部署

编辑项目代码文件HelloController.java,修改 index方法返回的字符串

image-20220421164645192

我将字符串"Greetings from Spring Boot and GitLab!"改为 "Greetings from Spring Boot and GitLab!",提交修改后,gitlab 会自动开发打包并重新部署应用。

流水线运行完毕后,访问 web 服务器,可以看到首页内容已经变为"Greetings from Spring Boot and GitLab!"

image-20220421165420229

同样,在本地修改代码,push到 gitlab 代码仓库,也会触发 gitlab 流水线。

至此,我们已经完成了 SpringBoot 生产环境搭建、代码仓库安装、自动打包部署。

若你的项目是前端后分离的项目,可以参考【若依管理系统(前后端分离版)部署】

CSDN 开发云,致力于帮助开发者让开发、代码发布、部署更简单。

FAQ

作业运行错误 Could not resolve host

fatal: unable to access 'http://2c722bd81d95/root/gs-spring-boot.git/': Could not resolve host: 2c722bd81d95
ERROR: Job failed: exit code 1

image-20220421152451050

原因是未设置 gitlab 的 external_url 参数,可参考 修改GitLab的服务地址 进行设置

密钥配置错误

image-20220420160844264

出现上面错误,表示 CI/CD 变量 SSH_PRIVATE_KEY 设置错误。请参考文档重新设置私钥

git clone https://github.com/spring-guides/gs-spring-boot.git

cd gs-spring-boot/complete/

mvn clean package -Dmaven.test.skip=true

如何手动进行项目构建

点击左侧菜单【CI/CD】-> 【流水线】,进入流水线页面后,点击页面右侧的【运行流水线】按钮,进入运行流水线页面,点击【运行流水线】

image-20220420161200778

如果你不想那么麻烦,也可以一键创建环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值