ToB企服应用市场:ToB评测及商务社交产业平台

标题: 从0到1建立docker26部署安装springcloud微服务+mysql8+tdengine3.0+redis6+ [打印本页]

作者: 钜形不锈钢水箱    时间: 2024-7-25 11:05
标题: 从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
安装完成后,运行下面的下令,验证是否安装乐成:

设置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

进入容器/执行下令: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如下:
  1. # 使用 Java 运行环境
  2. FROM openjdk:8-jre
  3. # 维护者信息
  4. LABEL maintainer="slyomg"
  5. # 设置时区
  6. ENV TZ=Asia/Shanghai
  7. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  8. # 创建工作目录
  9. WORKDIR /home/iot_pro/iot-auth
  10. # 从构建上下文(Dockerfile 所在目录的相对路径)复制 JAR 文件
  11. COPY iot-auth.jar /iot-auth.jar
  12. # 暴露服务端口
  13. EXPOSE 8081
  14. # 添加健康检查,确保应用健康状态
  15. HEALTHCHECK --interval=30s --timeout=30s --retries=3 \
  16.   CMD curl -f http://localhost:8081/actuator/health || exit 1
  17. # 启动 Java 应用
  18. ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/iot-auth.jar"]
复制代码
docker-compose.yml部分如下:
  1. version: '3.5'
  2. # 网络配置
  3. networks:
  4.   backend:
  5.     driver: bridge
  6. # 作者信息
  7. x-metadata-config: &metadata-config
  8.   maintainer: "slyomg"
  9. # 共享环境配置
  10. x-env-config: &env-config
  11.   TZ: Asia/Shanghai
  12.   SPRING_PROFILES_ACTIVE: prod
  13.   NACOS_IP: 127.0.0.1
  14.   NACOS_PORT: 8848
  15.   NACOS_NAMESPACE: 41a03bfb-33c4-2a11-833f-8b57313a2d30
  16.   NACOS_USERNAME: nacos
  17.   NACOS_PASSWORD: nacos
  18. # 共享卷和网络配置
  19. x-shared-config: &shared-config
  20.   environment:
  21.     - TZ=Asia/Shanghai
  22.   volumes:
  23.     - /data/slyomg/iot-pro:/home/data/slyomg
  24.     - /etc/timezone:/etc/timezone
  25.     - /etc/localtime:/etc/localtime
  26.   restart: always
  27.   networks:
  28.     - backend
  29.   logging:
  30.     driver: json-file
  31.     options:
  32.       max-size: "10m"
  33.       max-file: "3"
  34. # 服务定义
  35. services:
  36.   iot-auth:
  37.     container_name: iot-auth
  38.     build:
  39.       context: back/iot-auth
  40.       dockerfile: Dockerfile
  41.     ports:
  42.       - "8081:8081" # 映射端口
  43.     environment:
  44.       <<: *env-config
  45.       SERVICE_PORT: 8081
  46.     healthcheck:
  47.       test: [ "CMD", "curl", "-f", "http://localhost:8081/actuator/health" ]
  48.       interval: 30s
  49.       timeout: 10s
  50.       retries: 5
  51.       start_period: 60s
  52.     <<: *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工具的终端界面,路由到指定文件夹里,执行以下下令:
  1. 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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4