如何快速部署上线项目

CSDN 的小伙伴们,大家好呀,我是苍何。

今天在群里面看到有小伙伴反馈说,面试的时候一被问到简历中的项目还没上线,就不继续问了,感觉挺奇葩的,要知道就校招来说,项目本身大部分都是练手的项目,上线也得花费很多的成本啊。

群友反馈项目没上线就没下文

就 Java 应用来说本身是很吃内存的,再者现在不拿个微服务项目挂简历又拿不出手,但一上线微服务,服务器资源耗费将会是之前的好几倍。就拿 PmHub 来说,之前单体的时候,1 核 2G 的服务器,跑的还可以。

但一换上微服务,即使升级为 4 核 8G, 服务还没全开的情况下,内存一样被打满,不得已把运行 CI/CD 的 Jenkins 给关了才得以「保命」。

我的服务器资源占用整体情况

我的服务器资源占用细节

而且该说不说,现在的云服务器续费也是贵的离谱,省下好几个月的余粮才咬牙升级配置。(为了项目有个舒服的体验环境也是拼了😂)

含泪升级云服务器

说回面试需要项目上线的问题,我觉得主要有两个办法,一是本地电脑部署外挂内网穿透出去,这样也省去买域名和服务器一堆操作,是性价比最高的。但缺点就是电脑不能关,直到拿到 offer 结束。

当然条件允许的话也可以体验一把部署上线的快感。为什么说是快感呢?有经验的开发应该清楚,每次上线都是激动人心的时刻,线下爱你千万遍,不如线上见一面。上线一次就顺利的算是运气好,很多情况,上线总要出问题。

c8177f3e6709c93d829448ccecc21ed9d00054a8.webp

今天分享一下我们项目的容器化部署实战,希望对你有帮助。

什么是 Docker 容器

当把环境从一个服务器迁移到另一个服务器,当你新买了电脑,会遇上要重新安装一系列的软件,比如 JDK、Tomcat、Maven、Redis 等,而安装完之后每一次都需要再去配置环境,但是这些都是重复性的工作,有什么办法可以解决呢?

玩过云服务器的听说过有镜像一说,将所有的软件和需要的配置都打包好做成镜像,下次需要的时候只需要安装镜像就可以。

类似的,Docker 就是解决这种问题的,将所有的软件程序都放在 Docker 仓库中,我们只需要在电脑上下载 Docker 即可,不需要再去进行繁琐的安装和配置了,只需要几个命令就可以将我们的环境搭建好,这就是 Docker。

docker

总结来说, Docker 是一个开源的应用容器引擎;是一个轻量级容器技术,Docker 支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器,容器启动是非常快速的。

Docker 架构

Docker 的工作原理如下:

docker工作原理(来源于 X)

通过下图可以得知,Docker在运行时分为Docker引擎(服务端守护进程)和客户端工具,我们日常使用各种docker命令,其实就是在使用客户端工具与Docker引擎进行交互。

docker架构图(来源于网络)

Dockerfile

在 Docker 中构建镜像最常用的方式,就是使用Dockerfile。Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。官方文档:https://docs.docker.com/engine/reference/builder。

就是可以存放构建启动指令,可以用来动态构建 docker 镜像容器的文件。

为什么要用 Docker-Compose

因为是微服务项目,经常来说,单独去启动每个服务太麻烦了,而且有些服务间有启动顺序,有需要数据库服务容器、缓存容器等这些。

这就需要用到 Docker-Compose,它是用于定义和运行多容器 Docker 应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序所需要的服务。然后使用一个命令,就可以通过YAML配置文件创建并启动所有服务。

我们的项目用的也是 Docker-Compose,可以做到一条命令就可以启动所有服务容器,主打一个高效

项目上线实战

本地构建

1、前端构建

前端的 vue 进行构建的时候还是比较吃资源的,如果资源配置不足的情况下,可以在本地电脑构建,然后将构建好后的 dist 文件上传到服务器即可。

如果.gitignore 忽略了 dist 的提交,记得注释掉!

npm run build:prod

构建好后生成的静态文件

后端构建

后端打包构建完全可以放在服务器上,后面配合 CI/CD 构建脚本,可以做到自动化打包构建部署上线,它其实也就是一条命令即可。

# 切换到目录
cd /你的安装目录/
# 包构建项目
mvn -T 1C clean package -Dmaven.test.skip=true -Dmaven.compile.fork=true

构建完成后,在每个项目的 target 下面就可以看到打包好的 jar 包:

jar包的位置

阿里云开启安全组

