当然,我将为你创建一个尽可能不易出错的 docker-compose.yml 配置,这个配置分别为两个独立的 Halo 实例进行设置,并使用 MySQL 数据库作为后端存储。每个实例的数据库配置和端口都是独立设置的。

项目目录结构

  • /path/to/halo1
    • docker-compose.yml
    • halo_data (用于存储第一个实例的数据)
    • mysql_data1 (用于存储第一个实例的数据库数据)
  • /path/to/halo2
    • docker-compose.yml
    • halo_data (用于存储第二个实例的数据)
    • mysql_data2 (用于存储第二个实例的数据库数据)

第一个 Halo 实例的 docker-compose.yml

/path/to/halo1 中创建以下内容:

version: "3.8"

services:
  halo1:
    image: registry.fit2cloud.com/halo/halo:2.20
    restart: on-failure:3
    depends_on:
      - halodb1
    networks:
      - halo_network
    volumes:
      - ./halo_data:/root/.halo
    ports:
      - "8092:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb1:3306/halo1
      - --spring.r2dbc.username=halo1
      - --spring.r2dbc.password=H@lo1p@ssw0rd
      - --spring.sql.init.platform=mysql
      - --halo.external-url=http://localhost:8092/ 

  halodb1:
    image: mysql:8.1.0
    restart: on-failure:3
    networks:
      - halo_network
    volumes:
      - ./mysql_data1:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=H@lo1p@ssw0rd
      - MYSQL_DATABASE=halo1
      - MYSQL_USER=halo1
      - MYSQL_PASSWORD=H@lo1p@ssw0rd
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-pH@lo1p@ssw0rd"]
      interval: 30s
      timeout: 5s
      retries: 5

networks:
  halo_network:

第二个 Halo 实例的 docker-compose.yml

/path/to/halo2 中创建以下内容:

version: "3.8"

services:
  halo2:
    image: registry.fit2cloud.com/halo/halo:2.20
    restart: on-failure:3
    depends_on:
      - halodb2
    networks:
      - halo_network
    volumes:
      - ./halo_data:/root/.halo
    ports:
      - "8093:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb2:3306/halo2
      - --spring.r2dbc.username=halo2
      - --spring.r2dbc.password=H@lo2Secur3
      - --spring.sql.init.platform=mysql
      - --halo.external-url=http://localhost:8093/ 

  halodb2:
    image: mysql:8.1.0
    restart: on-failure:3
    networks:
      - halo_network
    volumes:
      - ./mysql_data2:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=H@lo2Secur3
      - MYSQL_DATABASE=halo2
      - MYSQL_USER=halo2
      - MYSQL_PASSWORD=H@lo2Secur3
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-pH@lo2Secur3"]
      interval: 30s
      timeout: 5s
      retries: 5

networks:
  halo_network:

注意事项

  • 修改 /path/to/halo1/path/to/halo2 为你实际要存放文件的路径。
  • 两个实例使用独立的数据库和目录,确保数据不会冲突。
  • 各实例使用不同的数据库和密码配置。
  • 数据卷 halo_datamysql_data1/2 应确保宿主机路径的正确性以防丢失数据。
  • 你可能需要根据你的实际部署环境调整 halo.external-url 配置。
  • 在这两个目录中分别运行 docker-compose up -d 启动两个实例。

通过这些改动,这两个实例应该能够独立运行而不会互相干扰。根据具体环境,确保适当调整配置。