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: bridge2. 配置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;
}
}