环境信息
- 系统信息: #1 SMP PREEMPT_DYNAMIC Debian 6.1.66-1 (2023-12-09) x86_64
- docker 版本:Docker Engine 24.0.7
- docker compose 版本:v2.21.0
背景信息
搭建私有网站服务,用于分享学习经验
搭建步骤
采用 docker compose 一键搭建服务
docker-compose.yml 脚本内容
version: "3"
services:
  halo-web:
    image: halohub/halo:2.11.0
    container_name: halo-web
    restart: on-failure:3
    depends_on:
      halo-db:
        condition: service_healthy
    networks:
      - prod_net
    volumes:
      - ./data/halo2:/root/.halo2
    ports:
      - "20707:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halo-db:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=o#DwN&JSa56
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
  halo-db:
    image: mysql:8.1.0
    container_name: halo-db
    restart: on-failure:3
    networks:
      - prod_net
    command: 
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./data/mysqlBackup:/data/mysqlBackup
    ports:
      - "20708:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
      - MYSQL_DATABASE=halo
networks:
  prod_net:
    name: prod_net
    external: true
- 版本信息:version: “3”
- Docker 服务根节点:services:
- Halo web 服务:halo-web:
- 镜像:image: halohub/halo:2.11.0
- 容器名:container_name: halo-web
- 重启机制:restart: on-failure:3
- 容器依赖:depends_on:
- halo db:halo-db:
- 条件检测:condition: service_healthy
 
 
- halo db:halo-db:
- 网络配置:networks:
- 网络别名:- prod_net
 
- 挂载卷:volumes:
- halo数据:- ./data/halo2:/root/.halo2
 
- 端口暴露:ports:
- 端口号映射:- "20707:8090"
 
- 健康检查:healthcheck:
- 检测指令:test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"\]
- 间隔时间:interval: 30s
- 超时时间:timeout: 5s
- 重试次数:retries: 5
- 容器初始化时间:start_period: 30s
 
- 指定容器启动参数:command:
- 数据库连接:- --spring.r2dbc.url=r2dbc:pool:mysql://halo-db:3306/halo
- 用户名:- --spring.r2dbc.username=root
- 密码:- --spring.r2dbc.password=o#DwN&JSa56
- 数据库类型:- --spring.sql.init.platform=mysql
- 外部访问URL:- --halo.external-url=http://localhost:8090/
 
 
- Halo DB服务:halo-db:
- 镜像:image: mysql:8.1.0
- 容器名:container_name: halo-db
- 重启机制:restart: on-failure:3
- 网络配置:networks:
- 网络别名:- prod_net
 
- 指定容器启动参数:command: 
- 默认认证方式:- --default-authentication-plugin=caching_sha2_password
- 数据库字符集:- --character-set-server=utf8mb4
- 数据库字符序:- --collation-server=utf8mb4_general_ci
- 时间可以为null:- --explicit_defaults_for_timestamp=true
 
- 挂载卷:volumes:
- 数据库数据:- ./data/mysql:/var/lib/mysql
- 备份数据:- ./data/mysqlBackup:/data/mysqlBackup
 
- 端口暴露:ports:
- 端口映射:- "20708:3306"
 
- 健康检查:healthcheck:
- 检测指令:test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
- 间隔时间:interval: 3s
- 重试次数:retries: 5
- 容器初始化时间:start_period: 30s
 
- 环境变量:environment:
- 数据库密码: - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
- 数据库名:- MYSQL_DATABASE=halo
 
 
 
- Halo web 服务:halo-web:
- 网络定义根节点:networks:
- 网络别名:prod_net:
- 网络实际名称:name: prod_net
- 外部网络:external: true
 
 
- 网络别名:prod_net:
请根据自己的实际需求进行更新。
启动容器
sudo docker compose up -d
查看容器
sudo docker container ls -a
6254dd766729   halohub/halo:2.11.0                                                    "sh -c 'java ${JVM_O…"    2 hours ago    Up 2 hours (healthy)   0.0.0.0:20707->8090/tcp, :::20707->8090/tcp                               halo-web
b8939bb280f5   mysql:8.1.0                                                            "docker-entrypoint.s…"    2 hours ago    Up 2 hours (healthy)   33060/tcp, 0.0.0.0:20708->3306/tcp, :::20708->3306/tcp                    halo-db
如果第一次启动时,halo-web是停止的状态,可能是数据库启动过慢,无法连接导致的,可以尝试重启容器 docker restart halo-web;如重启后还未解决问题,需查看具体报错处理。
访问halo并初始化
URL: http://localhost:20707
按界面提示操作即可~~~