个人网站开发 怎么赚钱,网页制作与网站建设pdf,手表查询网站,广州海珠区是市中心吗我们在日常开发微服务之后需要再服务器上面部署#xff0c;那么如何进行部署呢#xff0c;先把微服务的各个服务和中间件以及对应的端口列举出来#xff0c;都打包成镜像#xff0c;以及前端代码部署的nginx#xff0c;使用docker-compose启动#xff0c;访问服务器nginx…我们在日常开发微服务之后需要再服务器上面部署那么如何进行部署呢先把微服务的各个服务和中间件以及对应的端口列举出来都打包成镜像以及前端代码部署的nginx使用docker-compose启动访问服务器nginx端口就部署完成了大致如下
1.首先需要对多个服务进行打成jar包放到服务器上
微服务一般maven文件有一个父类的pom.xml需要将pom.xml删除在子类加上不然会找不到主类
packagingjar/packaging !--打包成jar包--
在maven的插件中配置如下 就是repackage这个配置父类删除都加到子类中之后右键maven的选项 点击package进行打包打包成功之后会显示jar包的路径可以使用java-jar命令测试能不能跑起来没出错就可以了
2.制作服务镜像成功会一个tar的docke镜像包可转移
将jar包放到linux中/dabaomao/my-images/这个目录中测试一下java-jar能不能跑
如果需要的话可以加上8080端口访问镜像内部为映射端口
java-jar -Dserver.port8080 jar包名称
之后在创建一个DockerFile文件注意没有前缀
# 使用一个基础镜像
FROM openjdk:8-jdk-alpine
# 将jar1.jar复制到镜像中的工作目录
# COPY jar1.jar /my-images/jar1.jar 我们已经移到了暂时不需要,注释掉
# 设置工作目录
WORKDIR /dabaomao/my-images
# 暴露端口
EXPOSE 18080
# 设置时区
ENV TZAsia/Shanghai
# 运行jar文件
CMD [java, -jar, jar1.jar]
之后返回/dabaomao目录执行命令创建镜像my-image
docker build -t my-image:1.0 /dabalmao/my-images/
之后会出现下载进度成功之后就可以启动镜像容器myjar
docker build -t 镜像名称:标签 Dockerfile路径
docker run -d -p --name myjar 8080:18080 my-image:1.0
注意18080是我们程序的jar包对外的端口也就是映射端口是springboot的yml设置的属于映射端口需要输入真正端口8080访问上面java-jar同理
之后使用docker ps查看容器是否存在即可
3.使用docker-compose同时启动
# docker-compose.yml 文件
version: 3 # 指定 Docker Compose 的版本
# 定义 MySQL 服务
services:#自己服务jar包的镜像myjar:image: my-imgae:1.0 #自定义镜像名称container_name: my-mysql # 指定容器的名字environment: #设置时区- TZAsia/Shanghaiports:- 18080:18080networks: # 指定网络- network1 # 将服务连接到network网络上mysql:# 使用官方的 MySQL 镜像image: mysql:5.7# 设置环境变量用于配置 MySQLenvironment:MYSQL_ROOT_PASSWORD: rootpasswordcontainer_name: my-mysql # 指定容器的名字# 暴露端口 3306供外部访问ports:- 3306:3306# 定义数据卷用于持久化 MySQL 数据库文件volumes:- mysql_data:/var/lib/mysqlrestart: always # 容器退出时总是重启networks: # 指定网络- network1 # 将服务连接到network网络上redis:# 使用官方的 Redis 镜像image: redis:latest# 暴露端口 6379供外部访问ports:- 6379:6379container_name: my-redis # 指定容器的名字restart: always # 容器退出时总是重启networks: # 指定网络- network1 # 将服务连接到network网络上nacos:# 使用官方的 Nacos 镜像image: nacos/nacos-server:latest# 暴露端口 8848供外部访问ports:- 8848:8848container_name: my-nacos # 指定容器的名字restart: always # 容器退出时总是重启networks: # 指定网络- network1 # 将服务连接到network网络上# 定义网络所有服务都使用同一个自定义网络
networks: # 定义网络network1: # 定义一个名为network的网络
注意启动顺序要先启动依赖配置服务在启动业务服务建议写两个docker-compose文件先启动mysqlredis中间件的容器再启动各个服务还有就是depends_on:这个只能决定服务启动顺序不能保证一个服务启动完再启动下一个服务
4.包含nginx流量网关也可以使用docker部署可以实现多个端口负载均衡nginx内部一般用于启动前端代码进行访问
使用run直接期待nginx不推荐
docker run --name nginx -it -d -p 80:80 nginx:latest /bin/bash
部署前端代码进入目录conf/nginx.conf打开这个文件找到这里
server {# 前端程序运行端口# 注释前端程序运行端口listen 80;# 前端程序运行ip# 注释前端程序运行ipserver_name localhost;# 前端代码vue使用dist需要index.html会开头# 注释前端代码vue使用dist需要index.html会开头root /usr/share/nginx/html;# 加载配置文件以使用默认服务器块。# Load configuration files for the default server block.# 注释加载配置文件以使用默认服务器块。include /etc/nginx/default.d/*.conf;location / {proxy_pass http://jar;#通过代理转到jar进行负载均衡}error_page 404 /404.html;location /40x.html {# 如果请求的错误页面是404则返回404.html文件。# 如果请求的错误页面是40x.html则不做任何处理。# 注释如果请求的错误页面是404则返回40x.html文件。# 如果请求的错误页面是50x.html则不做任何处理。}error_page 500 502 503 504 /50x.html;location /50x.html {# 如果发生5xx错误例如500内部服务器错误则返回50x.html文件。# 如果请求的错误页面是50x.html则不做任何处理。# 注释如果发生错误例如内部服务器错误则返回5xx.html文件。}
}
Upstream jar{
#负载均衡server 192.168.30.137:18080server 192.168.30.137:18081
}
这样就绑定成功了,前端端口为80可以访问后端18080和18081的端口api并是轮训的方式
不只是轮训权重的话如下修改完成后记得重启
Upstream jar{
#负载均衡
#后端服务端口server 192.168.30.137:18080 weight10server 192.168.30.137:18081 weight5
#根据概率权重为2:1
}
之后再docker-compose启动的时候也加上
# docker-compose.yml 文件
version: 3 # 指定 Docker Compose 的版本# 定义 Nginx 服务
services:nginx:# 使用官方的 Nginx 镜像image: nginx:latest# 设置容器的工作目录working_dir: /usr/share/nginx/html# 暴露端口 80供外部访问container_name: nginx # 指定容器的名字ports:- 80:80# 定义数据卷用于持久化 Nginx 配置和静态文件volumes:- ./nginx.conf:/etc/nginx/nginx.conf:ro # 宿主机上的 nginx.conf 文件- ./html:/usr/share/nginx/html:ro # 宿主机上的 HTML 目录restart: on-failure # 容器退出时如果是因为错误导致的则重启容器restart: always # 总是在容器退出时重启容器networks: # 指定网络- network1 # 将服务连接到network网络上networks: # 定义网络network1: # 定义了一个名为network的网络
之后nginx进行扩容gateway的地址访问nginx的对外端口即可
大致就这些环节了如果服务部署在多个服务器那么需要使用k8s进行集中管理哪个环节出错可以使用gpt或者博客了解