从0到1建立docker26部署安装springcloud微服务+mysql8+tdengine3.0+redis6+nginx1.21+nacos3.3+zookeeper3.4+kafka2.13

1.前言:限于个人资源,本篇提供从0到1linux端基于springcloud微服务的完整单机版本搭建,分享给软件开发、测试、运维以及有兴趣的同学作为参考,后续资源满足集群模式后,再整理发布集群部署帖。

2.背景:服务器版本centos8,项目基于springboot2.7版本的微服务模式进行构建,涉及到以下版本的中间件安装:mysql8+tdengine3.0+redis6+nginx1.21+nacos3.3+zookeeper3.4+kafka2.13,jdk默认1.8.x。

3.过程:按顺序一步步执行即可。

3.1docker:

安装相关依赖:yum install -y yum-utils

设置阿里云镜像存储地址:
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker服务:yum install docker-ce docker-ce-cli containerd.io

安装完成后,运行下面的命令,验证是否安装成功:

设置docker拉取镜像地址:docker默认从https://hub.docker.com获取,因为是国外地址且速度较慢,建议多加几个国内地址:vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://mr63yffu.mirror.aliyuncs.com",
                        "https://docker.m.daocloud.io",
                        "https://dockerproxy.com",
                        "https://docker.mirrors.ustc.edu.cn",
                        "https://docker.nju.edu.cn"]
}
重启Docker Daemon:systemctl daemon-reload

提示:后续部署均基于docker容器化部署,为了方便后续维护,创建容器时,会将数据、日志、配置文件映射到本机。

3.2mysql8:

docker pull mysql  执行该命令会自动拉取当前最新版本的镜像,如果需要指定版本,可以使用docker search mysql查询更多版本。

在本地创建mysql映射目录 mkdir -p /home/mysql/data /home/mysql/logs /home/mysql/conf

创建容器并指定映射目录 docker run -p 3306:3306 --name mysql \

-v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/logs:/logs \

-v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:latest

  • -d: 后台运行容器
  • -p 将容器的端口映射到本机的端口
  • -v 将主机目录挂载到容器的目录
  • -e 设置参数

进入容器/执行命令:docker exec -it mysql /bin/bash

验证mysql是否正常工作:mysql -uroot -p   或mysql,进入容器默认是免登录。

3.3td3.3.2.0:

docker pull tdengine/tdengine

mkdir -p /home/taos
mkdir -p /home/taos/data
mkdir -p /home/taos/log
docker run -d --name tdengine  -v /home/taos/taos.cfg:/etc/taos/taos.cfg  -v /home/taos/data:/var/lib/taos -v /home/taos/log:/var/log/taos  -p 6030:6030 -p 6041:6041 -p 6043-6049:6043-6049 -p 6043-6049:6043-6049/udp tdengine/tdengine

提示:TDengine 3.X 服务端仅使用 6030 TCP 端口。6041 为 taosAdapter 所使用提供 REST 服务端口。6043-6049 为 taosAdapter 提供第三方应用接入所使用端口,可根据需要选择是否打开。

docker exec -it tdengine bash

验证tdengine是否正常工作:taosd -C

tdengine客户端连接工具:TDengineGUI是一个基于electron构建的,针对时序数据库TDengine的图形化管理工具。具有跨平台、易于使用、版本适应性强等特点。
 下载地址:https://github.com/arielyang/TDengineGUI/releases/download/1.0.3/TDengineGUI.Setup.1.0.3.exe

3.4redis:

docker pull redis

mkdir -p /home/redis/data /home/redis/conf

docker run -p 6379:6379 --name redis -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data -d redis redis-server /etc/redis/redis.conf  --appendonly yes

验证redis是否启动成功:

3.5nacos:

docker pull nacos/nacos-server

docker  run \
--name thinglinks-nacos -d \
-p 8848:8848 \
-p 7848:7848 \
-p 9848:9848 \
-p 9849:9849 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /home/nacos/logs:/home/nacos/logs \
-v /home/nacos/conf/application.properties:/home/nacos/conf/application.properties \
nacos/nacos-server

验证nacos是否启动成功:

3.6nginx

docker pull nginx

#当nginx容器指定配置文件目录初始化时,需要该目录存在nginx.conf,否则会失败,此时我们先创建一个临时容器,用命令手动取出它的配置文件。

docker run -di --name nginx -p 80:80 nginx

# 创建目录
mkdir -p /home/nginx

# 将容器内的配置文件拷贝到指定目录
docker cp nginx:/etc/nginx /home/nginx/conf

#停止并删除临时容器

docker stop nginx
docker rm nginx

docker run -di --name nginx \
-p 80:80 \
-v /home/nginx/conf:/etc/nginx \
-v /usr/share/nginx/html:/usr/share/nginx/html \
-v /home/nginx/logs:/var/log/nginx \
nginx

#验证nginx是否启动成功:docker exec -it nginx bash

nginx -v

到此,基础应用搭建完毕,接下来我们继续搭建业务应用。

3.7springboot应用:

a、从本地idea工具把项目打成jar包

