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

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: 1host: redisport: 6379#      password: tskrdevadmintimeout: 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 1primary: masterdatasource:master:# MySQL8driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:// mysql-container:3306/mdm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=trueusername: rootpassword: 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: 123456mqtt:host: tcp://localhost:1883username: makupassword: makuclientId: maku_boot_service_devdefault-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.lryc.cn/news/436873.html

相关文章:

  • DFS算法专题(二)——穷举vs暴搜vs深搜vs回溯vs剪枝【OF决策树】
  • Spring Security 快速开始
  • Lua5.3 参考手册
  • Centos如何配置阿里云的yum仓库作为yum源?
  • 力扣139-单词拆分(Java详细题解)
  • CSS —— display属性
  • BTC ETF资金流入暴涨400%,市场下一步将如何发展?
  • 视频监控管理平台LntonAIServer视频智能分析抖动检测算法应用场景
  • 初识php库管理工具composer的体验【爽】使用phpword模板功能替换里面的字符串文本
  • 每日一问:C++ 如何实现继承、封装和多态
  • STM32常用数据采集滤波算法
  • 二分系列(二分查找)9/12
  • 如何通过可视化大屏,助力智慧城市的“城市微脑”建设?
  • 何时空仓库
  • 美创获评CNVD年度原创漏洞发现贡献单位!
  • Spring 循环依赖原理及解决方案
  • 【数据结构与算法 | 灵神题单 | 插入链表篇】力扣2807, LCR 029, 147
  • 瑞芯微rv1126 Linux 系统,修改系统时区,包有效方法
  • 系统架构设计师:数据库设计
  • 代码随想录刷题day31丨56. 合并区间,738.单调递增的数字,总结
  • 深圳建站公司-如何做网站
  • Google Earth Engine(GEE)——随时间推移的降雨趋势案例分析(大规模气候监测)
  • 从新手到高手:用这9个策略让ChatGPT成为你的私人顾问!
  • 高精度定位系统中的关键技术:GGA、EHP、RTMC、IMU、GNSS、INS 和 RTK 的协同工作
  • Spring3~~~
  • 微服务CI/CD实践(五)Jenkins Docker 自动化构建部署Java微服务
  • 泰州高新区法院多层面强化固定资产管理
  • JDBC简介与应用:Java数据库连接的核心概念和技术
  • 倒反天罡!这个AI风格模型可自由训练,还能批量生成同风格图像
  • Stable Diffusion绘画 | ControlNet应用-Inpaint(局部重绘):更完美的重绘