Spring-Cloud 微服务 Docker 部署

1 篇文章 0 订阅
1 篇文章 0 订阅

Spring-Cloud 微服务 Docker 部署

1-介绍

基于SpringBoot | Spring Cloud & Alibaba | Mybatis-Plus | Vue3 | vite2 | TypeScript | Ant-Design-Vue UI的多租户SaaS开发框架

2-特性

  • 多重隔离控制:物理隔离&&逻辑隔离,共享多租户&&隔离多租户

  • 动态多源策略:动态源增减&&租户动态识别源

  • 租户控制优化:通用数据&&混合租户&&独立租户多种租户模式,自动拦截,开发无感知

  • 权限控制优化:部门&&岗位&&用户多级可控,自动拦截,开发无感知

  • 租户可配菜单:多种混合模式控制租户菜单

  • 组织管理优化:更完善的组织架构操作与管理逻辑

  • 微聚合多前端:公共抽离,降低系统重复冗余


3-系统需求

需求版本
JDK>=17
Mysql>=8.0+
Redis>=3.0
Maven>=3.0
Node>=16
nacos>=2.0.0
sentinel>=1.6.0

4-项目打包

4.1-后端打包

4.1.1-执行打包脚本
打包时建议通过idea | EclipseMaven进行打包,package.bat偶尔会出现莫名bug 不同模块版本会生成在xueyi/xueyi-xxxx模块下target文件夹
@echo off
echo.
echo [信息] 打包Web工程,生成war/jar包文件。
echo.

%~d0
cd %~dp0

cd ..
call mvn clean package -Dmaven.test.skip=true

pause

4.2-前端打包

4.2.1-执行打包脚本
构建打包成功之后,会在对应模块的根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 ***.js 、***.css、index.html 等静态文件。
@echo off
echo.
echo [信息] 打包Web工程,生成dist文件。
echo.

%~d0
cd %~dp0

cd ..
npm run build:prod

pause

5-项目部署

5.1-执行复制脚本

#!/bin/sh

# 复制项目的文件到对应docker路径,便于一键生成镜像。
usage() {
	echo "Usage: sh copy.sh"
	exit 1
}

# copy sql
echo "begin copy sql "
cp ../sql/quartz.sql ./mysql/db
cp ../sql/xueyi_1.sql ./mysql/db
cp ../sql/xueyi_2.sql ./mysql/db
cp ../sql/xy_config.sql ./mysql/db

