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

若依管理系统(前后端分离版)部署并实现持续发布 [若依管理系统](https://ruoyi.vip/)是基于SpringBoot的权限管理系统,可以用它作为基础构建自己的后台管理系统。这个项目在 Gitee 上有1.8 万个 star。这次部署的是基于SpringBoot+Vue**前后端分离**的版本。...... 阅读详情

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

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

通过此教程,你将获得:

  • Gitlab 代码托管环境

  • Gitlab CI/CD 环境

  • Springboot 生产环境

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

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

image-20220426150029370

整个过程采用 优快云 开发云 搭建,如果你仅仅想学习体验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_rsa 和 id_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 生产环境搭建、代码仓库安装、自动打包部署。

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

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

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

基于 Docker ( Gitlab、Gitlab Runner ) 搭建一整套自动化CI、CD流程,完成从代码提交到自动打包编译到自动部署运行 作为一个前端,以前在公司内接触过搭建成熟的完整CI、CD流程,后来在想是否自己也能搭建这样一套系统,通过学习研究后有了这样一篇博客,和各位一起共同学习。 首先大家需要一台服务器,本机电脑也行(推荐2核8G配置以上,因为安装的服务比较占内存)。 一、安装 Docker linux服务器使用curl下载快速安装的shell脚本 curl -fsSL get.docker.com -o get-docker.sh 下载完成后,可以ls命令查看一下。已经存在的话,使用sh命令执行这个脚本 sh get-doc. 阅读详情

相关推荐

GitLab CI/CD 自动化部署全流程

GitLab CI/CD 自动化部署全流程

weixin_43025823的博客 1万+

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

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

漫漫人生路 1509

DeepSeek v4 flash完整接入指南:从API申请到VSCode集成实战

大型语言模型(LLM)通过API接口为开发者提供了强大的代码生成与智能对话能力,其核心原理是基于海量数据训练的Transformer架构,能够理解自然语言指令并生成高质量的技术内容。在工程实践中,这类技术显著提升了开发效率,广泛应用于代码补全、技术问答、文档生成等场景。本文聚焦于DeepSeek v4 flash模型的接入,针对开发者在API调用和工具集成中遇到的高频问题,提供了从环境配置、密钥管理到错误排查的完整解决方案。通过集成VSCode插件和构建本地客户端,开发者可以快速将AI能力融入工作流,有效利

weixin_30580341的博客 323

通过docker和gitlab实现项目自动打包部署

项目自动打包部署

qq_44845473的博客 2729

根据mac地址生成服务器唯一机器码

生成机器码:根据mac地址生成服务器唯一机器码 打成jar可用于项目授权。注册等功能

CST新手必看:共面波导色散曲线绘制全流程(附参数设置避坑指南)

本文详细介绍了CST Microwave Studio中绘制共面波导色散曲线的全流程操作,特别针对新手常见的边界条件设置错误、参数扫描失效等问题提供解决方案。通过模型建立、边界条件设置、本征模求解器配置等步骤,帮助工程师快速掌握CPW色散特性分析方法,并附有参数设置避坑指南,提升高频电路设计效率。

tomato的博客 987

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

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

漫漫人生路 2912

ArcGIS投影变换实战:从WGS_1984到Krasovsky_1940_Albers的精准转换

本文详细解析了在ArcGIS中如何将WGS_1984地理坐标系下的数据精准转换至Krasovsky_1940_Albers投影坐标系。文章通过实战案例,重点阐述了地理坐标系与投影坐标系的区别,并逐步演示了创建自定义地理变换、使用投影栅格工具以及进行批量处理和结果验证的核心操作流程,旨在解决地图数据叠加不准的常见问题。

weixin_29251131的博客 463

若依管理系统部署并实现持续发布

是基于SpringBoot的权限管理系统,可以用它作为基础构建自己的后台管理系统。这个项目在 Gitee 上有1.8 万个 star。它有3 个版本,分别是单体版、前后端分离版、微服务版。这次部署的是基于SpringBoot+Vue的版本。

csdn_dev_cloud的博客 1262

AD936x Evaluation Software 实战配置指南:从寄存器设置到滤波器优化

本文提供AD936x Evaluation Software的实战配置指南,详细解析从工程创建、RF向导与时钟模块配置,到数字滤波器优化、数字接口设置及增益控制的完整流程。重点分享寄存器设置、滤波器系数权衡及PLL稳定技巧等核心要点,帮助开发者高效配置AD9361/AD9363射频芯片,快速应用于SDR、基站等场景。

perl8的博客 697

银河麒麟V10SP1系统盘瘦身指南:如何制作一个只含必需软件的轻量级安装镜像

本文详细介绍了银河麒麟V10SP1系统盘瘦身的完整流程,从依赖分析到最小化镜像构建,帮助用户创建只含必需软件的轻量级安装镜像。通过智能包筛选、KickStart定制和性能优化,显著减少ISO体积和部署时间,适用于服务器批量部署等场景。

weixin_26765287的博客 404

kubesphere DevOps 流水线拉取GIT代码部署springboot 项目

kubesphere DevOps 流水线拉取GIT代码部署springboot 项目

睡竹的博客 2510

基于CNN对抗嵌入的图像隐写——CNN-Based Adversarial Embedding for Image Steganography

CNN-Based Adversarial Embedding for Image Steganography https://ieeexplore.ieee.org/abstract/document/8603808 这篇论文发表在TIFS( IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY),TIFS是网络与信息安全领域的国际两大顶级期刊之一,中国计算机学会(CCF)推荐的A类期刊,SCI一区TOP期刊,目前影响因子有7多了。 1 概

weixin_48654804的博客 2279

阿里云容器服务ack从零到一部署springboot应用

随着业务,及数据爆发增长,很多公司都开始吧应用向云原生迁移,靠自己来运维这一套庞大的k8s应用,实在是有点费劲。选择这个模板就行,可以吧把代码扫描和maven单元测试给去掉,因为这里是做测试就没表保留这两个哈,避免浪费时间。这里分两步,第一是java构建,需要选择对应的jdk版本,我用的是11,大家按照自己代码里面的版本来选择就行。配置好后选择对应的命名空间,yaml路径(代码里面yaml文件的路径),变量(yaml文件里面设置的变量)这里选择之前开通的镜像仓库即可,注意选择对应的仓库。

qq_35270686的博客 3931

【Arduino 动手做】六舵机自平衡 Rotary Stewart 平台

《Arduino六舵机自平衡Rotary Stewart平台项目》 该项目展示了一个基于Arduino的六自由度Rotary Stewart平台,通过六个舵机实现动态平衡控制。设计采用激光切割框架和TAMIYA 70171套件,提供详细组装指南和开源固件(GitHub可获取)。开发者丹·罗耶分享了3D打印文件、视频演示及运动学优化需求,强调该平台可扩展应用于游戏控制(如Kerbal Space Program)或教育领域。项目链接包含完整资源包,鼓励用户参与改进并分享创作成果。该案例体现了Arduino在机

雕爷学编程 1090

Hermes 教程 05:多 Agent 编排

本文介绍了Hermes v0.13.0中的四种多Agent协作模式:1)delegate_task快速子任务模式,适合2-3个独立并行任务;2)spawn子Agent模式,实现零成本并行多步流水线;3)tmux交互子Agent模式,支持长期自主任务;4)全新Kanban看板系统,提供持久化AI团队协作框架。各模式在隔离级别、时长、工具访问和适用场景上存在差异,其中spawn模式通过独立上下文窗口实现零上下文成本。文章详细说明了每种模式的使用方法、限制条件和典型应用场景,并提供了具体代码示例和可视化流程图。K

