Bước 1: Lấy hình ảnh Docker cần thiết
Trước tiên, bạn cần tải về các image Docker cho Nacos Server và MySQL từ Docker Hub.
docker pull nacos/nacos-server:latest
docker pull mysql:8.0
Bước 2: Chuẩn bị thư mục lưu trữ cho Nacos
Tạo các thư mục để lưu trữ cấu hình, nhật ký và dữ liệu của Nacos. Đảm bảo quyền truy cập chính xác.
# Tạo thư mục cấu hình
mkdir -p /opt/nacos-deployment/nacos/conf
chown -R 200 /opt/nacos-deployment/nacos/conf
# Tạo thư mục lưu trữ nhật ký
mkdir -p /opt/nacos-deployment/nacos/logs
chown -R 200 /opt/nacos-deployment/nacos/logs
# Tạo thư mục lưu trữ dữ liệu
mkdir -p /opt/nacos-deployment/nacos/data
chown -R 200 /opt/nacos-deployment/nacos/data
Bước 3: Cấu hình tệp application.properties
Tệp `application.properties` trong thư mục cấu hình của Nacos cần được điều chỉnh để kết nối với cơ sở dữ liệu MySQL. Vì MySQL của chúng ta chạy trên cổng 3308, chúng ta cần cập nhật URL kết nối.
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8849}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.error.include-message=ALWAYS
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
# Cấu hình kết nối cơ sở dữ liệu
db.num=1
db.url.0=jdbc:mysql://192.168.1.100:3308/nacos_db?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Ho_Chi_Minh
db.user=nacos_user
db.password=secure_password123
### Hệ thống xác thực được sử dụng, hiện tại chỉ hỗ trợ 'nacos' và 'ldap'
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
### Thời gian hết hạn token (giây)
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### Mật khẩu bí mật mặc định cho token
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:}
### Bật/tắt bộ nhớ đệm thông tin xác thực. Bằng cách bật công tắc này, cập nhật thông tin xác thực sẽ có độ trễ 15 giây.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:}
## Cấu hình spring security
### Tắt bảo mật
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
Bước 4: Tạo tệp docker-compose.yaml
Tạo tệp `docker-compose.yaml` để định nghĩa và khởi động các dịch vụ MySQL và Nacos.
version: "3.7"
services:
db:
image: mysql:8.0
container_name: nacos-mysql
restart: always
ports:
- "3308:3306"
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: nacos_db
MYSQL_USER: nacos_user
MYSQL_PASSWORD: secure_password123
volumes:
- /opt/nacos-deployment/mysql/data:/var/lib/mysql
- /opt/nacos-deployment/mysql/conf:/etc/mysql/conf.d
nacos-server:
image: nacos/nacos-server
container_name: nacos
restart: always
ports:
- "8849:8848"
- "9849:9848"
volumes:
- /opt/nacos-deployment/nacos/conf/application.properties:/home/nacos/server-addr.properties
- /opt/nacos-deployment/nacos/logs:/home/nacos/logs
- /opt/nacos-deployment/nacos/data:/home/nacos/data
environment:
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: db
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: nacos_db
MYSQL_SERVICE_USER: nacos_user
MYSQL_SERVICE_PASSWORD: secure_password123
depends_on:
- db
Bước 5: Khởi tạo cơ sở dữ liệu MySQL
Trước khi khởi động, bạn cần tạo cơ sở dữ liệu `nacos_db` và các bảng cần thiết. Sử dụng lệnh sau để thực thi script SQL.
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-- Sử dụng cơ sở dữ liệu nacos_db
USE nacos_db;
-- Bảng lưu trữ thông tin cấu hình
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(255) DEFAULT NULL,
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) DEFAULT NULL,
`c_use` varchar(64) DEFAULT NULL,
`effect` varchar(64) DEFAULT NULL,
`type` varchar(64) DEFAULT NULL,
`c_schema` text,
`encrypted_data_key` text NOT NULL COMMENT '秘钥',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
-- Các bảng khác cần thiết cho Nacos...
-- (Các lệnh CREATE TABLE khác từ script gốc được giữ nguyên ở đây)
-- Thêm người dùng mặc định
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
Bước 6: Khởi động dịch vụ
Sau khi tất cả các tệp đã được chuẩn bị, bạn có thể khởi động các dịch vụ bằng lệnh sau:
docker-compose up -d