# copy html
echo "begin copy html "
cp -r ../xueyi-ui/main/dist/** ./nginx/html/main
cp -r ../xueyi-ui/administrator/dist/** ./nginx/html/administrator


# copy jar
echo "begin copy xueyi-gateway "
cp ../xueyi-gateway/target/xueyi-gateway.jar ./xueyi/gateway/jar

echo "begin copy xueyi-auth "
cp ../xueyi-auth/target/xueyi-auth.jar ./xueyi/auth/jar

echo "begin copy xueyi-visual "
cp ../xueyi-visual/xueyi-monitor/target/xueyi-visual-monitor.jar  ./xueyi/visual/monitor/jar

echo "begin copy xueyi-modules-system "
cp ../xueyi-modules/xueyi-system/target/xueyi-modules-system.jar ./xueyi/modules/system/jar

echo "begin copy xueyi-modules-tenant "
cp ../xueyi-modules/xueyi-tenant/target/xueyi-modules-tenant.jar ./xueyi/modules/tenant/jar

echo "begin copy xueyi-modules-file "
cp ../xueyi-modules/xueyi-file/target/xueyi-modules-file.jar ./xueyi/modules/file/jar

echo "begin copy xueyi-modules-job "
cp ../xueyi-modules/xueyi-job/target/xueyi-modules-job.jar ./xueyi/modules/job/jar

echo "begin copy xueyi-modules-gen "
cp ../xueyi-modules/xueyi-gen/target/xueyi-modules-gen.jar ./xueyi/modules/gen/jar

echo "begin copy xueyi-modules-sample "
cp ../xueyi-modules/xueyi-sample/target/xueyi-modules-sample.jar ./xueyi/modules/sample/jar

echo "begin copy xueyi-modules-sms "
cp ../xueyi-modules/xueyi-sms/target/xueyi-modules-sms.jar ./xueyi/modules/sms/jar

5.2-编写配置文件

docker-compose.yml
Docker Compose 使用的一个步骤为:
	使用 Dockerfile 文件定义应用程序的环境
	使用 docker-compose.yml 文件定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
	执行 docker-compose up 命今来创建并启动所有服务。
三者关系:
    deploy.sh -> docker-compose.yml -> Dockerfile
5.2.1-docker-compose.yml
version : '3.8'
services:
 xueyi-nacos:
   container_name: xueyi-nacos
   image: nacos/nacos-server
   build:
     context: nacos
   environment:
     - MODE=standalone
   volumes:
     - ./docker/nacos/logs/:/home/nacos/logs
     - ./docker/nacos/conf/application.properties:/home/nacos/conf/application.properties
   ports:
     - "8848:8848"
     - "9848:9848"
     - "9849:9849"
   # depends_on:
     # - xueyi-mysql
   # links:
     # - xueyi-mysql
 # xueyi-mysql:
   # container_name: xueyi-mysql
   # image: mysql:8.0.26
   # build:
     # context: sql
     # dockerfile: Dockerfile
   # ports:
     # - "3306:3306"
   # volumes:
     # - ./docker/mysql/conf:/etc/mysql/conf.d
     # - ./docker/mysql/logs:/logs
     # - ./docker/mysql/data:/var/lib/mysql
   # command: [
         # 'mysqld',
         # '--innodb-buffer-pool-size=80M',
         # '--character-set-server=utf8mb4',
         # '--collation-server=utf8mb4_unicode_ci',
         # '--default-time-zone=+8:00',
         # '--lower-case-table-names=1'
       # ]
   # environment:
     # MYSQL_DATABASE: 'xy-cloud'
     # MYSQL_ROOT_PASSWORD: '123456'
 xueyi-redis:
   container_name: xueyi-redis
   image: redis
   build:
     context: redis
   ports:
     - "6379:6379"
   volumes:
     - ./docker/redis/conf/redis.conf:/home/xueyi/redis/redis.conf
     - ./docker/redis/data:/data
   command: redis-server /home/xueyi/redis/redis.conf
 xueyi-gateway:
    container_name: xueyi-gateway
    build:
      context: ./xueyi/gateway
      dockerfile: ./Dockerfile
    ports:
      - "8080:8080"
   # depends_on:
     # - xueyi-nacos
     # - xueyi-redis
   # links:
     # - xueyi-nacos
     # - xueyi-redis
 xueyi-auth:
    container_name: xueyi-auth
    build:
      context: ./xueyi/auth
      dockerfile: ./Dockerfile
    ports:
      - "9200:9200"
#    depends_on:
#      - xueyi-nacos
#      - xueyi-redis
#    links:
#      - xueyi-nacos
#      - xueyi-redis
 xueyi-modules-tenant:
    container_name: xueyi-modules-tenant
    build:
      context: ./xueyi/modules/tenant
      dockerfile: ./Dockerfile
    ports:
      - "9700:9700"
#    depends_on:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
#    links:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
 xueyi-modules-system:
    container_name: xueyi-modules-system
    build:
      context: ./xueyi/modules/system
      dockerfile: ./Dockerfile
    ports:
      - "9600:9600"
#    depends_on:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
#    links:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
 xueyi-modules-gen:
    container_name: xueyi-modules-gen
    build:
      context: ./xueyi/modules/gen
      dockerfile: ./Dockerfile
    ports:
      - "9400:9400"
#    depends_on:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
#    links:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
 xueyi-modules-job:
    container_name: xueyi-modules-job
    build:
      context: ./xueyi/modules/job
      dockerfile: ./Dockerfile
    ports:
      - "9500:9500"
#    depends_on:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
#    links:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
 xueyi-modules-file:
    container_name: xueyi-modules-file
    build:
      context: ./xueyi/modules/file
      dockerfile: ./Dockerfile
    ports:
      - "9300:9300"
    volumes:
    - ./xueyi/uploadPath:/home/xueyi/uploadPath
 xueyi-visual-monitor:
    container_name: xueyi-visual-monitor
    build:
      context: ./xueyi/visual/monitor
      dockerfile: ./Dockerfile
    ports:
      - "9100:9100"
 xueyi-modules-sample:
    container_name: xueyi-modules-sample
    build:
      context: ./xueyi/modules/sample
      dockerfile: ./Dockerfile
    ports:
      - "9900:9900"
      #    depends_on:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
#    links:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
 xueyi-modules-sms:
    container_name: xueyi-modules-sms
    build:
      context: ./xueyi/modules/sms
      dockerfile: ./Dockerfile
    ports:
      - "9901:9901"
      #    depends_on:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
#    links:
#      - xueyi-nacos
#      - xueyi-redis
#      - xueyi-mysql
 xueyi-nginx:
    container_name: nginx
    image: nginx
    build:
      context: ./nginx
      dockerfile: ./Dockerfile
    ports:
      - "80:80"
    volumes:
      - ./nginx/html/main/dist:/docker/nginx/html/main
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./logs/nginx:/var/log/nginx
      - ./nginx/conf.d:/etc/nginx/conf.d
    # depends_on:
      # - xueyi-gateway
    # links:
      # - xueyi-gateway
5.2.2-deploy.sh
#!/bin/sh

# 使用说明,用来提示输入参数
usage() {
	echo "Usage: sh 执行脚本.sh [port|base|modules|monitor|nginx|stop|rm]"
	exit 1
}

# 开启所需端口
port(){
	firewall-cmd --add-port=80/tcp --permanent
	firewall-cmd --add-port=81/tcp --permanent
	firewall-cmd --add-port=8080/tcp --permanent
	firewall-cmd --add-port=8848/tcp --permanent
	firewall-cmd --add-port=9848/tcp --permanent
	firewall-cmd --add-port=9849/tcp --permanent
	firewall-cmd --add-port=6379/tcp --permanent
	firewall-cmd --add-port=15672/tcp --permanent
	firewall-cmd --add-port=4369/tcp --permanent
	firewall-cmd --add-port=5672/tcp --permanent
	firewall-cmd --add-port=25672/tcp --permanent
	firewall-cmd --add-port=3306/tcp --permanent
	firewall-cmd --add-port=9100/tcp --permanent
	firewall-cmd --add-port=9200/tcp --permanent
	firewall-cmd --add-port=9300/tcp --permanent
	firewall-cmd --add-port=9400/tcp --permanent
	firewall-cmd --add-port=9500/tcp --permanent
	firewall-cmd --add-port=9600/tcp --permanent
	firewall-cmd --add-port=9700/tcp --permanent
	firewall-cmd --add-port=9900/tcp --permanent
	firewall-cmd --add-port=9901/tcp --permanent
	service firewalld restart
}

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

# 启动程序模块(必须)
modules(){
	docker-compose up -d xueyi-gateway xueyi-auth xueyi-modules-system xueyi-modules-tenant
}

# 启动程序模块 | 次要 | 根据需求启动
monitor(){
	docker-compose up -d xueyi-modules-file xueyi-modules-gen xueyi-modules-job xueyi-visual-monitor xueyi-modules-sample xueyi-modules-sms
}
# 启动程序模块(必须)
nginx(){
	docker-compose up -d xueyi-nginx
}

# 关闭所有环境/模块
stop(){
	docker-compose stop
}

# 删除所有环境/模块
rm(){
	docker-compose rm
}

# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"port")
	port
;;
"base")
	base
;;
"modules")
	modules
;;
"monitor")
	monitor
;;
"nginx")
	nginx
;;
"stop")
	stop
;;
"rm")
	rm
;;
*)
	usage
;;
esac
5.2.3-dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
5.2.3.1-nacos
# 基础镜像
FROM nacos/nacos-server
# author
MAINTAINER xueyi

# 复制conf文件到路径
COPY ./conf/application.properties /home/nacos/conf/application.properties
5.2.3.2-redis
# 基础镜像
FROM redis
# author
MAINTAINER xueyi

# 挂载目录
VOLUME /home/xueyi/redis
# 创建目录
RUN mkdir -p /home/xueyi/redis
# 指定路径
WORKDIR /home/xueyi/redis
# 复制conf文件到路径
COPY ./conf/redis.conf /home/xueyi/redis/redis.conf
5.2.3.3-auth
# 基础镜像
FROM openjdk:17-oracle
# author
MAINTAINER xueyi

# 挂载目录
VOLUME /home/xueyi
# 创建目录
RUN mkdir -p /home/xueyi
# 指定路径
WORKDIR /home/xueyi
# 复制jar文件到路径
COPY ./target/xueyi-auth.jar /home/xueyi/xueyi-auth.jar

# 启动auth服务
ENTRYPOINT ["java","-jar","xueyi-auth.jar"]
5.2.3.4-gateway
# 基础镜像
FROM openjdk:17-oracle
# author
MAINTAINER xueyi

# 挂载目录
VOLUME /home/xueyi
# 创建目录
RUN mkdir -p /home/xueyi
# 指定路径
WORKDIR /home/xueyi
# 复制jar文件到路径
COPY ./target/xueyi-gateway.jar /home/xueyi/xueyi-gateway.jar

# 启动网关服务
ENTRYPOINT ["java","-jar","xueyi-gateway.jar"]
5.2.3.5-system
# 基础镜像
FROM openjdk:17-oracle
# author
MAINTAINER xueyi

# 挂载目录
VOLUME /home/xueyi
# 创建目录
RUN mkdir -p /home/xueyi
# 指定路径
WORKDIR /home/xueyi
# 复制jar文件到路径
COPY ./target/xueyi-modules-system.jar /home/xueyi/xueyi-modules-system.jar

# 启动系统服务
ENTRYPOINT ["java","-jar","xueyi-modules-system.jar"]
5.2.3.6-tenant
# 基础镜像
FROM openjdk:17-oracle
# author
MAINTAINER xueyi

# 挂载目录
VOLUME /home/xueyi
# 创建目录
RUN mkdir -p /home/xueyi
# 指定路径
WORKDIR /home/xueyi
# 复制jar文件到路径
COPY ./target/xueyi-modules-tenant.jar /home/xueyi/xueyi-modules-tenant.jar

# 启动系统服务
ENTRYPOINT ["java","-jar","xueyi-modules-tenant.jar"]
5.2.3.7-nginx
# 基础镜像
FROM nginx
# author
MAINTAINER xueyi

# 挂载目录
VOLUME /docker/nginx/html
# 创建目录
RUN mkdir -p /docker/nginx/html
# 指定路径
WORKDIR /docker/nginx/html
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/main/dist /docker/nginx/html/main
5.2.3.7.1-nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  192.168.92.128;
        charset utf-8;

        location ^~ /prod-api/{
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://xueyi-gateway:8080/;
			error_page 405 =200 http://$host$request_uri;
		}
		
		location / {
            root   /docker/nginx/html/main;
			try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
           root   html;
        }
    }
}

5.3-命令行操作

5.3.1-添加权限
[root@localhost docker]# chmod +x deploy.sh
5.3.2-开放微服务端口
[root@localhost docker]# ./deploy.sh port
5.3.3-启动环境
5.3.3.1-启动base环境
[root@localhost docker]# ./deploy.sh base
5.3.3.2-启动modules环境
[root@localhost docker]# ./deploy.sh modules
5.3.3.3-启动nginx环境
[root@localhost docker]# ./deploy.sh nginx
5.3.4-查看命令
-查看镜像:
	docker images

-查看正在运行的容器
	docker ps

-查看已运行过的容器
	docker ps -a

-进入容器
	docker exec -it 容器名/容器id bash
5.3.5-删除命令
删除顺序:
	1-停止容器:     docker stop 容器名/容器id
	2-删除容器:     docker rm 容器名/容器id
	3-删除镜像:     docker rmi 镜像名/镜像id
5.3.5-关闭所有环境/模块
[root@localhost docker]# ./deploy.sh stop
5.3.5-删除所有环境/模块
[root@localhost docker]# ./deploy.sh rm
5.3.5-提示输入参数
[root@localhost docker]# ./deploy.sh usage

.3.2-启动modules环境

[root@localhost docker]# ./deploy.sh modules
5.3.3.3-启动nginx环境
[root@localhost docker]# ./deploy.sh nginx
5.3.4-查看命令
-查看镜像:
	docker images

-查看正在运行的容器
	docker ps

-查看已运行过的容器
	docker ps -a

-进入容器
	docker exec -it 容器名/容器id bash
5.3.5-删除命令
删除顺序:
	1-停止容器:     docker stop 容器名/容器id
	2-删除容器:     docker rm 容器名/容器id
	3-删除镜像:     docker rmi 镜像名/镜像id
5.3.5-关闭所有环境/模块
[root@localhost docker]# ./deploy.sh stop
5.3.5-删除所有环境/模块
[root@localhost docker]# ./deploy.sh rm
5.3.5-提示输入参数
[root@localhost docker]# ./deploy.sh usage
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinyi_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值