记录 Halo 博客的部署实践,从 Docker 安装到主题配置,以及一些踩坑经验
---
上周我终于把个人博客从静态生成器迁移到了 Halo —— 一个基于 Java 的开源博客系统。选择 Halo 的原因很简单:我想要一个有后台管理系统、支持 Markdown、能自托管的博客平台,而且最好别太复杂。
如果你也在考虑搭建自己的博客,这篇文章记录了我从选型到部署的完整过程,希望能帮你少走弯路。
在决定用 Halo 之前,我对比了几个主流方案:
最终选择 Halo 主要是因为它在功能和复杂度之间取得了不错的平衡。
docker run -itd --name halo \
-p 8090:8090 \
-v ~/.halo:/root/.halo \
halohub/halo:2.15
就这么简单。访问 http://你的服务器 IP:8090 就能看到安装界面。
重要: 一定要挂载数据卷!Halo 的所有数据(文章、配置、上传的文件)都存储在 ~/.halo 目录下。如果容器被删除但数据卷还在,重新创建容器后数据会自动恢复。
我推荐用 Docker Compose 管理:
version: '3'
services:
halo:
image: halohub/halo:2.15
container_name: halo
ports:
- "8090:8090"
volumes:
- /home/ubuntu/.halo:/root/.halo
restart: unless-stopped
直接暴露 8090 端口不太优雅,我用 Nginx 做了反向代理:
server {
listen 80;
server_name blog.fredsang.cn;
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;
}
}
用 Certbot 免费申请 Let's Encrypt 证书:
sudo certbot --nginx -d blog.fredsang.cn
Certbot 会自动修改 Nginx 配置并设置自动续期。
Halo 的主题生态比我想象的要丰富。我试了几个主题后,最终选了一个简洁的技术博客风格主题。
选主题的建议:
Halo 是 Java 应用,默认内存占用较高。如果服务器内存小于 1GB,可能会遇到 OOM 问题。解决方案:
# 限制 JVM 堆内存
docker run -itd --name halo \
-e JAVA_OPTS="-Xmx512m" \
-p 8090:8090 \
-v ~/.halo:/root/.halo \
halohub/halo:2.15
如果遇到图片上传失败,检查挂载目录的权限:
sudo chown -R 1000:1000 ~/.halo
重要: 定期备份 ~/.halo 目录!我设置了每天凌晨自动备份到云存储:
# crontab 配置
0 3 tar -czf /backup/halo-$(date +\%Y\%m\%d).tar.gz ~/.halo
整体来说,Halo 的部署体验比我预期的要顺畅。Docker 部署让整个过程变得非常简单,主题和插件生态也在逐步完善。
如果你想要一个"开箱即用"的博客系统,又不想折腾太复杂的配置,Halo 是个不错的选择。
---
本文基于内部对话总结生成,已进行脱敏处理。
原文来源:chat-index/summaries/halo-blog-summary.md*