官方的反代的教程有点复杂了,且暴露了halo和数据库容器端口给公网,不是很安全,稍稍小改一下,不在公网暴露halo和数据库的端口,这样也能一定程度保障博客的安全。
- 使用 Docker Compose 部署
1.创建文件夹
在系统任意位置创建一个文件夹,此文档以 ~/halo 为例。
mkdir ~/halo && cd ~/halo
2.编写docker-compose.yaml
- 以Halo + PostgreSQL为例
服务器只开启80和443,由于Docker会在UFW上打洞,所以halo端口映射为
127.0.0.1:8090:8090
,同一个Bridge网络下,数据库postgres不需要映射端口的。
创建:nano docker-compose.yaml
根据官方的教程修改为如下:
version: "3"
services:
halo:
image: halohub/halo:2.4
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo:
volumes:
- ./:/root/.halo2
ports:
- "127.0.0.1:8090:8090"
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8090/actuator/health/readiness"]
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
command:
- --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- --spring.r2dbc.password=92fe91b4893841879348c973e3925a10
- --spring.sql.init.platform=postgresql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=https://yourdomain.com
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admain
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=92fe91b4893841879348c973e3925a10
halodb:
image: postgres:latest
container_name: halodb
restart: on-failure:3
networks:
halo:
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=92fe91b4893841879348c973e3925a10
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
networks:
halo:
3.启动 Halo 服务
# 启动 Halo 服务
docker-compose up -d
# 实时查看日志:
docker-compose logs -f
4.nginx 反代
最后nginx反代内网127.0.0.1:8090
即可:
server {
listen 80;
listen [::]:80; #无IPv6,此项可以删除。
return 301 https://$host$request_uri; #HTTP自动跳转HTTPS,让网站看起来更真实。
}
server {
listen 80;
listen [::]:80; #无IPv6,此项可以删除。
server_name _;
return 400;
} #限定域名访问(禁止以IP方式访问网站)并返回400
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourdomain.com;
# ssl 证书存放路径
ssl_certificate /etc/nginx/cert/fullchain.crt;
ssl_certificate_key /etc/nginx/cert/private.key;
client_max_body_size 30M; #防止上传主题文件失败
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;
}
}
}
配置https请参照acme申请证书
使用 https://yourdomain.com 就能愉快的访问Blog啦!
...