Halo – 强大易用的开源建站工具

# 定义所有服务(容器)的配置
services:
  # 定义名为 halo 的服务(Halo 博客应用)
  halo:
    # 指定运行的 Docker 镜像,这里使用 registry.fit2cloud.com 仓库的 halo:2.21 版本
    image: registry.fit2cloud.com/halo/halo:2.21
    
    # 容器重启策略:当容器因错误退出时最多重启 3 次(非手动停止的情况)
    restart: on-failure:3
    
    # 依赖关系:halo 服务需等待 halodb 服务"健康检查通过"后才启动
    depends_on:
      halodb:
        condition: service_healthy
    
    # 将容器加入名为 halo_network 的网络,实现与其他服务的网络互通
    networks:
      halo_network:
    
    # 数据卷挂载:将宿主机当前目录下的 halo2 文件夹挂载到容器内的 /root/.halo2 目录
    # 作用:持久化 Halo 的配置、文章等数据,容器删除后数据不丢失
    volumes:
      - ./halo2:/root/.halo2
    
    # 端口映射:将宿主机的 8090 端口映射到容器内的 8090 端口
    # 外部可通过 http://宿主机IP:8090 访问 halo 服务
    ports:
      - "8090:8090"
    
    # 健康检查配置:监测 halo 服务是否正常运行
    healthcheck:
      # 检查命令:通过 curl 请求 halo 的健康检查接口(就绪探针)
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s        # 检查间隔:每 30 秒执行一次健康检查
      timeout: 5s          # 超时时间:超过 5 秒未响应则视为检查失败
      retries: 5           # 重试次数:连续 5 次失败则判定服务不健康
      start_period: 30s    # 启动等待时间:容器启动后 30 秒再开始健康检查(避免启动中误判)
    
    # 环境变量配置
    environment:
      # JVM 运行参数:设置堆内存初始值和最大值均为 256MB,可根据服务器配置调整
      - JVM_OPTS=-Xmx256m -Xms256m
    
    # 容器启动命令:覆盖镜像默认命令,用于配置数据库连接等参数
    command:
      # 指定 PostgreSQL 数据库连接地址(通过网络别名 halodb 访问数据库服务)
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      # 数据库用户名(需与下方 halodb 的 POSTGRES_USER 一致)
      - --spring.r2dbc.username=halo
      # 数据库密码(需与下方 halodb 的 POSTGRES_PASSWORD 一致)
      - --spring.r2dbc.password=openpostgresql
      # 指定数据库类型为 PostgreSQL(初始化 SQL 脚本时使用)
      - --spring.sql.init.platform=postgresql
      # Halo 外部访问地址(用户实际访问的 URL,需根据部署环境修改,如域名)
      - --halo.external-url=http://localhost:8090/

  # 定义名为 halodb 的服务(PostgreSQL 数据库,用于存储 Halo 数据)
  halodb:
    # 指定运行的 Docker 镜像:PostgreSQL 15.4 版本
    image: postgres:15.4
    
    # 容器重启策略:当容器因错误退出时最多重启 3 次
    restart: on-failure:3
    
    # 将容器加入 halo_network 网络,与 halo 服务互通
    networks:
      halo_network:
    
    # 数据卷挂载:将宿主机当前目录下的 db 文件夹挂载到容器内的 /var/lib/postgresql/data
    # 作用:持久化 PostgreSQL 数据库数据,容器删除后数据不丢失
    volumes:
      - ./db:/var/lib/postgresql/data
    
    # 健康检查配置:监测 PostgreSQL 数据库是否正常运行
    healthcheck:
      # 检查命令:使用 PostgreSQL 自带工具 pg_isready 检测数据库就绪状态
      test: [ "CMD", "pg_isready" ]
      interval: 10s        # 检查间隔:每 10 秒执行一次
      timeout: 5s          # 超时时间:5 秒未响应视为失败
      retries: 5           # 连续 5 次失败则判定服务不健康
    
    # PostgreSQL 环境变量配置(初始化数据库时使用)
    environment:
      - POSTGRES_PASSWORD=openpostgresql  # 数据库超级用户密码
      - POSTGRES_USER=halo                # 创建的数据库用户名(供 Halo 使用)
      - POSTGRES_DB=halo                  # 创建的数据库名(供 Halo 使用)
      - PGUSER=halo                       # 指定默认操作的数据库用户

# 定义网络配置
networks:
  # 创建名为 halo_network 的自定义网络,用于 halo 和 halodb 服务之间的内部通信
  # 默认使用 bridge 驱动,服务间可通过服务名(如 halodb)互相访问
  halo_network:

 

© 版权声明
THE END
喜欢就支持一下吧
点赞9赞赏 分享