一、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 接口無法正常訪問