环境信息
- 系统信息: #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
按界面提示操作即可~~~