跳转至

2024

Minio 部署

约 113 个字 27 行代码 5 张图片 预计阅读时间 1 分钟

创建挂载目录

Bash
#创建挂载目录
mkdir -p /data/minio


创建yml文件

Bash
vim /data/minio/docker-compose.yml


填入配置

Bash
version: '3.9'
services:
  minio:
    image: "quay.io/minio/minio:RELEASE.2022-08-02T23-59-16Z"
    container_name: minio
    ports:
      - "9000:9000" # api 端口
      - "9001:9001" # 控制台端口
    environment:
      TZ: Asia/Shanghai # 时区上海
      MINIO_ROOT_USER: admin # 管理后台用户名
      MINIO_ROOT_PASSWORD: 12345678 # 管理后台密码,最小8个字符
      MINIO_COMPRESS: "off" # 开启压缩 on 开启 off 关闭
      MINIO_COMPRESS_EXTENSIONS: "" # 扩展名 .pdf,.doc 为空 所有类型均压缩
      MINIO_COMPRESS_MIME_TYPES: "" # mime 类型 application/pdf 为空 所有类型均压缩
    volumes:
      - /data/minio/data:/data/ # 映射当前目录下的data目录至容器内/data目录      
      - /data/minio/config:/root/.minio/ # 映射配置目录
    command: server --address ':9000' --console-address ':9001' /data  # 指定容器中的目录 /data
    privileged: true


启动容器

Bash
1
2
3
4
cd /data/minio
docker-compose up -d
#如果需要强制重新构建
docker-compose up --force-recreate -d


!!安全组添加端口 9000,9001 !!



配置桶

创建桶 设置桶为公开

创建一个权限用户,获取密钥

点击create按钮后,会随机生成accessKey secretKey。 会将这两个key进行展示,此时可以复制粘贴到一个文本文件上,后续使用代码上传文件时需要用到这两个key

Mysql 部署

约 34 个字 59 行代码 预计阅读时间 1 分钟

创建挂载目录

Bash
1
2
3
#创建挂载目录
mkdir -p /data/mysql/data;
mkdir -p /data/mysql/conf;


创建yml文件

Bash
vim /data/mysql/docker-compose.yml


填入配置

Bash
version: '3.8' # 选择合适版本
services:
  mysql:
    image: mysql:8.0.30 #mysql版本
    container_name: mysql
    volumes:
      - /data/mysql/data:/var/lib/mysql
      - /data/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: 123456 #root用户密码
      TZ: Asia/Shanghai
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci


创建配置文件

Bash
vim /data/mysql/conf/my.cnf
Bash
[mysqld]
default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
character-set-server=utf8mb4      # 设置mysql服务端默认字符集
pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
datadir         = /var/lib/mysql              # 数据文件存放的目录
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!

# 允许最大连接数
max_connections=200


# 同一局域网内注意要唯一
server-id=3306
# 开启二进制日志功能 & 日志位置存放位置`/var/lib/mysql`
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
# binlog格式
# 1. STATEMENT:基于SQL语句的模式,binlog 数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
# 2. MIXED:混合模式,根据语句来选用是 STATEMENT 还是 ROW 模式;
# 3. ROW:基于行的模式,记录的是行的完整变化。安全,但 binlog 会比其他两种模式大很多;
binlog_format=ROW
# FULL:binlog记录每一行的完整变更 MINIMAL:只记录影响后的行
binlog_row_image=FULL
# 日志文件大小
max_binlog_size=100M
# 定义清除过期日志的时间(这里设置为7天)
expire_logs_days=7

# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4  # 设置mysql客户端默认字符集


启动容器

Bash
cd /data/mysql
docker-compose up -d

!!! 安全组添加 3306 !!!

PostgreSQL 部署

约 28 个字 26 行代码 预计阅读时间不到 1 分钟

创建挂载目录

Bash
mkdir -p /data/postgresql/data
mkdir -p /data/postgresql/log

创建yml文件

Bash
vim /data/postgresql/docker-compose.yml

填入配置

Bash
services:
  postgres_db: # 服务名称
    image: postgres:15.7 # 指定镜像及其版本
    container_name: docker_postgres # 指定容器的名称
    environment:
      POSTGRES_PASSWORD: 123456
    ports: # 端口映射
      - "5432:5432"
    volumes: # 数据持久化的配置
      - /data/postgresql/data:/var/lib/postgresql/data
      - /data/postgresql/log:/var/log/postgresql
    logging:
      options:
        max-size: "10m"
        max-file: "3"
    networks:  # 网络配置
      - pub-network  # 加入到 pub-network 网络

networks:  # 网络
  pub-network:
      driver: bridge

启动容器

Bash
cd /data/postgresql
docker-compose up -d

!!! 安全组添加 5432 !!!

Redis 部署

约 36 个字 35 行代码 预计阅读时间 1 分钟

创建挂载目录

Bash
#创建挂载目录
mkdir -p /data/redis

创建yml文件

Bash
vim /data/redis/docker-compose.yml


填入配置

