一、docker-compose.yml 部署nacos服务
version: "3"
services:mysql:container_name: mysql# 5.7image: mysql:5.7environment:# mysql root用户密码MYSQL_ROOT_PASSWORD: rootTZ: Asia/Shanghai# 初始化数据库(后续的初始化sql会在这个库执行)MYSQL_DATABASE: nacos_config# 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)MYSQL_USER: nacosMYSQL_PASSWORD: nacoscommand:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1--max_allowed_packet=128M;volumes:# mysql的数据文件- /soft/mysql/data:/var/lib/mysql# mysql配置文件- /sof/mysql/conf:/etc/mysql/conf.dports:- "8081:3306"nacos3:hostname: nacos3image: nacos/nacos-server:2.0.3container_name: nacos3volumes:#- ./nacos/plugins/mysql/:/home/nacos/plugins/mysql/- /soft/nacos/logs/:/home/nacos/logs- /soft/nacos/application.properties:/home/nacos/init.d/application.propertiesenvironment: # 设置环境变量,相当于docker run命令中的-e- JVM_XMS=215m- JVM_XMX=215m- JVM_XMN=215m- MODE=standalone #单机模式- SPRING_DATASOURCE_PLATFORM=mysql- MYSQL_SERVICE_HOST=120.26.3.89- MYSQL_SERVICE_PORT=8081- MYSQL_SERVICE_USER=nacos- MYSQL_SERVICE_PASSWORD=nacos- MYSQL_SERVICE_DB_NAME=nacos_configports:- "8848:8848"#- "7848:7848"- "9848:9848"- "9849:9849"#env_file:# - /soft/nacos/nacos-hostname.envrestart: alwaysdepends_on:- mysql
二、启动docker
#cd 到docker-compose.yml文件所在目录
#执行
docker-compose up -d
#访问 Nacos平台
http://ip地址:8848/nacos/
#新建命名空间
public(默认有的),dev(开发环境),test(测试环境)
nacos启动后会生成相应的表
三、python django settings.py文件 中mysql 配置动态读取
#python Django 集成nacos
pip install nacos-sdk-python
###################################settings.py#################################### Nacos 配置
NACOS_SERVER = "ip:8848" # Nacos 服务器地址 ip 换成Nacos对应的IP地址
NACOS_NAMESPACE = "dev" # Nacos 命名空间
NACOS_GROUP = "MICRO_GROUP" # Nacos 分组
NACOS_DATA_ID = "operation_config_dev" # Nacos 配置 ID# 初始化 Nacos 客户端
nacos_client = NacosClient(NACOS_SERVER, namespace=NACOS_NAMESPACE)# 从 Nacos 获取 MySQL 配置
mysql_config = nacos_client.get_config(NACOS_DATA_ID, NACOS_GROUP)
mysql_config = eval(mysql_config) # 将 JSON 字符串转换为字典# 配置 MySQL 数据库
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': mysql_config.get("DATABASE_NAME"),'USER': mysql_config.get("DATABASE_USER"),'PASSWORD': mysql_config.get("DATABASE_PASSWORD"),'HOST': mysql_config.get("DATABASE_HOST"),'PORT': mysql_config.get("DATABASE_PORT", "8081"),'OPTIONS': {'charset': 'utf8mb4', # 支持更广泛的字符集},}
}print(f"更新前 Databases: {DATABASES}")
def update_mysql_config(config):"""动态更新 MySQL 配置"""global DATABASESprint("收到 Nacos 配置更新通知")print(f"收到更新后 config: {config}")# 使用 json.loads 解析 JSON 字符串mysql_config = json.loads(config['content'])print(f"更新后 Databases: {mysql_config}")DATABASES['default'].update({'NAME': mysql_config.get("DATABASE_NAME"),'USER': mysql_config.get("DATABASE_USER"),'PASSWORD': mysql_config.get("DATABASE_PASSWORD"),'HOST': mysql_config.get("DATABASE_HOST"),'PORT': mysql_config.get("DATABASE_PORT", "3306"),})# 监听 Nacos 配置变化
nacos_client.add_config_watcher(NACOS_DATA_ID, NACOS_GROUP, update_mysql_config)
四、在Nacos上配置Mysql连接配置
{"DATABASE_NAME": "micro_biz_log","DATABASE_USER": "root","DATABASE_PASSWORD": "root","DATABASE_HOST": "xxx.xxx.xxx.xxx", #换成自己的Ip地址"DATABASE_PORT": "8081" #mysql服务的端口
}
五、启动django项目 (需要支持WebSocket或其他异步通信,使用daphne启动)
#安装Daphne
pip install daphne#终端输入
daphne operation.asgi:application
六、验证查看控制台输出
#将nacos中配置 "DATABASE_PORT": "8082" 端口修改成 8082
七、页面接口验证
# 修改前 mysql端口 8081 接口能正常访问
# 修改后 mysql端口 8082 接口无法正常访问