Docker-Compose部署
创建Docker-Compose.yaml文件
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.21
restart: on-failure:3
network_mode: "host"
volumes:
- ./halo2:/root/.halo2
environment:
# JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
- JVM_OPTS=-Xmx256m -Xms256m
command:
# 修改为自己已有的 MySQL 配置
- --spring.r2dbc.url=r2dbc:pool:mariadb://127.0.0.1:3306/halo
- --spring.r2dbc.username=*
- --spring.r2dbc.password=*
- --spring.sql.init.platform=mariadb
# 外部访问地址,请根据实际需要修改
- --halo.external-url=*
# 端口号 默认8090
- --server.port=8090
运行容器
docker-compose up -d
安装证书申请
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d blog.example.com
配置nginx
文件路径:/etc/nginx/sites-enabled/halo
server {
listen 80;
server_name blog.example.com ; # ← 替换为你的实际域名
location / {
proxy_pass http://127.0.0.1:8090; # Halo 运行在 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_redirect off;
# 启用 WebSocket 支持(Halo 后台需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# HTTPS 服务器
server {
listen 443 ssl;
server_name blog.example.com;
#上传文件大小
client_max_body_size 50M;
# SSL 证书路径(Certbot 自动生成)
ssl_certificate /etc/letsencrypt/live/blog.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.example.com/privkey.pem;
# 推荐的安全配置(来自 Mozilla 中间兼容性)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 启用 HSTS(防中间人攻击)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 反向代理到 Halo
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_redirect off;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
刷新nginx
sudo nginx -t && sudo systemctl reload nginx