Bash
version: '3.8'
services:
  redis:
    image: redis:7.0.11
    container_name: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - /data/redis/redis.conf:/etc/redis/redis.conf
      - /data/redis/data:/data
      - /data/redis/logs:/logs
    command: ["redis-server","/etc/redis/redis.conf"]


创建挂载配置文件

Bash
vim /data/redis/redis.conf
Bash
protected-mode no
port 6379
timeout 0
#rdb配置
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec
#设置你的redis密码
requirepass 123456


启动容器

Bash
1
2
3
4
cd /data/redis
docker-compose up -d
#如果需要强制重新构建
docker-compose up --force-recreate -d


!!! 安全组添加 6379 !!!

RocketMQ 部署

约 236 个字 225 行代码 预计阅读时间 4 分钟

创建挂载目录

Bash
1
2
3
4
5
#创建挂载目录
mkdir -p /data/rocketmq/namesrv;
mkdir -p /data/rocketmq/broker/conf;
mkdir -p /data/rocketmq/broker/lib;
mkdir -p /data/rocketmq/console/data;

创建挂载的配置文件

Bash
vi /data/rocketmq/broker/conf/broker.conf
Bash
#所属集群名字
brokerClusterName=DefaultCluster

#broker名字,注意此处不同的配置文件填写的不一样,如果在broker-a.properties使用:broker-a,
#在broker-b.properties使用:broker-b
brokerName=broker-a

#0 表示Master,>0 表示Slave
brokerId=0

#nameServer地址,分号分割
#namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
namesrvAddr=rocketmq-namesrv:9876

#启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=120.26.2.151

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 !!!这里仔细看是false,false,false
autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口
listenPort=10911

#此参数控制是否开启密码,不开启可设置false
aclEnable=true

#删除文件时间点,默认凌晨4点
deleteWhen=04

#文件保留时间,默认48小时
fileReservedTime=120

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
#storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
#commitLog 存储路径
#storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
#消费队列存储
#storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
#消息索引存储路径
#storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
#checkpoint 文件存储路径
#storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
#abort 文件存储路径
#abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
#限制的消息大小
maxMessageSize=65536

#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER

#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

brokerIP1=47.99.73.85填上自己服务器公网ip,客户端发送消息要联这个

如果有设置密码的需求,broker.conf开启acl密码配置 true

创建acl文件,用于开启用户名密码

Bash
vi /data/rocketmq/broker/conf/plain_acl.yml
Bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
globalWhiteRemoteAddresses:
#  - 47.100.93.*
#  - 156.254.120.*

accounts:
    # 非管理员
  - accessKey: RocketMQ
    secretKey: Cjy050119
    whiteRemoteAddress:
    admin: false
    defaultTopicPerm: DENY
    defaultGroupPerm: SUB
    topicPerms:
      - topicA=DENY
      - topicB=PUB|SUB
      - topicC=SUB
    groupPerms:
      # the group should convert to retry topic
      - groupA=DENY
      - groupB=PUB|SUB
      - groupC=SUB

    # 管理员
  - accessKey: admin123456
    secretKey: Cjy123456
    whiteRemoteAddress: 
    # if it is admin, it could access all resources
    admin: true

密码不能小于6位数 名称也不能小于6位 权限的描述可参考链接

设置console的账号密码

Bash
vi  /data/rocketmq/console/data/users.properties
Bash
# This file supports hot change, any change will be auto-reloaded without Console restarting.
# Format: a user per line, username=password[,N] #N is optional, 0 (Normal User); 1 (Admin)

# Define Admin
# =============用户名和密码规则「用户名=密码,权限」,这里的权限为1表示管理员>,为0表示普通用户=============
# 例如:admin=admin123,1
admin=123456,1


# Define Users
# =============屏蔽下边两个账户=============
#user1=user1
#user2=user2

创建yml文件

Bash
vi /data/rocketmq/docker-compose.yml
Bash
version: '3.8'
services:
  rocketmq-namesrv:
    image: foxiswho/rocketmq:4.8.0
    container_name: rocketmq-namesrv
    restart: always
    ports:
      - 9876:9876
    volumes:
      - ./namesrv/logs:/home/rocketmq/logs
      - ./namesrv/store:/home/rocketmq/store
    environment:
      JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms128M -Xmx128M -Xmn128m"
    command: ["sh","mqnamesrv"]
    networks:
      rocketmq_net:
        aliases:
          - rocketmq-namesrv


  rocketmq-broker:
    image: foxiswho/rocketmq:4.8.0
    container_name: rocketmq-broker
    restart: always
    ports:
      - 10909:10909
      - 10911:10911
    volumes:
      - ./broker/logs:/home/rocketmq/logs
      - ./broker/store:/home/rocketmq/store
      - ./broker/conf/plain_acl.yml:/home/rocketmq/rocketmq-4.8.0/conf/plain_acl.yml
      - ./broker/conf/broker.conf:/etc/rocketmq/broker.conf
    environment:
      JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms128m -Xmx128m -Xmn128m"
    command: ["sh","mqbroker","-c","/etc/rocketmq/broker.conf"]
    depends_on:
      - rocketmq-namesrv
    networks:
      rocketmq_net:
        aliases:
          - rocketmq-broker


  rocketmq-console:
    image: iamverygood/rocketmq-console:4.7.1
    container_name: rocketmq-console
    restart: always
    ports:
      - 8180:8080
    volumes:
      - ./console/data:/tmp/rocketmq-console/data
    environment:
      JAVA_OPTS: "-Drocketmq.namesrv.addr=rocketmq-namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.loginRequired=true -Drocketmq.config.aclEnabled=true -Drocketmq.config.accessKey=admin123456 -Drocketmq.config.secretKey=Cjy123456"
    depends_on:
      - rocketmq-namesrv
    networks:
      rocketmq_net:
        aliases:
          - rocketmq-console

