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

docker 多服务只暴露一个客户端

业务场景

docker部署多个服务时候,当为了安全考虑 部署了多个服务,数据库,缓存库,文件服务器啥的,如果全都暴露的话可能会增加资源侵入的风险,所以只需要挂载一个客户端端口给外部访问即可,其他服务均在内网,保障资源安全

docker 网络

可以把容器们都放在同一网络下,由于docker 容器ip不固定,所以使用容器名,让同一网络可以根据容器名字进行访问


#minio \
docker run -p 9000:9000 -p 9090:9090 \
    --name minio \
    -d --restart=always \
    -e "MINIO_ACCESS_KEY=minioadmin" \
    -e "MINIO_SECRET_KEY=tskradmin" \
    -v /home/docker/minio/data:/data \
    -v /home/docker/minio/config:/root/.minio \
    minio/minio:latest server /data



# 创建一个 Docker 网络
docker network create app-network

# 启动 MySQL 容器并连接到 Docker 网络
#挂载sql
#docker cp ./mdm.sql     mysql-container:/home.mdm.sql
#创建数据库
#CREATE DATABASE mdm;
#USE mdm;
#SOURCE /home.mdm.sql;
#docker exec -it mysql-container sh -c "mysql -u root -p2383560016 < /mdm.sql"
docker run -d \
  --name mysql-container \
  --network app-network \
  -e MYSQL_ROOT_PASSWORD=2383560016 \
  --restart unless-stopped \
  mysql:8.0.23

# 启动 Redis 容器并连接到 Docker 网络
docker run -d \
  --name redis \
  --network app-network \
  -v /home/docker/redis/data:/data \
  redis:latest \
  redis-server --appendonly yes
  #后端
docker run -id --name=backend-service --network app-network     app
docker run -id -p 7979:4000 --name=fornt-service  --network app-network     vue

上面的脚本中只有文件服务,和前端服务是挂载端口暴露给外网的,目的是给用户下载和访问服务得途径,其他服务 全部在同一网络桥下

 docker network inspect app-network

查看网络下多少容器
在这里插入图片描述
此时容器之间就可以采用容器名进行通信并且 外网无法访问

后端配置文件

spring:
  data:
    redis:
      database: 1
      host: redis
      port: 6379
      #      password: tskrdevadmin
      timeout: 6000ms  # 连接超时时长(毫秒)
  datasource:
    dynamic:
      hikari: # Hikari 连接池全局配置
        connection-timeout: 30000     # 等待连接池分配链接的最大时长(毫秒),超过这个时长还没有可用的连接则发生 SQLException,默认:30 秒
        minimum-idle: 2               # 最小空闲连接数
        maximum-pool-size: 10         # 最大连接数
        idle-timeout: 600000          # 连接超时的最大时长(毫秒),超时则被释放(retired),默认:10 分钟
        max-lifetime: 1800000         # 连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认: 30 分钟
        connection-test-query: SELECT 1
      primary: master
      datasource:
        master:
          # MySQL8
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql:// mysql-container:3306/mdm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
          username: root
          password: 2383560016
          # 达梦
          #    driver-class-name: dm.jdbc.driver.DmDriver
          #    url: jdbc:dm://192.168.3.19:5236/maku_boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
          #    username: maku_boot
          #    password: 12345678
          # PostgreSQL
          #    driver-class-name: org.postgresql.Driver
          #    url: jdbc:postgresql://192.168.3.19:5432/postgres
          #    username: postgres
          #    password: 123456
  mqtt:
    host: tcp://localhost:1883
    username: maku
    password: maku
    clientId: maku_boot_service_dev
    default-topic: topic_default

后端服务均采用服务名通信

对应得前都要由于反向代理或者负载均衡,所以需要修改nginx配置文件
nginx文件

events {
    worker_connections  1024;
}
 
 
http {
    include       mime.types;
    default_type  application/octet-stream;
     client_max_body_size 1024M;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
 
    server {
       listen 4000;
        server_name 域名;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
	try_files $uri $uri/ /index.html;
        }
 
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        # 配置代理,解决跨域问题
     location /api/ {
        rewrite ^/api/(.*)$ /$1 break;  # 去掉 /api 前缀
        proxy_pass http://backend-service:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

 
  
 
}

前端得axios配置
vite env.production文件

//就是前端部署地址 确保请求成功达到nginx转发给内网得后端
VITE_API_URL=http://服务器:7979/api

http://www.kler.cn/a/303136.html

相关文章:

  • 【大数据技术基础 | 实验十】Hive实验:部署Hive
  • HTML(超文本标记语言)
  • 使用Matlab神经网络工具箱
  • 服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例
  • 如何优化Elasticsearch的查询性能?
  • macos中安装和设置ninja
  • 003InputSystem新输入系统学习工作笔记
  • R和Python数据格式的通用性
  • Mysql | 知识 | 事务隔离级别
  • netty之NioEventLoop和NioEventLoopGroup
  • 统计信息的导出导入
  • 顶点照明渲染路径
  • Java异常处理机制详解
  • 如何把我另一个分支上的commit拿过来
  • C语言整型数据在内存中的存储(22)
  • python如何将DICOM图片转为JPG?
  • Docker torchserve 部署模型流程
  • MATLAB | R2024b更新了哪些好玩的东西?
  • 在Excel中通过Python运行公式和函数实现数据计算
  • 计算机网络27、28——Linux命令1、2
  • 这款神器,运维绝杀 !!! 【送源码】
  • 内部flash模拟成EepRom-重新梳理
  • codeup:将已有文件夹推送到已有仓库
  • 计算机毕业设计 | SpringBoot+vue 游戏商城 steam网站管理系统(附源码)
  • 【运维监控】Prometheus+grafana+kafka_exporter监控kafka运行情况
  • Leetcode 3282. Reach End of Array With Max Score