b、将编写好的Dockfile文件、docker-compose文件和jar包上传至服务器。

Dockfile文件样例auth如下:

# 使用 Java 运行环境
FROM openjdk:8-jre

# 维护者信息
LABEL maintainer="slyomg"

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 创建工作目录
WORKDIR /home/iot_pro/iot-auth

# 从构建上下文(Dockerfile 所在目录的相对路径)复制 JAR 文件
COPY iot-auth.jar /iot-auth.jar

# 暴露服务端口
EXPOSE 8081

# 添加健康检查,确保应用健康状态
HEALTHCHECK --interval=30s --timeout=30s --retries=3 \
  CMD curl -f http://localhost:8081/actuator/health || exit 1

# 启动 Java 应用
ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/iot-auth.jar"]

docker-compose.yml部分如下:

version: '3.5'

# 网络配置
networks:
  backend:
    driver: bridge

# 作者信息
x-metadata-config: &metadata-config
  maintainer: "slyomg"

# 共享环境配置
x-env-config: &env-config
  TZ: Asia/Shanghai
  SPRING_PROFILES_ACTIVE: prod
  NACOS_IP: 127.0.0.1
  NACOS_PORT: 8848
  NACOS_NAMESPACE: 41a03bfb-33c4-2a11-833f-8b57313a2d30
  NACOS_USERNAME: nacos
  NACOS_PASSWORD: nacos

# 共享卷和网络配置
x-shared-config: &shared-config
  environment:
    - TZ=Asia/Shanghai
  volumes:
    - /data/slyomg/iot-pro:/home/data/slyomg
    - /etc/timezone:/etc/timezone
    - /etc/localtime:/etc/localtime
  restart: always
  networks:
    - backend
  logging:
    driver: json-file
    options:
      max-size: "10m"
      max-file: "3"

# 服务定义
services:
  iot-auth:
    container_name: iot-auth
    build:
      context: back/iot-auth
      dockerfile: Dockerfile
    ports:
      - "8081:8081" # 映射端口
    environment:
      <<: *env-config
      SERVICE_PORT: 8081
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:8081/actuator/health" ]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s
    <<: *shared-config 

注:后续需要追加剩下的服务配置!

c、编写脚本通过docker-compose方式创建镜像并启动容器:

#!/bin/sh

# 开启所需端口
port(){
        firewall-cmd --add-port=3306/tcp --permanent
       firewall-cmd --add-port=6030/tcp --permanent
        firewall-cmd --add-port=6041/tcp --permanent
        firewall-cmd --add-port=6043/tcp --permanent                                                                                  firewall-cmd --add-port=6379/tcp --permanent
        firewall-cmd --add-port=7848/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=8080/tcp --permanent
        firewall-cmd --add-port=8081/tcp --permanent
        firewall-cmd --add-port=8082/tcp --permanent
        firewall-cmd --add-port=8083/tcp --permanent
        firewall-cmd --add-port=8084/tcp --permanent
        firewall-cmd --add-port=8085/tcp --permanent
        firewall-cmd --add-port=8086/tcp --permanent
        firewall-cmd --add-port=2181/tcp --permanent
        firewall-cmd --add-port=9092/tcp --permanent
        service firewalld restart
}

# 启动程序模块
modules(){
         docker-compose up -d iot-auth iot-gateway iot-system iot-tdengine 
}

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

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

# 根据输入参数,选择执行对应方法,
case "$1" in
"port")
        port
;;
"modules")
        modules
;;
"stop")
        stop
;;
"rm")
        rm
;;
esac
运行完毕之后,执行docker images/docker ps等命令,逐个验证镜像和容器是否正常建立,执行docker logs 容器名 查看各容器启动是否正常。

3.8.前端Vue应用部署

a、在idea工具的终端界面,路由到指定文件夹里,执行以下命令:

npm install --registry=https://registry.npm.taobao.org

b、在前端工程根目录下压缩dist包,然后上传并解压至linux服务器3.6nginx中设置的前端文件路径里,追溯如下:

-v /usr/share/nginx/html:/usr/share/nginx/html \

 c、修改3.6nginx下nginx.conf的配置,路径追溯如下:

-v /home/nginx/conf:/etc/nginx \

 

#iotweb服务
    server {
        listen       80;
        server_name  ip地址;

        charset utf-8;

        access_log  /home/iot-pro.log;

        location / {
            root   /usr/share/nginx/html/dist;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
        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://gateway_ip:port/;
        }
        location /prod-soket/ {
          proxy_set_header Host $host;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header REMOTE-HOST $remote_addr;                                                                          proxy_pass http://gateway_ip:port/;
  }

        # 避免actuator暴露
        if ($request_uri ~ "/actuator") {
            return 403;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
               root   html;
        }

        }

d、修改完成后执行docker exec -it nginx /bash

nginx -s reload #热加载nginx配置

nginx -t  #对nginx.conf配置做合规性检查

当提示successful则成功,此时可成功登录项目主页。

由于时间匆忙,不完善的地方后续再做补充吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值