钜形不锈钢水箱 发表于 2024-7-25 11:05:21

从0到1建立docker26部署安装springcloud微服务+mysql8+tdengine3.0+redis6+

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
安装完成后,运行下面的下令,验证是否安装乐成:
https://img-blog.csdnimg.cn/direct/3fe3618d8c2141feaf841c056b81cf7b.png
设置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
https://img-blog.csdnimg.cn/direct/a657c062ed914a5bafacc3de81dc2d67.png
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是否启动乐成:
https://img-blog.csdnimg.cn/direct/70885c273a17448ca31fe613c5c41e7d.png
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是否启动乐成:
https://img-blog.csdnimg.cn/direct/39a3077799b04e81b18a4eb1ab027f0f.png
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
https://img-blog.csdnimg.cn/direct/bacd0f5bc43c4d76b99d7162ac9478c1.png
到此,基础应用搭建完毕,接下来我们继续搭建业务应用。
3.7springboot应用:

a、从本地idea工具把项目打成jar包
https://img-blog.csdnimg.cn/direct/343453f98b884504948cd1733ed76ae4.png
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则乐成,此时可乐成登录项目主页。
由于时间匆忙,不美满的地方后续再做补充吧。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 从0到1建立docker26部署安装springcloud微服务+mysql8+tdengine3.0+redis6+