96SEO 2026-02-19 22:46 38
项目上线是每位学编程同学必须掌握的基本技能。

之前我已经给大家分享过很多种上线单体项目的方法了#xff0c;今天再出一期微服务项目的部署教程#xff0c;用一种最简单的方法#xff0c;带大家轻松部署微服务项目。
项目上线是每位学编程同学必须掌握的基本技能。
之前我已经给大家分享过很多种上线单体项目的方法了今天再出一期微服务项目的部署教程用一种最简单的方法带大家轻松部署微服务项目。
本期教程我还是保持自己一贯的风格依然是保姆级教程包含了一些踩坑过程和解决方案大家跟着做就完事儿~
更推荐看视频版https://www.bilibili.com/video/BV1Cp4y1F7eA/
这个项目的核心功能是让用户能够在线选题和做题然后由系统自动判题
涉及的核心服务包括用户服务、题目服务、判题服务代码沙箱、Gateway
是一种容器技术允许开发者将应用程序和所有依赖项如代码、库、配置等制作为
镜像。
可以把镜像简单理解为软件安装包可以在不同的计算机上通过它快速安装和启动应用程序容器这些程序独立隔离地运行不受外部环境的影响。
容器的启动和协同工作。
可以在一个配置文件中集中定义所有容器以及它们的关系。
然后可以使用一行命令启动所有容器而不需要手动运行多个命令。
通常适用于把所有微服务部署在同一台服务器的场景在真实的企业级项目中往往会使用
等更专业的容器编排和自动化部署工具更方便地在多个服务器上部署容器。
强烈建议大家比起直接操作线上服务器最好是先在本地把所有的流程跑通风险更低、效率更高。
环境的同学这一阶段仔细看一遍有个印象就足够了。
可以直接拿我调试好的配置文件在服务器上部署而不用自己调试。
在部署微服务项目前首先要规划好要部署哪些服务、以及各服务的关键信息比如服务名称、版本号、占用端口号、关键配置等。
服务名称英文名端口号版本号服务类别数据库mysql3306v8环境依赖缓存redis6379v6环境依赖消息队列rabbitmq5672,
15672v3.12.6环境依赖注册中心nacos8848v2.2.0环境依赖网关服务gateway8101java
8业务服务用户服务yuoj-backend-user-service8102java
8业务服务题目服务yuoj-backend-question-service8103java
8业务服务判题服务yuoj-backend-judge-service8104java
因为在启动服务时必须要先启动环境依赖才能启动业务服务否则就会报类似
的子父模块功能进行管理的。
需要部署项目时不用针对每个子服务单独执行
想要实现这个功能需要给子父模块的依赖文件pom.xml进行一些配置主要包括
plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion${spring-boot.version}/version
plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdexecutionsexecutionidrepackage/idgoalsgoalrepackage/goal/goals/execution/executions
容器镜像构建过程的文件包括容器镜像使用的基础环境、容器内的依赖和文件、容器的配置、启动命令等。
的写法并不复杂但我还是建议大家尽量不要自己写直接去网上找个差不多的项目复制粘贴别人的
target/yuoj-backend-user-service-0.0.1-SNAPSHOT.jar
包名称},--spring.profiles.activeprod]2Maven
包名称},--spring.profiles.activeprod]此处由于我们的微服务项目可以一键打好所有子服务的
target/yuoj-backend-user-service-0.0.1-SNAPSHOT.jar
target/yuoj-backend-user-service-0.0.1-SNAPSHOT.jar
[java,-jar,/app/yuoj-backend-user-service-0.0.1-SNAPSHOT.jar,--spring.profiles.activeprod]建议先在本地利用
官方文档https://docs.docker.com/compose/compose-file/搜索现成的
服务名称分别为yuoj-backend-user-service
8102端口、yuoj-backend-question-service
8103端口、yuoj-backend-judge-service
配置文件要求这些服务网络能够连通效果还是非常不错的只要你描述地足够清楚生成的配置完全可用
脚本文件里面包含了建库、建表语句我们把它放在微服务项目根目录的
鱼皮带大家做的每个项目都提供了现成的建表语句这是一个非常好的开发习惯便于其他人快速启动你的项目。
启动的实例名称environment:MYSQL_ROOT_PASSWORD:
./mysql-init:/docker-entrypoint-initdb.d
yuoj-rabbitmqenvironment:RABBITMQ_DEFAULT_USER:
./.rabbitmq-data:/var/lib/rabbitmq
nacos/nacos-server:v2.2.0-slimcontainer_name:
./.nacos-data:/home/nacos/datanetworks:-
分别调试完上述服务后我们把所有的配置拼在一起就得到了完整的文件文件名为
启动的实例名称environment:MYSQL_ROOT_PASSWORD:
./mysql-init:/docker-entrypoint-initdb.d
yuoj-rabbitmqenvironment:RABBITMQ_DEFAULT_USER:
./.rabbitmq-data:/var/lib/rabbitmq
nacos/nacos-server:v2.2.0-slimcontainer_name:
./.nacos-data:/home/nacos/datanetworks:-
networks:mynetwork:1.5、编写业务服务配置
services:yuoj-backend-gateway:container_name:
./yuoj-backend-gatewaydockerfile:
mynetworkyuoj-backend-user-service:container_name:
yuoj-backend-user-servicebuild:context:
./yuoj-backend-user-servicedockerfile:
yuoj-backend-gatewayyuoj-backend-question-service:container_name:
yuoj-backend-question-servicebuild:context:
./yuoj-backend-question-servicedockerfile:
yuoj-backend-gatewayyuoj-backend-judge-service:container_name:
yuoj-backend-judge-servicebuild:context:
./yuoj-backend-judge-servicedockerfile:
127.0.0.1通常指向容器本身而不是宿主主机。
所以为了在容器内访问其他服务程序中应该使用服务名称而不是
数据库配置datasource:driver-class-name:
5000cloud:nacos:discovery:server-addr:
spring:cloud:nacos:discovery:server-addr:
lb://yuoj-backend-user-servicepredicates:-
yuoj-backend-question-serviceuri:
lb://yuoj-backend-question-servicepredicates:-
lb://yuoj-backend-judge-servicepredicates:-
Path/api/judge/**application:name:
yuoj-backend-gatewaymain:web-application-type:
channel.exchangeDeclare(EXCHANGE_NAME,
direct);举这个例子是为了告诉大家在程序中尽量不要写固定
用于创建测试程序用到的交换机和队列只用在程序启动前执行一次*/
{Value(${spring.rabbitmq.host:localhost})private
ConnectionFactory();factory.setHost(host);Connection
factory.newConnection();Channel
connection.createChannel();String
code_exchange;channel.exchangeDeclare(EXCHANGE_NAME,
code_queue;channel.queueDeclare(queueName,
null);channel.queueBind(queueName,
my_routingKey);log.info(消息队列启动成功);}
服务器上部署微服务项目。
有了第一阶段的准备第二阶段简直可以说是易如反掌
选择服务器前我们必须要评估下微服务项目的内存占用千万别把服务器的内存买小了
地址https://docs.docker.com/compose/migrate/
安装https://docs.docker.com/compose/install/linux/#install-using-***-repository
https://download.docker.com/linux/centos/docker-ce.repo2安装
接下来我们需要把本地折腾好的微服务项目源码上传到服务器上可以选择用
上传成功在服务器对应路径/code/yuoj-backend-microservice下能看到已上传的文件列表
包比较大频繁改动的话同步速度会比较慢所以更建议第二种方式步骤如下
先进入到云服务商的服务器配置页修改服务器的防火墙配置放通以下端口
正常来说应该会启动成功但如果运气背可能会有失败比如我这的网关服务就启动失败了。
多字的教程如果觉得本期内容有帮助的话也欢迎点赞、收藏三连支持谢谢大家
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback