当前位置: 首页 > news >正文

docker部署redis mysql nacos seata rabbitmq minio onlyoffice nginx实战

docker部署redis mysql nacos seata rabbitmq minio onlyoffice nginx实战

一、环境介绍

操作系统:ubuntu22.04
软件环境:docker、docker-compose

在这里插入图片描述
在这里插入图片描述

二、docker安装

  1. 版本规定到26.1.3版本过低会引起莫名其妙的问题。
  2. 打开终端。更新软件包列表:
sudo apt update
  1. 安装必要的依赖包:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  1. 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 添加Docker的存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  1. 更新软件包索引:
sudo apt update
  1. 安装Docker Engine:
sudo apt install docker-ce docker-ce-cli containerd.io
  1. 启动Docker服务:
sudo systemctl start docker
  1. 验证Docker是否安装成功:
docker --version

在这里插入图片描述

  1. 下载官方发布的二进制文件来安装Docker Compose:
sudo apt-get update
sudo apt-get install docker.io
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 下载完成后,给二进制文件添加执行权限:
sudo chmod +x /usr/local/bin/docker-compose
  1. 验证Docker Compose是否已正确安装:
docker-compose --version

在这里插入图片描述

  1. 如果需要非root用户也能运行Docker命令,可以将用户添加到docker组:
sudo usermod -aG docker ${USER}
  1. 添加国内镜像源
sudo nano /etc/docker/daemon.json 

内容为

{"registry-mirrors": ["https://dockerproxy.cn","https://0vmzj3q6.mirror.aliyuncs.com","https://docker.m.daocloud.io","https://mirror.baidubce.com","https://dockerproxy.com","https://mirror.iscas.ac.cn","https://huecker.io","https://dockerhub.timeweb.cloud","https://noohub.ru","https://vlgh0kqj.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker

三、中间件安装

(1)nginx

docker pull nginx
docker run \
-p 80:80 -p 8081:8081 -p 8082:8082 -p 8083:8083 \
--name nginx \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/nginx/log:/var/log/nginx \
-v /var/Web:/var/Web \
-d nginx

先建个空的nginx容器,把docker容器里面的配置,按照内网映射关系,把配置文件考到容器外部对应的目录下。然后再删除容器,重写按照上面的命令建。
-p 80:80 -p 8081:8081 -p 8082:8082 -p 8083:8083 \ 端口转发容器内外要一一对应。如果配置文件配置了,但是容器创建的时候 -p没有配置,转发会失效。
/var/Web 目录是前端代码部署位置。

(2)mysql8

docker pull mysql:8.0.17

先建立一个空的容器,用于把容器内部的配置文件考出来。

docker run -p 3306:3306 --name=mysql \
-e MYSQL_ROOT_PASSWORD=nasen \
-d --privileged=true --restart=unless-stopped mysql:8.0.17
# 修改配置文件权限
chmod 644 /data/mysql/conf/my.cnf
# 创建目标目录
mkdir -p /data/mysql/conf/
# 假设容器名称为 mysql
docker cp mysql:/etc/mysql/my.cnf /data/mysql/conf/chmod 644 /data/mysql/conf/my.cnfdocker stop mysql
docker rm mysql

下面命令是未持久化的,数据都存在容器里面。

docker run -p 3306:3306 --name=mysql \
-v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=nasen \
-d --privileged=true --restart=unless-stopped mysql:8.0.17

持久化的命令如下:

docker run -p 3306:3306 --name=mysql \
-v /data/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/mysql-files/:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=nasen \
-d --privileged=true --restart=unless-stopped mysql:8.0.17

(3)minio文件系统

docker pull minio/minio
docker run --network=host --name minio -p 9000:9000 -p9090:9090 -d \
--restart=always \
-e MINIO_ROOT_USER=nasen \
-e MINIO_ROOT_PASSWORD=nasen \
-v /etc/ssl/certs:/etc/ssl/certs:ro \
-v /data/minio/data1:/data1 \
-v /data/minio/data2:/data2 \
-v /data/minio/config:/root/.minio minio/minio server --address ':9000' --console-address ':9090' /data{1...2}

在这里插入图片描述

(4)onlyoffice

docker pull onlyoffice/documentserver
sudo docker run -i -t -d -p 9098:80 --restart=always --name document-office \
-v /data/onlyoffice/DocumentServer/logs:/var/log/onlyofffice \
-v /data/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Daata \
-v /data/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
-v /data/onlyoffice/DocumentServer/db:/var/lib/postgrescl -e JWT_SECRET=7cb43b633b6f11f0a0b1c21651ae7097 onlyoffice/documentserver:latest

在这里插入图片描述

(5) rabbitmq

docker pull rabbitmq:3-management
docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 -v /home/rabbitmq:/var/www/rabbitMQ -e RABBITMQ_DEFAULT_USER=document -e RABBITMQ_DEFAULT_PASS=nasen rabbitmq:3-management

(6) redis

docker pull redis:7.2.4
docker run --restart=always --name redis  -p 6379:6379 -d redis:7.2.4 redis-server --requirepass nasen --protected-mode no --appendonly yes

(7)nacos

docker pull nacos/nacos-server:v2.2.3
vim /data/nacos/conf/application.properties
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.error.include-message=ALWAYS
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
#db.num=${MYSQL_DATABASE_NUM:1}
#db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
#db.user.0=${MYSQL_SERVICE_USER}
#db.password.0=${MYSQL_SERVICE_PASSWORD}db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
db.user.0=root
db.password.0=nasen### The auth system to use, currently only 'nacos' and 'ldap' is supporteda:
nacos.core.auth.enabled=true
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:example}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:example}
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

