🚀 开源建站工具-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,更适合想要 简洁写作、快速部署 的开发者与独立博主。

文章作者: stature
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 西西乐园
好玩的docker项目
喜欢就支持一下吧