后端部署
一:Idea提交到镜像仓库/服务器 -> docker部署
1、pom平级新增Dockerfile
FROM eclipse-temurin:8u345-b01-jdk-centos7
LABEL org.opencontainers.image.author="author"
RUN mkdir -p /gateway
WORKDIR /gateway
ARG JAR_FILE=target/gateway.jar
COPY ${JAR_FILE} app.jar
EXPOSE 9999
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
CMD java -jar app.jar ${JAVA_OPTS}
2、补充本地pom文件中Docker配置
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker.plugin.version}</version>
<configuration>
<!-- Docker Remote Api-->
<dockerHost>${docker.host}</dockerHost>
<!-- Docker 镜像私服-->
<registry>${docker.registry}</registry>
<!-- <pushRegistry>${docker.registry}</pushRegistry>-->
<!-- 认证信息-->
<authConfig>
<push>
<username>${docker.username}</username>
<password>${docker.password}</password>
</push>
</authConfig>
<images>
<image>
<!-- 镜像名称: 172.17.0.111/library/pig-gateway:2.6.3-->
<name>${docker.registry}/${docker.namespace}/${project.name}:${project.version}</name>
<build>
<dockerFile>${project.basedir}/Dockerfile</dockerFile>
</build>
</image>
</images>
</configuration>
</plugin>
// 此方法为直接推送到服务器 镜像名称为:registry/namespace/gateway
<properties>
<docker.plugin.version>0.32.0</docker.plugin.version>
<docker.host>http://192.168.1.196:5678</docker.host>
<docker.registry>registry</docker.registry>
<docker.namespace>namespace</docker.namespace>
</properties>
// 此方法为直接推送到服务器及docker镜像仓库中 镜像名称为:registry/namespace/gateway
<properties>
<docker.plugin.version>0.32.0</docker.plugin.version>
<docker.host>http://192.168.1.196:5678</docker.host>
<docker.registry>registry</docker.registry>
<docker.namespace>namespace</docker.namespace>
<docker.username>admin</docker.username>
<docker.password>admin123</docker.password>
</properties>
docker.host:提供的docker环境 -> docker build 后会直接保存到这个服务器中
3、修改生产nacos仓库的连接信息(生产/测试/灰度)
spring:
cloud:
nacos:
username: prod # TODO 根据实际情况修改
password: prod # TODO 根据实际情况修改
discovery:
server-addr: nacos-server-01:8848 nacos-server-02:8848 nacos-server-03:8848
namespace: 2485a6bf-e71e-45fa-99c1-367828c74b53 # TODO 根据实际情况修改
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: 2485a6bf-e71e-45fa-99c1-367828c74b53 # TODO 根据实际情况修改
3、本地项目编译加载代码
4、docker本地打包并提交镜像
5、服务器查看docker账号中是否包含镜像
启动方式1:docker run方式
# 服务器登录docker:
docker login --username=888888@126.com registry.cn-hangzhou.aliyuncs.com -p mima1234
# 密码
password=mima1234
# 查看镜像是否存在:
docker images
# ==========直接启动方式================
docker run -d -p 9999:9999 --name test xxxx
docker run:基于镜像启动一个容器
-d:后台方式启动
-p 9090:80: 端口映射,将宿主机的9090端口映射到容器的80端口
--name:容器名
xxxx:要启动的镜像名称
#=========第二种 指定容器内的环境变量 启动两台======================
#启动镜像
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.7.0
--name表示镜像启动后的容器名称
-d: 后台运行容器,并返回容器ID;
-e: 指定容器内的环境变量
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
启动方式2:
#准备:docker-compose.yml
#在包含compose文件夹中启动容器 docker compose up 容器 -d
docker compose up gateway -d
docker-compose.yml
version: '3'
services:
gateway:
image: gateway
restart: always
extra_hosts:
- mysql:172.21.199.54
- register:172.21.199.54
ports:
- "9999:9999"
container_name: gateway
hostname: gateway
二、服务器拉取代码直接部署
1、找到代码存放目录->git拉取新提交代码
git pull
2、maven编译项目
mvn clean install -Dmaven.test.skip=true -Ptest
3、新建镜像及容器(代码内包含dockerfile文件)
docker compose build gateway
4、启动容器(文件夹内包含docker-compose.yml)
docker compose up gateway -d
三、idea部署
前端部署流程
1、外网项目部署流程
1、准备资料:
将以下(除了nginx镜像)都放到一个新建的文件夹中
- 前端dist包
- default.conf配置文件
- docker-compose.yml配置
- Dockerfile 打包配置
- nginx镜像
default.conf
注意:
proxy_pass http://192.168.1.166:9999;
地址必须为写死的服务器地址
server {
listen 80;
server_name localhost;
client_max_body_size 5M;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /sys/$uri /index.html;
}
# 后端服务入口:注意维护新增微服务,gateway 路由前缀
location ~* ^/(code|auth|admin|gen|inst|order|project) {
proxy_pass http://192.168.1.166:9999;
#proxy_set_header Host $http_host;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
# 避免端点安全问题
if ($request_uri ~ "/actuator"){
return 403;
}
}
docker-compose.yml
version: '3'
services:
admin-ui:
image: admin-ui #镜像名称
privileged: true
restart: always
container_name: admin-ui #容器名称
networks:
- pig_default
external_links:
- pig-gateway
ports:
- 80:80
# 加入到后端网络, 默认为 pig_default | docker network ls 查看
networks:
pig_default:
external: true
Dockerfile
注意:
FROM admin-nginx:latest
必须为nginx镜像名称
FROM admin-nginx:latest
MAINTAINER admin # 维护者信息
# 将项目根目录下dist文件夹下的所有文件复制到镜像中 /usr/share/nginx/html/ 目录下
COPY admin-ui/ /usr/share/nginx/html/
COPY default.conf /etc/nginx/conf.d/default.conf
2、开始部署
1、进入文件夹
cd /home/hc
2、打包前端镜像
docker build -t admin-ui .
3、启动容器
docker run -d -p 80:80 --name admin-ui admin-ui
4、启动成功
参考:Docker镜像+Nginx配置部署 Vue 项目
2、镜像版本部署流程:
参考:镜像打包
1、原先的服务器镜像打包:
1、准备好需要打包的镜像及文件夹(参考外网部署流程第一步)
2、打包:docker save -o admin-ui.tar admin-ui(通过nginx部署的需要把nginx也打包放上去)
2、只需要将打包好的镜像放到新的服务器上
通过解压缩镜像命令 docker load <