上面的配置文件修改数据库配置

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
db.user.0=root
db.password.0=nasen
docker run -d --name nacos -p 18848:8848 -p 19848:9848  \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e ACOS_AUTH_ENABLE=true \
-v /data/nacos/logs:/home/nacos/logs \
-v /data/nacos/conf/application.properties:/home/nacos/conf/application.properties \
-v /data/nacos/data/:/home/nacos/data \
nacos/nacos-server:v2.2.3

在这里插入图片描述

(8)elasticsearch

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.14.0
docker run -d --name elasticsearch \-p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e "ELASTICSEARCH_USERNAME=nasen" \-e "ELASTICSEARCH_PASSWORD=nasen" \docker.elastic.co/elasticsearch/elasticsearch:7.14.0

(9)seata

第一步MySQL建数据库seata
CREATE TABLE IF NOT EXISTS `global_table`
(`xid`                       VARCHAR(128) NOT NULL,`transaction_id`            BIGINT,`status`                    TINYINT      NOT NULL,`application_id`            VARCHAR(32),`transaction_service_group` VARCHAR(32),`transaction_name`          VARCHAR(128),`timeout`                   INT,`begin_time`                BIGINT,`application_data`          VARCHAR(2000),`gmt_create`                DATETIME,`gmt_modified`              DATETIME,PRIMARY KEY (`xid`),KEY `idx_status_gmt_modified` (`status` , `gmt_modified`),KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(`branch_id`         BIGINT       NOT NULL,`xid`               VARCHAR(128) NOT NULL,`transaction_id`    BIGINT,`resource_group_id` VARCHAR(32),`resource_id`       VARCHAR(256),`branch_type`       VARCHAR(8),`status`            TINYINT,`client_id`         VARCHAR(64),`application_data`  VARCHAR(2000),`gmt_create`        DATETIME(6),`gmt_modified`      DATETIME(6),PRIMARY KEY (`branch_id`),KEY `idx_xid` (`xid`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(`row_key`        VARCHAR(128) NOT NULL,`xid`            VARCHAR(128),`transaction_id` BIGINT,`branch_id`      BIGINT       NOT NULL,`resource_id`    VARCHAR(256),`table_name`     VARCHAR(32),`pk`             VARCHAR(36),`status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',`gmt_create`     DATETIME,`gmt_modified`   DATETIME,PRIMARY KEY (`row_key`),KEY `idx_status` (`status`),KEY `idx_branch_id` (`branch_id`),KEY `idx_xid` (`xid`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;CREATE TABLE IF NOT EXISTS `distributed_lock`
(`lock_key`       CHAR(20) NOT NULL,`lock_value`     VARCHAR(20) NOT NULL,`expire`         BIGINT,primary key (`lock_key`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
第二步编辑配置文件
vim /data/seata/config/resources/application.yml

编辑如下内容:

#  Copyright 1999-2019 Seata.io Group.
#
#  Licensed 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.server:port: 7091spring:application:name: seata-serverlogging:config: classpath:logback-spring.xmlfile:path: ${log.home:${user.home}/logs/seata}extend:logstash-appender:destination: 127.0.0.1:4560kafka-appender:bootstrap-servers: 127.0.0.1:9092topic: logback_to_logstashconsole:user:username: seatapassword: seata
seata:config:type: nacosnacos:server-addr: 127.0.0.1:18848namespace:group: SEATA_GROUPusername: nacospassword: nacoscontext-path:data-id: seataServer.propertiesregistry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:18848group: SEATA_GROUPnamespace:cluster: defaultusername: nacospassword: nacosstore:# support: file 、 db 、 redismode: file
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'security:secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017tokenValidityInMilliseconds: 1800000ignore:urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login
第三步创建容器
docker pull seataio/seata-server:1.7.1
docker run -d --name seata-server --network=host -p 8091:8091 -e SEATA_CONFIG_NAME=file:/root/seata-config/registry -e SEATA_IP=127.0.0.1 seataio/seata-server:1.7.1

把容器外部的配置复制到容器内部

docker cp /data/seata/config/resources/application.yml seata-server:/seata-server/resources/application.yml
docker restart seata-server        #重启容器重写加载配置
docker logs seata-server

在这里插入图片描述
日志如上则启动成功。

在这里插入图片描述
进入nacos看到seata注册到注册中心上!

第四步骤在nacos上追加seata的配置

进入到nacos后台,nacos nacos
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicodee=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=nasen
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
第六步重启nacos
docker restart nacos
docker logs nacos

在这里插入图片描述

重启seata-server无报错算成功

docker restart seata-server        #重启容器重写加载配置

在这里插入图片描述
无报错算成功

再次登录nacos后台查看
在这里插入图片描述
在这里插入图片描述
部署成功!seata部署过程确实有点绕,大家按步骤走即可。先装nacos再部署seata!最后还得注册到nacos上,再加上数据库配置。

http://www.xdnf.cn/news/688969.html

相关文章:

  • 20250528-C#知识:枚举
  • 20250528-C#知识:结构体
  • C# Socket对象创建方式详解
  • C接口 中文字符问题
  • 针对C++开发工具推荐及分析(涵盖IDE、编译器、调试工具和辅助工具)
  • 电脑开机后出现bootmgr is conmpressed原因及解决方法
  • 【Redis】基本架构
  • Dockerfile 构建优化的方法
  • 智变与重构:AI 赋能基础教育教学的范式转型研究报告
  • 理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
  • 第八天:面向对象编程
  • React---day3
  • CVE-2017-12629-XXE源码分析与漏洞复现
  • 设计模式24——访问者模式
  • 【AUTOSAR OS】 保护功能解析:从原理到应用与源代码解析(下篇)
  • 《Python+AI如何颠覆传统文书审查模式》
  • 【网络安全】——Modbus协议详解:工业通信的“通用语言”
  • JS 逆向太费劲,试试 JS 注入!
  • 服务器上用脚本跑python深度学习的注意事项(ubantu系统)
  • 【第2章 绘制】2.6 阴影
  • 基于stm32LORA无线抄表系统仿真
  • 人工智能在智能建筑中的创新应用与未来趋势
  • 将docker容器保存为镜像,让后将镜像打包保存到本地
  • WPF的基础控件:布局控件(StackPanel DockPanel)
  • React+Antd全局加载遮罩工具
  • 2. 数据结构基本概念 (2)
  • LLM 对齐新范式:深入解析 DPO (Direct Preference Optimization) 的原理与实践
  • Microsoft的在word中选择文档中的所有表格进行字体和格式的调整时的解决方案
  • 180 度 = π 弧度
  • 2025吉林ccpc【部分题解】