1. 准备工作
确保已安装 Docker Desktop 并启动。
确保终端可执行
docker-compose
命令。
2. 创建项目目录
mkdir -p ~/Documents/halo && cd ~/Documents/halo
目录结构:
~/Documents/halo
├── docker-compose.yaml
├── halo-data # Halo 数据目录(自动生成)
└── mysql-data # MySQL 数据目录(自动生成)
3. 编写 docker-compose.yaml
创建文件 docker-compose.yaml
,内容如下:
version: "3.8"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.20
restart: on-failure:3
depends_on:
mysql:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo-data:/root/.halo2 # Halo 数据持久化
ports:
- "8090:8090"
environment:
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halodb
- --spring.r2dbc.username=halo
- --spring.r2dbc.password=halopassword
- --spring.sql.init.platform=mysql
- --halo.external-url=http://localhost:8090/
mysql:
image: mysql:8.0
restart: on-failure:3
networks:
halo_network:
volumes:
- ./mysql-data:/var/lib/mysql # MySQL 数据持久化
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=halodb
- MYSQL_USER=halo
- MYSQL_PASSWORD=halopassword
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
interval: 10s
timeout: 5s
retries: 5
networks:
halo_network:
4. 启动容器
在 ~/Documents/halo
目录下执行:
docker-compose up -d
5. 验证服务状态
查看容器状态:
docker-compose ps
正常应显示两个容器均为
running
。访问 Halo 管理后台:
浏览器打开
http://localhost:8090/console
初始化管理员账号(如你的用户名
amin
和密码Admin123
)。
6. 数据持久化验证
Halo 数据:存储在
~/Documents/halo/halo-data
。MySQL 数据:存储在
~/Documents/halo/mysql-data
。检查目录内容:
ls -l ~/Documents/halo/halo-data ls -l ~/Documents/halo/mysql-data
正常应包含数据库文件(如
ibdata1
,ib_logfile0
等)。
7. 自定义数据存储路径(可选)
如果你希望将数据存储在其他位置(如 /Users/minghui/Documents/mysql
),需修改 volumes
为绝对路径:
volumes:
- /Users/minghui/Documents/mysql:/var/lib/mysql
但需确保目录存在且 Docker 有权限写入。
常见问题
1. MySQL 容器无法启动
错误现象:
docker-compose logs mysql
显示权限错误。解决方案:
删除
mysql-data
目录并重新启动:rm -rf mysql-data docker-compose up -d
2. Halo 无法连接 MySQL
错误现象:Halo 日志提示数据库连接失败。
检查点:
确保
docker-compose.yaml
中的数据库用户名、密码、数据库名一致。确保 MySQL 容器健康检查通过(
docker-compose ps
显示healthy
)。
总结
✅ 修正后的配置将数据存储在
docker-compose.yaml
所在目录的子目录中。✅ 通过
volumes
配置实现数据持久化,避免容器删除后数据丢失。✅ 使用 Docker Compose 可一键部署 Halo + MySQL,适合本地开发和测试。
评论