Triển khai Nacos bằng Docker Compose

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

Thẻ: Nacos Docker Compose mysql containerization

Đăng vào ngày 27 tháng 7 lúc 09:15