Spring Cloud部署篇2——Docker Compose部署至CentOS云服务器

一、项目介绍

系统模块

com.mingink
|--mingink-api            // 接口模块
|           └──mingink-api-system               // 系统接口
|--mingink-common         // 通用模块
|           └──mingink-common-core              // 系统接口
|--mingink-gateway        // 网关模块【8081】
|--mingink-modules        // 业务模块
|           └──mingink-modules-system                   // 系统服务模块【8082】
|           └──mingink-modules-article                  // 文章服务模块【8083】
|--pom.xml                                      // 公共依赖

技术选型

开发框架:Spring Cloud
网关:Gateway
配置中心:Nacos
缓存:Redis
数据库:MySQL

目的

本次部署的是基于Spring Cloud的微服务项目,需要将现有的gateway网关模块、mingink-system系统服务模块、mingink-article文章服务模块分别打成Jar,上传到CentOS云服务器,再使用docker compose进行快速部署。

部署流程

  1. Docker 和 Docker Compose安装
  2. 环境部署
  3. 文件同步
  4. 打包
  5. 服务部署
  6. 测试访问

二、Docker 和 Docker Compose安装

Docker

参考:Centos安装docker
(1)安装 yum 工具

yum install yum-utils -y

(2)配置 yum 源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(3)安装 docker

yum install -y docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io

(4)启动 docker 并且设置开机启动

systemctl start docker
systemctl enable docker

(5)测试 docker

docker -v

在这里插入图片描述

Docker Compose

(1)安装 docker-compose-plugin

yum install docker-compose-plugin

(2)重启docker

systemctl restart docker

(3)测试 docker compose

docker compose version

在这里插入图片描述

三、环境部署

在部署项目服务之前,需要使用 docker compose 将项目所依赖的服务都配置好(这样将项目迁移到另一台服务器也十分方便)。在 Spring Cloud 项目中,以最常用到的 Mysql 8.0.11、Redis 6.2.14 和 Nacos 2.2.3 为例来准备相应 Docker Compose 文件。

3.1 MySQL

首先我们需要准备好需要的库表结构(包括项目业务数据库 mingink 和 Nacos 配置数据库 nacos_config),放在微服务项目根目录 mysql-init 文件夹中:在这里插入图片描述
项目数据库建表语句就根据项目需求自行完成,这里给出 nacos_config 的建表语句(也可以在官网找):

-- 创建库
create database if not exists nacos_config;

-- 切换库
use nacos_config;

