写在最前

  1. 在大型企业的软件开发和部署过程中,我们经常面临跨多个环境(如开发、测试、预生产、生产)的挑战。每个环境通常需要特定的配置,尤其是与中间件如MySQL、Redis、Nacos、RabbitMQ等的连接设置。频繁地手动更改这些配置不仅耗时,还容易出错。

  2. 想象一下,如果我们能够实现一种机制,使得所有环境都能使用统一的连接配置,那将是多么的便捷和高效。这样,无论项目部署到哪个环境,都无需担心连接信息的不一致性。通过动态识别和解析中间件的连接地址,我们可以确保每个环境都能自动适应正确的配置,从而实现真正的“一次配置,处处适用。

  3. 这种方法不仅简化了部署流程,还提高了系统的稳定性和可维护性。让我们一起探索如何实现这一目标,让跨环境部署变得轻松而准确。

1. 前置要求

以下我罗列出了必要的部署内容,只需要看文章中的docker部署即可,那么开始吧!

  1. ✨ubuntu server 22.04 LTS 安装与配置✨

  2. ✨二进制部署任意版本docker✨

  3. 构建高效 DNS 环境:Docker 部署 dnsmasq 实战

  4. 使用 Kubernetes 或 Docker 快速部署 Nacos

  5. 使用 Kubernetes 或 Docker 快速部署 Redis

  6. 使用 Kubernetes 或 Docker 快速部署 MySQL8 数据库

2. 配置流程

在此我将介绍如何使用1panel工具,快速设置中间件与域名的访问关系,简化部署与配置。

2.1 安装 1panel

https://1panel.cn/docs/installation/online_installation/

root@ubuntu:~# curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
开始下载 1Panel v1.10.15-lts 版本在线安装包
安装包下载地址: https://resource.fit2cloud.com/1panel/package/stable/v1.10.15-lts/release/1panel-v1.10.15-lts-linux-amd64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 40.8M  100 40.8M    0     0  5525k      0  0:00:07  0:00:07 --:--:-- 4897k
Warning: Got more output options than URLs
1panel-v1.10.15-lts-linux-amd64/1panel.service
1panel-v1.10.15-lts-linux-amd64/1pctl
1panel-v1.10.15-lts-linux-amd64/LICENSE
1panel-v1.10.15-lts-linux-amd64/README.md
1panel-v1.10.15-lts-linux-amd64/install.sh
1panel-v1.10.15-lts-linux-amd64/1panel

 ██╗    ██████╗  █████╗ ███╗   ██╗███████╗██╗     
███║    ██╔══██╗██╔══██╗████╗  ██║██╔════╝██║     
╚██║    ██████╔╝███████║██╔██╗ ██║█████╗  ██║     
 ██║    ██╔═══╝ ██╔══██║██║╚██╗██║██╔══╝  ██║     
 ██║    ██║     ██║  ██║██║ ╚████║███████╗███████╗
 ╚═╝    ╚═╝     ╚═╝  ╚═╝╚═╝  ╚═══╝╚══════╝╚══════╝
[1Panel Log]: ======================= 开始安装 ======================= 
设置 1Panel 安装目录(默认为/opt):/app/1panel    
[1Panel Log]: 您选择的安装路径为 /app/1panel 
[1Panel Log]: 检测到 Docker 已安装,跳过安装步骤 
是否配置镜像加速?(y/n): y
[1Panel Log]: 创建新的配置文件 /etc/docker/daemon.json... 
[1Panel Log]: 镜像加速配置已添加。 
[1Panel Log]: 正在重启 Docker 服务... 
[1Panel Log]: Docker 服务已成功重启。 
[1Panel Log]: ... 在线安装 docker-compose 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 59.8M  100 59.8M    0     0  5171k      0  0:00:11  0:00:11 --:--:-- 4934k
[1Panel Log]: docker-compose 安装成功 
设置 1Panel 端口(默认为16224):    
[1Panel Log]: 您设置的端口为:16224 
[1Panel Log]: 防火墙未开启,忽略端口开放 
设置 1Panel 安全入口(默认为5a6cdff7ac):
[1Panel Log]: 您设置的面板安全入口为:5a6cdff7ac 
设置 1Panel 面板用户(默认为184d6f3c51):
[1Panel Log]: 您设置的面板用户为:184d6f3c51 
[1Panel Log]: 设置 1Panel 面板密码,设置完成后直接回车以继续(默认为431de2bc83): 