networks:
  rocketmq_net:
    name: rocketmq_net
    driver: bridge

如果acl密码改了,记得把yml的console帐号密码也一同更改 -Drocketmq.config.accessKey=admin123456 -Drocketmq.config.secretKey=Cjy123456 授予目录权限

Bash
1
2
3
4
#目录权限:
chmod -R 777 /data/rocketmq/namesrv/;
chmod -R 777 /data/rocketmq/broker/;
chmod -R 777 /data/rocketmq/console/;

!!安全组添加端口 9876,10911,8180 !!

Bash
cd /data/rocketmq
docker-compose up -d


注意,第一次会启动不成功,因为broker需要创建一堆文件,没有权限。再执行一遍权限命令

Bash
1
2
3
4
#目录权限:
chmod -R 777 /data/rocketmq/namesrv/;
chmod -R 777 /data/rocketmq/broker/;
chmod -R 777 /data/rocketmq/console/;
把启动的mq相关镜像stop后,rm 再重新启动就可以使用了

启动控制台

启动后可以登录控制台 http://ip:8180/ 输入账号密码 admin 123456

Docker

约 219 个字 1 张图片 预计阅读时间 1 分钟

docker 常用命令

  1. 拉取docker镜像 docker pull image_name
  2. 查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下: docker images
  3. 删除镜像 docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30
  4. 查看当前有哪些容器正在运行 docker ps
  5. 查看所有容器 docker ps -a
  6. 启动、停止、重启容器命令: docker start container_name/container_id docker stop container_name/container_id docker restart container_name/container_id
  7. 后台启动一个容器后,如果想进入到这个容器,可以使用attach命令: docker attach container_name/container_id
  8. 删除容器的命令: docker rm container_name/container_id
  9. 删除所有停止的容器: docker rm $(docker ps -a -q)
  10. 查看当前系统Docker信息 docker info
  11. 从Docker hub上下载某个镜像: docker pull centos:latest docker pull centos:latest
  12. 查找Docker Hub上的nginx镜像 docker search nginx
  13. 执行docker pull centos会将Centos这个仓库下面的所有镜像下载到本地repository。

linux环境部署

约 79 个字 43 行代码 1 张图片 预计阅读时间 1 分钟

SSH连接

我使用的是macos,选择软件 Termius 进行SSH远程连接
Termius

linux 系统环境

Bash
[root@iZbp12idmwavjjcx2k19kjZ ~]# cat /etc/os-release 
NAME="Alibaba Cloud Linux"
VERSION="3 (OpenAnolis Edition)"
ID="alinux"
ID_LIKE="rhel fedora centos anolis"
VERSION_ID="3"
VARIANT="OpenAnolis Edition"
VARIANT_ID="openanolis"
ALINUX_MINOR_ID="2104"
ALINUX_UPDATE_ID="10"
PLATFORM_ID="platform:al8"
PRETTY_NAME="Alibaba Cloud Linux 3.2104 U10 (OpenAnolis Edition)"
ANSI_COLOR="0;31"
HOME_URL="https://www.aliyun.com/"


安装docker

Bash
# 更新yum
yum upgrade

# 设置镜像仓库 (阿里云镜像)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker
yum install docker-ce

# 启动docker
sudo systemctl start docker
sudo systemctl enable docker

# 查看docker 版本
docker --version


安装 docker-compose

Bash
1
2
3
4
5
6
7
8
9
# 先执行这两行命令,直接pip会报错
sudo python3 -m pip install -U pip
sudo python3 -m pip install -U setuptools

# 安装docker-compose
pip install docker-compose

# 查看 docker-compose 版本
docker-compose --version

docker 配置国内镜像源

配置国内镜像源 镜像源地址大全

Bash
vim  /etc/docker/daemon.json
Text Only
1
2
3
4
5
6
7
{"registry-mirrors": [
"https://docker.1panel.dev",
"https://docker.fxxk.dedyn.io",
"https://docker.xn--6oq72ry9d5zx.cn",
"https://docker.m.daocloud.io",
"https://a.ussh.net",
"https://docker.zhai.cm"]}

上述镜像源 2024/10/10 可用

重启docker服务

Bash
1
2
3
4
# 重新加载配置文件
sudo systemctl daemon-reload
# 重新启动docker服务
sudo service docker restart

博客文章测试

约 0 个字 1 张图片 预计阅读时间不到 1 分钟

png