程序猿_三产 537

AgentCPM深度研报助手在Web开发全栈项目文档生成中的应用

本文介绍了如何在星图GPU平台上自动化部署📑AgentCPM深度研报助手镜像,并将其应用于Web全栈项目文档生成。该工具能自动分析前后端代码、API定义及数据库结构,快速生成结构清晰的技术架构说明、API接口文档和部署手册,极大提升开发者的文档编写效率。

weixin_29050829的博客 190

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1658

Remio:为AI编程助手构建持续工作记忆,告别重复对话

在AI编程领域,大语言模型(LLM)的代码生成能力已显著提升,但其核心局限在于缺乏持续记忆,导致跨会话协作效率低下。这本质上是上下文管理问题,而非模型能力不足。通过构建结构化知识库,将项目背景、技术决策和调试经验向量化存储,可实现AI助手的个性化记忆与精准检索。这种记忆增强技术能大幅提升开发效率,尤其适用于复杂项目的长期维护与团队知识沉淀。本文以Remio为例,深入探讨如何通过“记忆体”和“技能”机制,解决AI编程中的“跨会话失忆”和“知识碎片化”痛点,实现真正的持续协作。

weixin_33824363的博客 409

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

在Linux上搭建gitlab以及自动化编译部署的完整流程

在Linux上搭建gitlab以及自动化编译部署的完整流程

IT8343的博客 3528

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【springboot开发】项目打包、发布和部署

Docker是一个开源的应用容器引擎,可以让开发者打包应用及依赖包到一个可移植的容器中,然后发布到任何Linux机器上,还可以实现虚拟化。Docker是C/S架构,包括Docker Daemon和Docker Client。镜像(Image)只读的,包含需要运行的组件。用来创建容器,一个镜像可以运行多个容器容器(Container)Docker的运行组件。容器是一个隔离环境,互不影响。仓库(Registry)负责管理和共享Docker镜像。

idiotyi的博客 4138

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

如何通过 Docker 快速部署开源密码管理器 Bitwarden

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !前言两年前,我就想自托管 Bitwarden 密码管理器了,但是直到 2022 年快结束的现在,我才真正动手。在搭建好 Vaultwarden 服务以后,这两天我就干了三件事:把七年里 Google Chrome 保存的密码导入到 Vaultwarden删除所有 Google Chrome 保存的密码整理密码:登录这...

easylife206的专栏 4519

GitLab CI/CD 持续集成/部署 SpringBoot 项目

GitLab CI/CD(Continuous Integration/Continuous Deployment)是 GitLab 提供的一种持续集成和持续部署的解决方案。它可以自动化软件的构建、测试和部署过程,以便开发者更快地、更频繁地发布可靠的产品。

小毕超博客 3995

springboot在线仓库设计与实现-附源码745131

开发背景,运用软件工程原理和开发方法,采用java技术构建的一个管理系统。整个开发过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计等;详细设计主要包括系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对系统进行功能测试,并对测试结果进行分析总结,得出系统中存在的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为今后开发类似系统提供了借鉴和帮助。这种个性化的网上系统管

m0_73244000的博客 327
上一篇: 【优快云开发云】v1.22 版本,上线法兰克福云主机
下一篇: 若依管理系统部署并实现持续发布
csdn_dev_cloud
博客等级 码龄5年 18粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值