勤劳者
勤劳者
发布于 2026-03-31 / 9 阅读
0

halo的docker一键部署

1. 安装halo

创建一个目录用来存放部署文件(例如 ~/halo):

mkdir ~/halo && cd ~/halo

在目录下创建 docker-compose.yaml 文件:

nano docker-compose.yaml

将以下内容复制并粘贴进去:

services:
  halo:
    image: halohub/halo:latest
    container_name: halo
    restart: always
    networks:
      - halo-network
    volumes:
      - ./halo-data:/root/.halo2
    ports:
      - "127.0.0.1:8090:8090"
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halodb
      - --spring.r2dbc.username=root
      - --spring.r2dbc.password=your_password
      - --spring.sql.init.platform=mysql
      # 外部访问地址,建议修改为你的域名或 IP
      - --halo.external-url=http://localhost:8090/
    depends_on:
      mysql:
        condition: service_healthy

  mysql:
    image: mysql:8.0
    container_name: halo-mysql
    restart: always
    networks:
      - halo-network
    volumes:
      - ./mysql-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=your_password
      - MYSQL_DATABASE=halodb
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$your_password"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  halo-network:
    driver: bridge

2. 配置nginx

    server {
        listen 1025 ssl;
        server_name blog.yourdomain.com;
        ssl_certificate /etc/letsencrypt/live/blog.yourdomain.com/fullchain.pem; 
        ssl_certificate_key /etc/letsencrypt/live/blog.yourdomain.com/privkey.pem; 


        location / {
            proxy_pass http://127.0.0.1:8090;
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 支持 WebSocket (Halo 后台实时通知需要)
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_redirect off;
            client_max_body_size 50m;
        }
    }