部署 Halo 个人博客
1. 环境准备
1.1 安装 Docker
参考官方文档:Docker 安装指南
验证安装:
docker --version
安装 Docker Compose
参考官方文档:Docker Compose 安装指南
验证安装:
docker-compose --version
二、部署步骤
1. 创建项目目录
mkdir ~/halo && cd ~/halo
此目录将存储所有博客数据,请勿随意删除。
2. 编写 Docker Compose 文件
创建 docker-compose.yaml
,以下以 PostgreSQL 数据库为例:
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.20
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
environment:
- JVM_OPTS=-Xmx256m -Xms256m
command:
- --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
- --spring.r2dbc.username=halo
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
- --halo.external-url=http://你的域名或IP:8090/
halodb:
image: postgres:15.4
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
networks:
halo_network:
3. 配置说明
镜像版本:
使用registry.fit2cloud.com/halo/halo:2.20
表示最新 2.20.x 版本,可替换为固定版本如2.20.0
。数据库:
PostgreSQL 用户名为
halo
,密码需与spring.r2dbc.password
一致。数据持久化:
./halo2
存储博客内容,./db
存储数据库。
外部访问地址:
--halo.external-url
需改为实际访问地址(如http://yourdomain.com
)。
4. 启动服务
docker-compose up -d
实时查看日志:
docker-compose logs -f
三、访问与初始化
浏览器访问
http://IP或域名:8090/console
进入管理界面。首次启动需初始化管理员账号、博客名称等信息。
四、更新与维护
更新版本
修改docker-compose.yaml
中的镜像版本,执行:
docker-compose up -d
备份数据
备份
~/halo/halo2
和~/halo/db
目录。推荐使用官方备份插件导出完整数据。
五、反向代理配置(可选)
通过 Nginx 或 Caddy 实现域名访问:
1. Nginx 配置示例
nginx
复制
server {
listen 80;
server_name yourdomain.com;
client_max_body_size 1024m;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2. Caddy 配置示例
复制
yourdomain.com {
reverse_proxy 127.0.0.1:8090
}
六、常见问题
端口冲突
修改docker-compose.yaml
中的8090:8090
为其他端口(如8080:8090
)。数据库连接失败
检查halodb
容器的健康状态:bash
复制
docker-compose ps
域名访问异常
确保服务器安全组放行端口,并正确配置 DNS 解析。