[1Panel Log]: 配置 1Panel Service 
Created symlink /etc/systemd/system/multi-user.target.wants/1panel.service → /etc/systemd/system/1panel.service.
[1Panel Log]: 启动 1Panel 服务 
[1Panel Log]: 1Panel 服务启动成功! 
[1Panel Log]:  
[1Panel Log]: =================感谢您的耐心等待,安装已经完成================== 
[1Panel Log]:  
[1Panel Log]: 请用浏览器访问面板: 
[1Panel Log]: 外网地址: http://221.218.210.144:16224/5a6cdff7ac 
[1Panel Log]: 内网地址: http://172.31.0.100:16224/5a6cdff7ac 
[1Panel Log]: 面板用户: 184d6f3c51 
[1Panel Log]: 面板密码: 431de2bc83 
[1Panel Log]:  
[1Panel Log]: 项目官网: https://1panel.cn 
[1Panel Log]: 项目文档: https://1panel.cn/docs 
[1Panel Log]: 代码仓库: https://github.com/1Panel-dev/1Panel 
[1Panel Log]:  
[1Panel Log]: 如果使用的是云服务器,请至安全组开放 16224 端口 
[1Panel Log]:  
[1Panel Log]: 为了您的服务器安全,在您离开此界面后您将无法再看到您的密码,请务必牢记您的密码。 
[1Panel Log]:  
[1Panel Log]: ================================================================ 

图片-sano.png

2.2 应用部署 OpenResty

image-jngd.png

2.3 配置域名

在配置中间件时,我们遵循一个简洁而高效的策略。如果中间件具备浏览器控制台功能,我们建议额外配置一个专门的域名。这样做的好处是,我们可以为不同的用途分配不同的域名,从而实现更清晰的资源管理和更高效的访问。

  1. 浏览器访问域名:具体来说我们可以将一个域名设置为xxxx.dev.tanqidi.com,这个域名将通过反向代理指向中间件的控制台端口或路径。这样的设置使得开发者和管理员能够轻松地访问和监控中间件的状态。

  2. 程序访问域名:同时我们还可以为程序连接配置另一个域名,即xxxx1.basic.tanqidi.com。这个域名专门用于程序与中间件之间的通信,确保了连接的稳定性和安全性。

2.3.1 nacos

因为nacos有浏览器控制台,所以我创建一个域名在1panel中反向代理再放到dnsmasq中做域名精准解析到主机即可访问。

  1. 主域名:nacos.dev.tanqidi.com

  2. 代理地址:172.31.0.100:8848

image-iyyv.png

2.3.2 浏览器访问域名

因为在上述1panel中配置了域名指向的反向代理端口了,所以只要在dnsmasq中做域名解析过来他就能直接识别出现网页了

address=/nacos.dev.tanqidi.com/172.31.0.100

image-pimg.png

2.3.3 程序连接域名

此域名不需要在1panel中解析,只需要由dnsmasq解析到ip即可。

为什么是app-xxx1开头呢?因为中间件后续会拓展成为集群,会有app-xxx1, xxx2, xxx3的,目前我们都是单机非集群方式运行。

在构建集群环境时,我们可以通过统一的域名策略来简化中间件的访问管理。例如,我们可以为每个MySQL实例分配一个易于识别的域名,如app-mysql1.basic.tanqidi.comapp-mysql2.basic.tanqidi.comapp-mysql3.basic.tanqidi.com 通过在dnsmasq中动态解析比如172.31.0.100172.31.0.101172.31.0.102

address=/app-nacos1.basic.tanqidi.com/172.31.0.100
address=/app-redis1.basic.tanqidi.com/172.31.0.100
address=/app-mysql1.basic.tanqidi.com/172.31.0.100

图片-gaqd.png

3. 操作总结

本章核心就是阐述了如何合理配置两种访问域名,一种是给浏览器访问,一种是给程序连接中间件来访问,快来试试看吧。