-- 创建表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for config_info
-- ----------------------------
create table if not exists config_info (
                                `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
                                `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
                                `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
                                `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5',
                                `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
                                `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
                                `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
                                `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
                                `c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                `c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                `effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                `c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL,
                                `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '秘钥',
                                PRIMARY KEY (`id`) USING BTREE,
                                UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 47 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for config_info_aggr
-- ----------------------------
create table if not exists config_info_aggr  (
                                     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
                                     `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
                                     `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
                                     `datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'datum_id',
                                     `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '内容',
                                     `gmt_modified` datetime NOT NULL COMMENT '修改时间',
                                     `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                     `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
                                     PRIMARY KEY (`id`) USING BTREE,
                                     UNIQUE INDEX `uk_configinfoaggr_datagrouptenantdatum`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC, `datum_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '增加租户字段' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for config_info_beta
-- ----------------------------
create table if not exists config_info_beta  (
                                     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
                                     `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
                                     `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
                                     `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
                                     `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
                                     `beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'betaIps',
                                     `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5',
                                     `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                     `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
                                     `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
                                     `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
                                     `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
                                     `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '秘钥',
                                     PRIMARY KEY (`id`) USING BTREE,
                                     UNIQUE INDEX `uk_configinfobeta_datagrouptenant`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_beta' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for config_info_tag
-- ----------------------------
create table if not exists config_info_tag  (
                                    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
                                    `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
                                    `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
                                    `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
                                    `tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_id',
                                    `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
                                    `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content',
                                    `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5',
                                    `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                    `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
                                    `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user',
                                    `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip',
                                    PRIMARY KEY (`id`) USING BTREE,
                                    UNIQUE INDEX `uk_configinfotag_datagrouptenanttag`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC, `tag_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_tag' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for config_tags_relation
-- ----------------------------
create table if not exists config_tags_relation  (
                                         `id` bigint(20) NOT NULL COMMENT 'id',
                                         `tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_name',
                                         `tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tag_type',
                                         `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id',
                                         `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id',
                                         `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
                                         `nid` bigint(20) NOT NULL AUTO_INCREMENT,
                                         PRIMARY KEY (`nid`) USING BTREE,
                                         UNIQUE INDEX `uk_configtagrelation_configidtag`(`id` ASC, `tag_name` ASC, `tag_type` ASC) USING BTREE,
                                         INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relation' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for group_capacity
-- ----------------------------
create table if not exists group_capacity  (
                                   `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
                                   `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
                                   `quota` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值',
                                   `usage` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量',
                                   `max_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
                                   `max_aggr_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数,,0表示使用默认值',
                                   `max_aggr_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
                                   `max_history_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量',
                                   `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                   `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
                                   PRIMARY KEY (`id`) USING BTREE,
                                   UNIQUE INDEX `uk_group_id`(`group_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '集群、各Group容量信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for his_config_info
-- ----------------------------
create table if not exists his_config_info  (
                                    `id` bigint(20) UNSIGNED NOT NULL,
                                    `nid` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
                                    `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
                                    `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
                                    `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name',
                                    `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
                                    `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                    `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
                                    `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
                                    `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL,
                                    `src_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                    `op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
                                    `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段',
                                    `encrypted_data_key` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '秘钥',
                                    PRIMARY KEY (`nid`) USING BTREE,
                                    INDEX `idx_gmt_create`(`gmt_create` ASC) USING BTREE,
                                    INDEX `idx_gmt_modified`(`gmt_modified` ASC) USING BTREE,
                                    INDEX `idx_did`(`data_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 61 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '多租户改造' ROW_FORMAT = Dynamic;


-- ----------------------------
-- Table structure for permissions
-- ----------------------------
create table if not exists permissions  (
                                `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
                                `resource` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
                                `action` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
                                UNIQUE INDEX `uk_role_permission`(`role` ASC, `resource` ASC, `action` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for roles
-- ----------------------------
create table if not exists roles  (
                          `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
                          `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
                          UNIQUE INDEX `idx_user_role`(`username` ASC, `role` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for tenant_capacity
-- ----------------------------
create table if not exists tenant_capacity  (
                                    `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
                                    `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID',
                                    `quota` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值',
                                    `usage` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量',
                                    `max_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
                                    `max_aggr_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数',
                                    `max_aggr_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
                                    `max_history_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量',
                                    `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                    `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
                                    PRIMARY KEY (`id`) USING BTREE,
                                    UNIQUE INDEX `uk_tenant_id`(`tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '租户容量信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for tenant_info
-- ----------------------------
create table if not exists tenant_info  (
                                `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
                                `kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'kp',
                                `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id',
                                `tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_name',
                                `tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tenant_desc',
                                `create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'create_source',
                                `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
                                `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
                                PRIMARY KEY (`id`) USING BTREE,
                                UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp` ASC, `tenant_id` ASC) USING BTREE,
                                INDEX `idx_tenant_id`(`tenant_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for users
-- ----------------------------
create table if not exists users  (
                          `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
                          `password` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
                          `enabled` tinyint(1) NOT NULL,
                          PRIMARY KEY (`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

然后在服务器找个位置创建 mysql 的数据存储目录/usr/soft/docker/mingink/mysql/data和配置目录/usr/soft/docker/mingink/mysql/conf ,之后就可以开始攥写 docker-compose.env.yml 文件了,示例代码如下:

version: '3'
services:
  mysql:
    image: mysql # 使用的镜像
    container_name: mysql # 启动的示例名称
    restart: always # 崩溃后自动重启
    ports:
      - "3306:3306" # 端口映射
    environment:
      TZ: Asia/Shanghai # 控制时区
      MYSQL_ROOT_PASSWORD: root123456  # mysql root用户密码
    volumes:
      - /usr/soft/docker/mingink/mysql/data:/var/lib/mysql # 将数据目录挂载到本地目录以进行持久化
      - /usr/soft/docker/mingink/mysql/conf:/etc/mysql/conf.d # 挂载配置文件目录
      - ./env/mysql/mysql-init:/docker-entrypoint-initdb.d # 启动脚本(创建容器后会自动执行建表语句)
    networks:
      - mynetwork # 指定网络

# 网络,不定义的话就是默认网络
networks:
  mynetwork: # 自定义网络,实现网络互通和隔离

3.2 Redis

Redis 服务和Mysql的类型,先创建配置文件 redis.conf ,再创建数据目录 /usr/soft/docker/mingink/redis/data 和日志目录 /usr/soft/docker/mingink/redis/logs ,示例代码如下:
在这里插入图片描述
redis.conf

# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0

protected-mode yes

# Redis 服务器的端口号(默认:6379)
port 6379

tcp-backlog 511

# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass redis123

# 设置在客户端闲置一段时间后关闭连接,单位为秒(默认:0,表示禁用)
# timeout 0

# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize yes

# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice

# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile ""

# 设置数据库数量(默认:16),Redis 使用数据库索引从 0 到 15
databases 16

# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly yes

# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly.aof"

# AOF 持久化模式,默认为 "always"。可以是 always、everysec 或 no
# always:每个写操作都立即同步到磁盘
# everysec:每秒钟同步一次到磁盘
# no:完全依赖操作系统的行为,可能会丢失数据,但性能最高
appendfsync always

# 设置是否在后台进行 AOF 文件重写,默认为 "no"
# auto-aof-rewrite-on-rewrite no

# 设置 AOF 文件重写触发时,原 AOF 文件大小与新 AOF 文件大小之间的比率(默认:100)
# auto-aof-rewrite-percentage 100

# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000

docker-compose.env.yml

  redis:
    image: redis:6.2.14
    container_name: redis
    restart: always
    ports:
      - "6379:6379"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /usr/soft/docker/mingink/redis/data:/data # 数据目录
      - ./env/redis/redis.conf:/usr/local/etc/redis/redis.conf # 配置文件
      - /usr/soft/docker/mingink/redis/logs:/logs # 日志, 未成功?
    networks:
      - mynetwork

3.3 Nacos

在上面的 mysql 中创建好 nacos_config 数据库后,需要在创建日志目录 /usr/soft/docker/mingink/nacos/logs。然后创建一个 nacos.env 环境配置文件:
在这里插入图片描述

MODE=standalone # 单节点启动
SPRING_DATASOURCE_PLATFORM=mysql # 单击模式下支持MYSQL数据库
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_DB_NAME=nacos_config
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root123456
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=UTC
NACOS_AUTH_IDENTITY_KEY=mingink-key
NACOS_AUTH_IDENTITY_VALUE=mingink-value
NACOS_AUTH_TOKEN_SECRET_KEY=SecretKey012345678901234567890123456789012345678901234567890123456789
NACOS_AUTH_ENABLE=true # 打开授权系统
# NACOS_AUTH_TOKEN生成:参考https://juejin.cn/post/7213677398720757821
NACOS_AUTH_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjpbeyJtaW5naW5rIjoibG92ZWx1bWluZSJ9XSwiaWF0IjoxNzEwMDcxNzY4LCJleHAiOjIyMTQ5MjE1OTksImF1ZCI6IiIsImlzcyI6IiIsInN1YiI6IiJ9.eKkg8cr-kVBIMUajTzFZ0pyRxws3dvSBYsXjuYTp-yg
TZ=Asia/Shanghai # 控制时区

docker-compose.env.yml

  nacos:
    image: nacos/nacos-server:v2.2.3
    container_name: nacos
    restart: always
    ports:
      - "8848:8848"
      - "9848:9848" # gRPC
      - "9849:9849" # gRPC
    environment:
      TZ: Asia/Shanghai
    env_file:
      - env/nacos/nacos.env # nacos配置
    volumes:
      - /usr/soft/docker/mingink/nacos/logs:/home/nacos/logs # 日志
    networks:
      - mynetwork

总的 docker-compose.env.yml 如下:
在这里插入图片描述

version: '3'
services:
  mysql:
    image: mysql # 使用的镜像
    container_name: mysql # 启动的示例名称
    restart: always # 崩溃后自动重启
    ports:
      - "3306:3306" # 端口映射
    environment:
      TZ: Asia/Shanghai # 控制时区
      MYSQL_ROOT_PASSWORD: root123456  # mysql root用户密码
    volumes:
      - /usr/soft/docker/mingink/mysql/data:/var/lib/mysql # 将数据目录挂载到本地目录以进行持久化
      - /usr/soft/docker/mingink/mysql/conf:/etc/mysql/conf.d # 挂载配置文件目录
      - ./env/mysql/mysql-init:/docker-entrypoint-initdb.d # 启动脚本(创建容器后会自动执行建表语句)
    networks:
      - mynetwork # 指定网络
  
  redis:
    image: redis:6.2.14
    container_name: redis
    restart: always
    ports:
      - "6379:6379"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /usr/soft/docker/mingink/redis/data:/data # 数据目录
      - ./env/redis/redis.conf:/usr/local/etc/redis/redis.conf # 配置文件
      - /usr/soft/docker/mingink/redis/logs:/logs # 日志, 未成功?
    networks:
      - mynetwork

  nacos:
    image: nacos/nacos-server:v2.2.3
    container_name: nacos
    restart: always
    ports:
      - "8848:8848"
      - "9848:9848" # gRPC
      - "9849:9849" # gRPC
    environment:
      TZ: Asia/Shanghai
    env_file:
      - env/nacos/nacos.env # nacos配置
    volumes:
      - /usr/soft/docker/mingink/nacos/logs:/home/nacos/logs # 日志
    networks:
      - mynetwork


# 网络,不定义的话就是默认网络
networks:
  mynetwork: # 自定义网络,实现网络互通和隔离

四、服务部署

4.1 文件同步

下面,需要把微服务项目源码上传到服务器上(也可以使用FTP 等工具手动上传每次新打好的JAR包和docker-compose文件,但每次修改都需要重新上传,非常麻烦)。我们使用 IDEA 自带的远程部署功能,实现配置文件的自动上传,步骤如下:
1)在 工具 中选择 部署配置 选项:
在这里插入图片描述
2)添加远程部署
在这里插入图片描述
3)指定连接的服务器配置:
在这里插入图片描述
4)配置本地文件和服务器文件路径映射:
在这里插入图片描述
5)开启自动上传:
在这里插入图片描述
这样你每次在项目中修改的文件(比如 docker-compose.env.yml)都会自动同步到远程服务器,不需要再手动通过 FTP 上传。
6) 首次需要手动上传文件。
在这里插入图片描述
上传完成后,就可以在刚才文件映射的目录( /usr/soft/mingink ) 下找到已上传的文件列表。
在这里插入图片描述

4.2 获取 jar 包

打包配置

打包的pom配置和方法可以参考上一篇文章Spring Cloud部署篇1——Jar包部署至CentOS云服务器。
在项目根目录下执行打包命令:

mvn clean package

然后把各模块(我这里有三个模块)的 jar 包上传到服务器(每次重新打包都需要):
在这里插入图片描述

4.3 编写业务服务配置

与环境部署一样,我们可以编写业务服务的 Docker Compose 文件 docker-compose.env.yml,示例代码如下:

version: '3'
services:
  mingink-gateway:
    container_name: mingink-gateway
    build: # 服务的 Docker 构建文件位置
      context: ./mingink-gateway
      dockerfile: Dockerfile
    ports:
      - "8081:8081"
    networks:
      - mynetwork
    volumes:
      - ./logs/mingink-gateway:/app/log

  mingink-modules-system:
    container_name: mingink-modules-system
    build:
      context: ./mingink-modules/mingink-modules-system
      dockerfile: Dockerfile
    ports:
      - "8082:8082"
    networks:
      - mynetwork
    depends_on: # 本服务依赖的服务,控制启动先后顺序
      - mingink-gateway
    volumes:
      - ./logs/mingink-modules-system:/app/log

  mingink-modules-article:
    container_name: mingink-modules-article
    build:
      context: ./mingink-modules/mingink-modules-article
      dockerfile: Dockerfile
    ports:
      - "8083:8083"
    networks:
      - mynetwork
    depends_on: # 本服务依赖的服务,控制启动先后顺序
      - mingink-gateway
    volumes:
      - ./logs/mingink-modules-article:/app/log

# 网络,不定义的话就是默认网络
networks:
  mynetwork:

然后在各模块下编写相应的 Dockerfile 文件,以 mingink-gateway 为例:

在这里插入图片描述

# 基础镜像
FROM openjdk:17-jdk-alpine

# 指定工作目录
WORKDIR /app

# 将 jar 包添加到工作目录
ADD target/mingink-gateway.jar .

# 创建日志目录
RUN chmod -R 777 /app && mkdir /app/log

# 设置时区
ENV TimeZone=Asia/Shanghai
# 使用软连接,并且将时区配置覆盖/etc/timezone (同步docker与宿主机的时区)
RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone

# 暴露端口
EXPOSE 8081

# 启动命令
# CMD允许运行时覆盖,而ENTRYPOINT不可以
 CMD ["sh", "-c", "java -jar mingink-gateway.jar >./log/log.out 2>&1"]

其它两个模块 mingink-modules-systems 和 mingink-modules-article 模块也类似,把模块名称改改就行。

五、运行 Docker Compose 文件

在服务器的项目根目录下,先执行环境部署文件 docker-compose.env.yml:

docker compose -f docker-compose.env.yml up -d --build

再执行业务部署文件 docker-compose.service.yml

docker compose -f docker-compose.service.yml up -d --build

然后查看 docker 容器运行情况:

docker ps -a

在这里插入图片描述
如果遇到某一服务启动失败,可以单独启动该服务:

ocker compose -f docker-compose.service.yml up mingink-gateway

然后就可以开始测试你安装的服务是否正常运行了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis操作sql报错ibatis.binding.BindingException: Parameter ‘empId‘ not found.

你们好,我是金金金。 场景 在使用Mybatis操作sql语句过程当中,更新操作,报错信息如下:Caused by: org.apache.ibatis.binding.BindingException: Parameter ‘empId’ not found. Available parameters are [arg1, arg0, param1, …

链表中的经典问题——奇偶链表

奇偶链表 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数组和奇…

R语言绘制桑基图教程

原文链接:R语言绘制桑基图教程 写在前面 在昨天3月10日,我们在知乎、B站等分享了功能富集桑基气泡图的绘制教程。相关链接:NC|高颜值功能富集桑基气泡图,桑基气泡组合图。 确实,目前这个图在文章中出现的频率相对比较…

仿牛客网项目---Elasticsearch分布式搜索引擎

1.什么是ElasticSearch分布式搜索引擎? Elasticsearch是一个开源的分布式搜索引擎,提供实时的、高可用性的搜索和分析解决方案。它支持快速索引和搜索大规模数据,具有分布式架构、RESTful API、基于JSON的查询语言等功能,适用于各…

手机备忘录可以设置密码吗 能锁屏加密的备忘录

在繁忙的生活中,手机备忘录成了我随身携带的“小秘书”。那些关于工作的灵感、生活的琐事,甚至深藏心底的小秘密,都被我一一记录在里面。然而,每次当手机离开我的视线,或者需要借给他人使用时,我总会心生担…

力扣:118. 杨辉三角

力扣:118. 杨辉三角 描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输…

根据xlsx文件第一列的网址爬虫(selenium)

seleniumXpath 在与该ipynb文件同文件下新增一个111.xlsx,第一列放一堆需要爬虫的同样式网页 然后使用seleniumXpath爬虫 from selenium import webdriver from selenium.webdriver.common.by import By import openpyxl import timedef crawl_data(driver, url)…

数据结构->双向链表带你体验开火车(哨兵)与拼接火车(应用)厢的乐趣

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 目的:学习双向带头链表的增,删,查,销毁…

Logseq电脑端+安卓端同步gitee或github

文章目录 0.初衷1.电脑端1.1 新建仓库1.2 克隆项目,生成秘钥1.3 添加图谱,选择文件目录,我是原本就有笔记,所以会如下所示。1.4 下载脚本文件1.5赋权限 (windows可跳过)1.6 修改脚本命令1.7 logseq设置同步…

从大模型到Agentscope——Multi-Agent框架应用与开发

目录 大模型发展历程 大模型的缺陷 智能体 Agent的构建 模型计划内存工具 Agent到多Agent Multi-Agent 带来性能提升的同时也带来一些新的问题 流程设计鲁棒可靠多模态多系统提升运行效率 Multi-Agent框架 AgentScope Demo 三行代码实现聊天机器人 预告

Python与FPGA——sobel边缘检测

文章目录 前言一、sobel边缘检测二、Python sobel边缘检测三、FPGA sobel边缘检测总结 前言 边缘存在于目标、背景区域之间,它是图像分割所依赖的较重要的依据,也是图像匹配的重要特征。边缘检测在图像处理和计算机视觉中,尤其在图像的特征提…

C++进阶之路---多态(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、多态的原理 1.虚函数表 // 这里常考一道笔试题:sizeof(Base)是多少? class Base { public:…

Vue首屏优化方案

在Vue项目中,引入到工程中的所有js、css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多,那么vendor.js文件体积将会相当的大,影响首屏的体验。可以看个例子:…

后端八股笔记------微服务篇

注册中心的主要作用:根据服务进行负载均衡,服务的健康监控。 服务雪崩,因为一个服务D的宕机,导致很多服务崩掉。 达到失败阈值----Closed_to_Open 服务降级------某一个接口 服务熔断------整个服务 限流常见的算法可以是令牌…

Upload 上传(图片/文件),回显(图片),下载(文件)

1.前端技术:V3 Ant Design Vue 2.后端技术:Java 图片上传/回显: 文件上传回显: 表结构:单文件/图片上传为A表对文件C表 (A表field字段 对应 C表id字段) 如图:A表中的 vehicle_d…

【测试工具系列】压测用Jmeter还是LoadRunner?还是其他?

说起JMeter,估计很多测试人员都耳熟能详。它小巧、开源,还能支持多种协议的接口和性能测试,所以在测试圈儿里很受欢迎,也是测试人员常用的工具,但是在企业级性能场景下可能会有性能瓶颈,更适合测试自己使用…

基于单片机的视觉导航小车设计

目 录 摘 要 I Abstract II 引 言 1 1 总体方案设计 3 1.1 方案论证 3 1.2 项目总体设计 3 2 项目硬件设计 4 2.1 主控模块设计 4 2.1.1单片机选型 4 2.1.2 STM32F103RCT6芯片 4 2.2单片机最小系统电路 5 2.3电机驱动模块设计 7 2.4红外模块设计 8 2.5红外遥控模块设计 9 2.6超…

一条 SQL 更新语句如何执行的

Server 层 存储引擎层 总流程 查询语句 连接器 查询缓存 分析器 优化器 执行器 更新语句 redo log(节省的是随机写磁盘的 IO 消耗(转成顺序写&#x…

动态规划刷题总结(入门)

目录 什么是动态规划算法 如何判断题目中将使用动态规划算法? 动态规划题目做题步骤 动态规划题目解析 泰波那契数模型 第 N 个泰波那契数 三步问题 使用最小花费爬楼梯 路径问题 不同路径 不同路径 Ⅱ 珠宝的最高价值 下降最短路径和 地下城游…

【Numpy】练习题100道(1-25题)

#学习笔记# 在学习神经网络的过程中发现对numpy的操作不是非常熟悉,遂找到了Numpy 100题。 Git-hub链接 目录 1 题目列表: 2 题解: 1 题目列表: 导入numpy包,并将其命名为np(★☆☆) 打印…