Featured image of post Docker 部署 Halo 博客系统-PostgreSQL ✨

Docker 部署 Halo 博客系统-PostgreSQL ✨

Docker 部署 Halo 博客系统-PostgreSQL ✨ 📋 目录导航 🎯 项目简介

Docker 部署 Halo 博客系统-PostgreSQL ✨

Halo Banner


📋 目录导航


🎯 项目简介

Halo 是一款现代化的开源博客/CMS 系统,基于 Java 和 Spring Boot 构建。它提供了丰富的主题和插件生态系统,让用户可以轻松创建和管理自己的网站。


🛠️ 核心特性

特性类别 功能描述 优势
🎨 主题系统 丰富的主题选择 支持自定义设计,满足个性化需求
🔌 插件生态 功能扩展灵活 社区插件丰富,满足各种需求
📝 编辑器 富文本和Markdown支持 强大的内容编辑体验
👥 用户管理 多用户权限控制 支持团队协作和权限管理
📊 数据统计 访问统计和分析 提供详细的数据分析报告
🔍 SEO 优化 内置SEO功能 提升搜索引擎排名和可见度
🌐 响应式设计 多端适配 在手机、平板和电脑上均有良好体验
🐳 Docker 部署 容器化部署 简单便捷,易于维护和升级

🐳 一、Docker 部署 Halo 博客

1. 创建目录并编写 docker-compose.yml 文件 📁

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
mkdir -p /mnt/mydisk/home/halo && cd $_ && \
cat > docker-compose.yml <<'EOF'
services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=openpostgresql
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
  halodb:
    image: postgres:17.6
    container_name: halodb
    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
      - PGUSER=halo

networks:
  halo_network:
    name: halo_network
    driver: bridge

# Halo博客_后台地址:http://10.10.10.245:8090/console
EOF

2. 拉取镜像并启动容器 🚀

1
docker-compose up -d

3. PostgreSQL 版本管理与验证 🔍

  • 如需使用其他版本的 PostgreSQL 镜像,可以使用以下命令查询可用版本标签:
1
2
curl -sS "https://registry.hub.docker.com/v2/repositories/library/postgres/tags/?page_size=100" \
| jq -r '.results[].name' | grep -E '^[0-9]+(\.[0-9]+)?$' | sort -V
  • 部署完成后,可以使用以下命令验证 PostgreSQL 版本:
1
docker exec -it halodb pg_config --version

🚀 二、使用 Halo 博客

1. 首次访问设置 🎯

  1. 打开浏览器访问: http://你的服务器IP:8090/console
  2. 按照页面提示完成初始设置:
    • 创建管理员账户
    • 设置博客基本信息
    • 选择初始主题

2. 功能特性 ✨

  • 🎨 主题系统: 丰富的主题选择,支持自定义
  • 🔌 插件生态: 扩展功能,满足各种需求
  • 📝 编辑器: 强大的富文本和Markdown编辑器
  • 👥 用户管理: 多用户支持,权限控制
  • 📊 数据统计: 访问统计和内容分析
  • 🔍 SEO 优化: 内置SEO功能,提升搜索引擎排名

🌐 三、Nginx 反向代理配置

访问地址示例: https://halo.example.com:666

1. 创建 Nginx 配置文件 🔧

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
mkdir -p /etc/nginx/conf.d && \
cat > /etc/nginx/conf.d/halo.conf <<'EOF'
server {
    listen 666 ssl;
    listen [::]:666 ssl;
    server_name halo.example.com;   # 替换为你的域名

    # SSL 证书
    ssl_certificate /etc/nginx/keyfile/cert.pem;
    ssl_certificate_key /etc/nginx/keyfile/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_ciphers ECDHE+AESGCM:ECDHE+CHACHA20:!aNULL:!MD5;

    # 安全头部
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # 文件大小限制
    client_max_body_size 100M;

    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;
        proxy_http_version 1.1;
        proxy_buffering off;

        # WebSocket 支持
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # 错误页
    error_page 404 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}
EOF

2. 测试并重载 Nginx 🔄

1
sudo nginx -t && sudo systemctl reload nginx

🔧 四、容器维护命令

1. Docker Compose 命令 🐳

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 进入项目目录
cd /mnt/mydisk/home/halo

# 停止并删除容器
docker-compose down

# 拉取最新镜像
docker-compose pull

# 启动容器
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看服务日志
docker-compose logs

# 跟踪服务日志
docker-compose logs -f

# 完整升级流程
docker-compose down && \
docker-compose pull && \
docker-compose up -d && \
docker image prune -f

2. Docker 容器命令 📦

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查看运行中容器
docker ps

# 停止/启动/重启容器
docker stop halo halodb
docker start halo halodb  
docker restart halo halodb

# 删除容器
docker rm halo halodb

# 进入容器Shell
docker exec -it halo sh
docker exec -it halo bash

# 查看容器日志
docker logs halo
docker logs halodb
docker logs -f halo
docker logs --tail 50 halodb

# 监控资源使用
docker stats halo halodb

# 查看容器详情
docker inspect halo

3. Docker 镜像管理 📀

1
2
3
4
docker images
docker rmi halohub/halo:2.20.12 mysql:8.3.0
docker image prune -f
docker image prune -a -f

🌟 启航创作,连接世界

通过本文档,你已经成功使用 Docker 部署了 Halo 博客系统,并借助 Nginx 反向代理实现了安全便捷的远程访问。现在,你可以:

✍️ 自由表达 书写所想、记录生活、分享知识,打造属于你自己的内容天地
🎨 个性定制 借助丰富的主题与插件,构建独一无二的博客风格与功能
🌍 广泛传播 通过多端适配与SEO优化,让你的内容被更多人发现与认可
🤝 互动交流 开放评论与订阅功能,与读者建立更深度的连接与对话

博客不仅是记录的工具,更是思想的载体和连接的桥梁。愿 Halo 成为你畅所欲言、展示自我的最佳伙伴,陪伴你在每一个创作的时刻和分享的瞬间。

从现在开始,发布你的第一篇博客,向世界发出你的声音吧!🚀


📌 持续关注:建议订阅 Halo 官方更新 ,及时获取新功能与主题插件。
🐛 反馈与支持:使用中如有问题或建议,可前往 GitHub Issues 提出。

祝你写作愉快,博客有成!🎉