开源建站工具-halo 2.0
🚀 开源建站工具-halo 2.0
✨ Halo 简介
Halo 是一款现代化的 开源博客系统,由 Java 开发,支持插件扩展和主题自定义,旨在为个人用户、开发者和中小团队提供一个高效、优雅的写作与发布平台。
与传统的 WordPress 等 PHP 博客相比,Halo 的特点更加鲜明:
- 🛠 现代化架构:基于 Spring Boot + JPA,性能稳定,扩展性强。
- 🎨 主题丰富:官方与社区提供了大量主题,可一键切换,也支持开发者自定义。
- 🔌 插件生态:插件中心支持 SEO 优化、存储扩展(如 OSS、COS)、评论系统、分析工具等。
- 📦 部署灵活:支持 MySQL/PostgreSQL 作为数据库,Docker、Kubernetes、裸机均可运行。
- 📱 响应式后台:自带现代化管理后台,支持移动端操作。
- 🌍 国际化支持:内置多语言,适合不同地区用户使用。
Halo 在开发者和自媒体群体中越来越受欢迎,被广泛应用于 个人博客、技术文档、知识库、轻量级 CMS 等场景。
接下来,我们将通过 Docker 来部署 Halo,并结合 MySQL 数据库 和 Nginx 反向代理,搭建一个完整的可上线的生产环境。
⚙️ 环境准备
- 一台 Linux 服务器(推荐 Ubuntu 20.04+ / Debian 10+ / CentOS 7+)
- 已安装 Docker 与 Docker Compose
- 域名一枚(例如:
blog.example.com) - Nginx 作为反向代理(同时可选配 SSL 证书)
🛠️ 部署步骤
1. 创建 MySQL 容器
Halo 需要外部数据库存储数据,官方推荐使用 MySQL 8+ 或 PostgreSQL。这里以 MySQL 为例:
services:
mysql:
image: mysql:8.4
container_name: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: password #你的Mysql root密码
MYSQL_DATABASE: halo #你的halo数据库名称
MYSQL_USER: halo #你的halo数据库用户名
MYSQL_PASSWORD: password #你的halo数据库密码
volumes:
- ./mysql_data:/var/lib/mysql
networks:
- halonet
networks:
halonet:
external: true
创建docker网络halonet
sudo docker network create halonet
保存为 docker-compose-mysql.yml,然后运行:
docker compose -f docker-compose-mysql.yml up -d
2. 创建 Halo 容器
Halo 官方提供了 Docker 镜像,可以单独运行一个服务容器,连接到 MySQL。
services:
halo:
image: halohub/halo
container_name: halo
restart: unless-stopped
environment:
SPRING_R2DBC_URL: r2dbc:pool:mysql://mysql:3306/halo #数据库地址和端口,我这里halo和mysql共用一个网络,就用容器名代替
SPRING_R2DBC_USERNAME: halo #你的halo数据库名称
SPRING_R2DBC_PASSWORD: password #你的halo数据库密码
SPRING_SQL_INIT_PLATFORM: mysql
HALO_EXTERNAL_URL=https://blog.cset.090321.xyz/
volumes:
- ./halo_data:/root/.halo2
# ports: #后面要进行反代,就不暴露端口了
#- "8090:8090"
networks:
- halonet
networks:
halonet:
external: true
保存为 docker-compose-halo.yml,运行:
docker compose -f docker-compose-halo.yml up -d
3. 配置 Nginx 反向代理
为了让外部用户通过域名访问博客,需要使用 Nginx 做反向代理。
示例配置(/etc/nginx/conf.d/halo.conf):
server {
listen 80;
server_name blog.example.com;
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
测试配置是否正确:
nginx -t
systemctl reload nginx
如果有 SSL 证书,可以开启 HTTPS(推荐使用 Let’s Encrypt 自动证书):
server {
listen 80;
server_name blog.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name blog.example.com;
ssl_certificate /etc/letsencrypt/live/blog.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.example.com/privkey.pem;
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
🎉 部署完成与管理
至此,Halo 博客系统已完成部署:
- 访问
http://blog.example.com即可进入博客前台 - 后台管理入口:
http://blog.example.com/console - 使用 MySQL 作为数据存储,数据持久化在宿主机
- 通过 Nginx 反向代理,支持域名访问与 HTTPS
📝 总结
Halo 是一款优秀的现代博客系统,兼顾了 轻量化、易用性和可扩展性,相较于 WordPress,更适合想要 简洁写作、快速部署 的开发者与独立博主。
本文链接:
/archives/halo2.0
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
西西乐园!
喜欢就支持一下吧