运维小白
运维小白
发布于 2026-10-25 / 19 阅读
0
0

compose部署halo开源建站工具

后台仪表盘

halo_console1.jpg

广受欢迎的开源明星项目

halo.jpg

多场景建站

博客 - 流畅的编辑体验,快速记录个人想法、发布企业新闻动态
知识库 - 全局搜索与智能问答,构建可持续演进的知识体系
企业官网 - 模块化内容结构,稳定呈现品牌形象与产品服务
在线商城 - 内置商城模块,低门槛迅捷开启在线销售

强大的核心能力

内置编辑器 - 支持富文本与 MD 格式,支持插入多种内容元素
配置表单 - 结构化配置表单,显著提升站点配置效率
日志与监控 - 提供站点运行日志与状态监控
备份与恢复 - 支持站点数据备份与快速恢复
数据迁移 - 支持将站点数据从其他平台迁移至 Halo

高度可扩展

插件机制 - 一键启用 / 关停,独立运载,扩展自如
主题模板 - 丰富的主题资源,打造独特站点风格
RESTful API - 完善的 API 支持,便于集成与二次开发
多种存储策略 - 支持本地及 S3 协议对象存储
身份认证 - 支持多种认证方式,构筑企业级安全访问

全面拥抱 AI

AI 辅助创作 - 智能生成内容,提升创作效率
AI 问答助手 - 将知识库转化为可交互的问答系统
灵活集成 - 支持多种 AI 模型和服务商自由切换
AI Agents 友好 - 提供 Halo CLI 和配套 Skills

compose下载地址

https://github.com/docker/compose/releases

部署halo-compose.yaml镜像自行替换,根据自己需求映射端口

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.27.1
    restart: on-failure:3
    container_name: halo
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo:
    volumes:
      - /data/halo:/root/.halo2
      - /etc/localtime:/etc/localtime
    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:mysql://halodb:3306/halo
      - --spring.r2dbc.username=mysql用户名
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=mysql密码
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mysql:8.0.46-bookworm
    container_name: halodb
    restart: always
    volumes:
    - /data/mysql:/var/lib/mysql
    networks:
      halo:            
    command:
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
      - --binlog_expire_logs_seconds=604800
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      - MYSQL_ROOT_PASSWORD=mysql密码
      - MYSQL_DATABASE=halo
    cap_add:
      - SYS_NICE

  haloweb:
    image: openresty/openresty:1.27.1.2-12-bookworm-fat
    container_name: haloweb
    restart: always
    networks:
      halo:
    ports:
      - "80:80"
    volumes:
      - /data/nginx/conf.d:/etc/nginx/conf.d
      - /data/nginx/logs:/usr/local/openresty/nginx/logs
      - /data/nginx/html:/usr/local/openresty/nginx/html
      - /etc/localtime:/etc/localtime
    depends_on:
      halodb:
        condition: service_healthy
      halo:
        condition: service_healthy
networks:
  halo:
    name: halo
docker-compose -f halo-compose.yaml up -d

编辑haloweb代理配置blog.conf,修改server_name对应域名,根据需求做优化

real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
real_ip_recursive on;

log_format blog '[$time_local] $remote_addr - $remote_user "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
server {
  listen 80 default_server;
  server_name _;
  return 403;
}
server {
    server_name xxxxx.com;
    listen 80;
    client_max_body_size 50M;
    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
        set $year $1;
        set $month $2;
        set $day $3;
    }
    access_log /usr/local/openresty/nginx/logs/blog_access_$year-$month-$day.log blog;
    error_log /usr/local/openresty/nginx/logs/blog_error.log;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://halo:8090/;
    }
}

将blog.conf放到/data/nginx/conf.d目录下,然后重启haloweb

docker restart  haloweb

部署后截图


评论