如果服务器是阿里云的话,在操作云服务器之前,先需要开启阿里云的安全组,进行端口的放开。一般来说,云服务器的端口由以下两个控制。

  • 安全组放开端口
  • 防火墙开启端口

阿里云开启安全组

下载项目

接下来就是在云服务器上 clone 项目:

# 进去目录
cd /你的安装目录git clone git@github.com:laigeoffer/pmhub.git

拷贝 jar 包

微服务的 jar 包分散在各自的模块,不大方便操作,因此提供了一键复制 jar 包合相关配置文件到统一地方的 shell 脚本如下:

#!/bin/sh# 复制项目的文件到对应docker路径,便于一键生成镜像。
usage() {echo "Usage: sh copy.sh"exit 1
}# copy sql
echo "begin copy sql "
cp ../sql/pmhub_20240305.sql ./mysql/db
cp ../sql/pmhub_nacos_20240423.sql ./mysql/db# copy html
echo "begin copy html "
cp -r ../pmhub-ui/dist/** ./nginx/html/dist# copy jar
echo "begin copy pmhub-gateway "
cp ../pmhub-gateway/target/pmhub-gateway.jar ./pmhub/gateway/jarecho "begin copy pmhub-auth "
cp ../pmhub-auth/target/pmhub-auth.jar ./pmhub/auth/jarecho "begin copy pmhub-monitor "
cp ../pmhub-monitor/target/pmhub-monitor.jar  ./pmhub/monitor/jarecho "begin copy pmhub-system "
cp ../pmhub-modules/pmhub-system/target/pmhub-system.jar ./pmhub/modules/system/jarecho "begin copy pmhub-job "
cp ../pmhub-modules/pmhub-job/target/pmhub-job.jar ./pmhub/modules/job/jarecho "begin copy pmhub-gen "
cp ../pmhub-modules/pmhub-gen/target/pmhub-gen.jar ./pmhub/modules/gen/jarecho "begin copy pmhub-project "
cp ../pmhub-modules/pmhub-project/target/pmhub-project.jar ./pmhub/modules/project/jarecho "begin copy pmhub-workflow "
cp ../pmhub-modules/pmhub-workflow/target/pmhub-workflow.jar ./pmhub/modules/workflow/jar

这样就可以将 jar 包合配置文件统一路径,方便管理和一键启动。

开启服务器防火墙

服务器防火墙端口的开启也是基于阿里云安全组开启之后,其实开启命令比较简单,如果是 Debian 系统的话是:

ufw allow 9849/tcp

如果是 centos 系统:

firewall-cmd --add-port=80/tcp --permanent

但是端口有好多,能不能一次性开启呢?可以的,同样编写 shell 脚本,一键启动即可:

sh deploy.sh port
# 查看是否开启
ufw status

启动 Nginx

Nginx 我建议不要通过容器来安装,直接安装在宿主机上会比较好。

安装方法如下:

# 更新系统
1、安装
apt install -y nginx
2、看版本号
nginx -v
# 显示nginx的版本号和编译信息
nginx -V
# 查看安装的所有 Nginx 包
# 查看 Nginx 安装相关的文件位置信息
whereis nginx3、启动Nginx
cd /usr/sbin/
./nginx4、查询进程:ps -ef | grep nginx
查看进程id
ps -C nginx -o pid5、检查配置是否正确
nginx -t重启命令:systemctl restart nginx6、使配置生效nginx -s reload

在 nginx 中配置前段的 dist 文件所在的路径以及域名和 https 即可完成反向代理。意味着你就可以直接通过域名访问到网站啦

一键启动基础环境

基础环境包括 MySQL、Redis、Nacos 等,同样构建了 shell 脚本方便一键启动。

# 进去目录
cd /安装路径/pmhub/docker# 启动基础环境(必须)
sh deploy.sh base

其实内部也就是几个 docker-compose 启动命令:

# 启动基础环境(必须)
base(){docker-compose up -d pmhub-mysql pmhub-redis pmhub-nacos
}

一键启动应用服务

同里,我们将需要一次性启动的几个服务放在一键启动脚本中即可一键启动,但是如果服务器 CPU 核数不足,不建议一次启动过多服务,否则直接就会把服务器搞咋了,推荐还是单个服务启动并观察内存使用情况。

docker-compose up -d 你要启动的服务

扩展:jar 包启动

如果在本地或者不想通过 docker 的方式启动,也完全可以用 jar 的方式启动,但并不推荐,一来比较慢,二来不方便。

举个例子,需要启动 pmhub-gateway:

# 定位到jar目录
cd /你的安装目录/pmhub/docker/pmhub/gateway/jar# 后台启动
java -jar pmhub-gateway.jar & # 查看是否启动
netstat -tuln | grep 6880
或者
ps aux | grep pmhub-gateway.jar# 如何关闭服务
kill 12345

至此,在服务器上部署上线服务就已经完成,但还有不少的细节,比如域名如何配置啊,如何进行 ssl 解析啊,如何进行 CI/CD 自动化部署啊,这些其实都需要自己手动去玩了才能搞明白。

如果是在大公司,上线流程其实还更复杂,一个优秀的程序员一定是懂的上线的流程的,我想这可能是面试官为什么对未上线项目这么在意的一些原因吧(个人观点)。

ending

历经几个月时间,我们的的首个开源项目就要上线了,这是一套基于 SpringCloud & SpringCloud Alibaba & LLM 的分布式微服务的智能项目管理系统,这个项目旨在让同学们快速掌握微服务/分布式项目的架构设计和开发流程,如果想在校招或者社招中拿到一个满意的 offer, 这个项目将是一个非常 nice 的选择。

项目包括认证、流程、项目管理、系统、网关等服务。包含了 Redis 缓存、RocketMQ 消息队列、Docker 容器化、Jenkins 自动化部署、Spring Security 安全框架、Nacos 服务注册和发现、sentinel 分布式事务、Spring Boot Actuator 服务监控、SkyWalking 链路追踪、OAuth2 统一认证、OpenFeign 服务调用,Vue3 前端框架等互联网开发中需要用到的主流技术栈,可以帮助同学们快速掌握微服务/分布式项目的核心知识点。

并且同时也是一套企业工作流的开发框架,您可以根据自身需求,快速定制出适合自己公司的企业工作流系统。

项目目前已经取得** 24 个 star** 了(每一个 star 都格外珍惜)

真希望能尽快和大家见面呀!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础1-基本指令3

上篇文章我们说到了文件,pwd,touch,mkdir等知识。 Linux基础1-基本指令2(你真的了解文件吗?)-CSDN博客 本文继续梳理其他基础命令 1.本章重点 1.删除一个空目录命令rmdir 2.删除一个文件指令rm(重要!) 3.man命令&am…

做视频号小店保证金要交多少?保证金提现条件是什么?

大家好,我是喷火龙。 做视频号小店也是需要缴纳保证金的,保证金分为类目保证金和浮动保证金。 先来说说类目保证金,类目保证金由视频号小店主体资质类型和经营商品类目决定。 类目保证金有以下三点需要注意: 1. 如果你要申请新…

CentOS 7~9 救援模式恢复root密码实战指南

在管理Linux服务器时,忘记root密码是一件棘手的事情,但幸运的是,CentOS提供了救援模式来帮助我们重置root密码。本文将详细介绍如何通过GRUB引导菜单进入紧急模式(或称为救援模式),进而恢复root用户的密码。…

Python量化交易学习——Part4:基于基本面的单因子选股策略

技术分析与基本面分析是股票价格分析最基础也是最经典的两个部分。技术分析是针对交易曲线及成交量等指标进行分析,基本面分析是基于公司的基本素质进行分析。 一般来说选股要先选行业,在选个股,之后根据技术分析选择买卖节点,因此针对行业及个股的基本面分析是选股的基础。…

# 全面解剖 消息中间件 RocketMQ-(4)

全面解剖 消息中间件 RocketMQ-(4) 一、RocketMQ 顺序消息分析 1、消息有序:指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ 可以严格的保证消息有序,可以分为分区有序或者全局有序。 2、顺序消费的原理解析 在默认的情…

vfrom二开给左边添加字段或者容器

例如,我在左侧加入一个 我的公司 字段 修改三个文件,这是文件目录 这个文件是当界面选择 简体中文 的时候,显示的 字段组件 或者 容器组件的中文名 这个文件是当界面选择 English 的时候,显示的 字段组件 或者 容器组件的英文名 把…

Spring Boot 集成 zxing 生成条形码与二维码

前面我们知道了怎么通过 使用 zxing 生成二维码以及条形码, 由于我们现在都是 web 端的项目了,那么我们看下怎么使用 Spring Boot 集成然后返回给前端展示: 工程源码 对应的工程源码我放到了这里:github源码路径,点击…

d2-crud-plus 使用小技巧(六)—— 表单下拉选择 行样式 溢出时显示异常优化

问题 vue2 elementUI d2-crud-plus,数据类型为select时,行样式显示为tag样式,但是如果选择内容过长就会出现下面这种bug,显然用户体验不够友好。 期望 代码 js export const crudOptions (vm) > {return {...columns:…

图书管理系统(https://github.com/plusmultiply0/bookmanagesystem)

特意去github找了一个用flask框架的项目,一起来学习它吧 这个系统包括很多功能:用户权限管理模块(管理员和普通用户),注册登录模块(滑块验证码功能),图书有关信息模块(借…

毫米级精度3D人脸扫描设备,助推打造元宇宙虚拟分身

在元宇宙中,虚拟分身对应的是一个三维模型,数字化的过程则是三维重建过程,通过3D人脸扫描可以通过多相机同步采集人脸部,可快速、准确地重建出真人地脸部模型及贴图,通过3D人脸扫描设备可快速重建出高逼真的虚拟分身。…

Linux系统下+jmeter分布式压测

一.配置jdk(Linux机都需配置同一个版本) 下载Linux系统的jdk,下载地址:https://repo.huaweicloud.com/java/jdk/ 下载后的jdk文件上传到 /opt目录下 进入opt目录,查看jdk文件 cd /opt ll 1.解压文件 tar xzvf jd…

真国色码上赞,科技流量双剑合璧,商家获客新纪元开启

在数字化浪潮汹涌的今天,真国色研发团队依托红玉房网络科技公司的雄厚实力,凭借科技领先的核心竞争力,推出了创新性的商家曝光引流工具——码上赞。这款工具借助微信支付与视频号已有功能,为实体商家提供了一种全新的引流获客方式,实现了科技与商业的完美融合。 科技领先,流量黑…

CSS 空间转换 动画

目录 1. 空间转换1.1 视距 - perspective1.2 空间转换 - 旋转1.3 立体呈现 - transform-style1.4 空间转换 - 缩放 2. 动画 - animation2.1 动画的基本用法2.1 animation 复合属性2.2 animation 拆分属性2.3 多组动画 正文开始 1. 空间转换 空间:是从坐标轴角度定义…

Paddle实现单目标检测

单目标检测 单目标检测(Single Object Detection)是人工智能领域中的一个重要研究方向,旨在通过计算机视觉技术,识别和定位图像中的特定目标物体。单目标检测可以应用于各种场景,如智能监控、自动驾驶、医疗影像分析等…

短视频矩阵系统搭建开发,ai智能剪辑系统,矩阵发布,一键管理多个账户

前言: 企业短视频矩阵是企业通过搭建多个短视频平台账号,形成一个多元化的内容传播网络。它旨在通过多平台内容的同步传播,实现企业品牌价值的最大化。短视频矩阵包括抖音、快手、视频号、小红书、百家号等热门短视频平台,其核心…

向日葵抓住哪三个要点,帮助企业构建专业技术支持服务体系?

售后技术支持是销售行为的延续,在存量时代企业是否能够提供优质专业的售后技术支持服务显得尤为重要,它直接关系到企业产品在市场中的口碑,进而影响企业的发展命运。 因此,企业势必需要重视技术支持服务体系的搭建,引…

【数据分享】水体分布与五级水系和流域矢量数据+2000-2022年植被指数(NDVI)数据(全国/分省/分市)

1. 数据介绍 数据分为3个层次结构,分别为省、地级市、县。其中,省级水体31个(不包含香港、台湾等), 地级市水体366个,县级市水体2847个。每一个文件夹中都包含该省、地级市或者县的水体矢量数据、行政边界…

数学建模 —— 灰色系统(4)

目录 什么是灰色系统? 一、灰色关联分析 1.1 灰色关联分析模型 1.2 灰色关联因素和关联算子集 1.2.1 灰色关联因素 1.2.2 关联算子集 1.3 灰色关联公理与灰色关联度 1.3.1 灰色关联度 1.3.2 灰色关联度计算步骤 1.4 广义关联度 1.4.1 灰色绝对关联…

一文读懂GDPR

GDPR将对人们的网络足迹、使用的APP和服务如何保护或利用这些数据产生重大影响。 下面我们将对有关GDPR人们最关心的问题进行解读。 GDPR是什么? 一般数据保护条例(General Data Protection Regulation)是一项全面的法律,赋予了…

风电Weibull+随机出力!利用ARMA模型随机生成风速+风速Weibull分布程序代码!

前言 随着能源问题日益突出,风力发电等以可再生能源为基础的发电技术越来越受到关注。建立能够正确反映实际风速特性的风速模型是研究风力发电系统控制策略以及并网运行特性的重要基础叫。由于风速的随机性和波动性,系统中的机械设备和电气设备以及电网…