既然是建站第一篇文章,就记录一下本博客网站搭建的过程吧。其实官方文档已经十分丰富全面了:https://docs.halo.run/
1. 模板选择
市面上有很多建站工具可以选择(halo,typecho,wordpress等),看了YouTube评测做了攻略(https://blog.laoda.de/)后出于主题较为丰富和好看选择了halo。
2. 服务器安装docker及compose
vps是ubuntu 20.04,docker安装官方文档:https://docs.docker.com/engine/install/ubuntu/
指令如下:
2.1移除旧版本(若是全新vps,可忽略)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
该指令删除内容为:
docker.io
docker-compose
docker-compose-v2
docker-doc
podman-docker
2.2添加docker源
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2.3 安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
该命令包括了docker及docker compose
3.搭建准备
安装nginx proxy manager容器来进行反代访问博客,所以涉及到容器之间访问,需要对docker网络做调整
docker network create personal_net #创建一个自定义docker网络personal_net
ufw防火墙开放指定端口(80,443)
ufw allow http #放行80
ufw allow https #放行443
4.配置halo compose
我直接使用的是root用户,在/root/目录下,新建halo文件夹
cd #到root家目录
mkdir -p compose/halo #创建compose目录及目录下halo目录
cd compose/halo #进入目录
vi docker-compose.yaml #挑一个会用的编辑器(vi,vim,nano等等)
将下面compose配置粘贴进docker-compose.yaml,与官方文档给的配置不同的地方在于
networks改为和上面对应的personal_net
数据库mysql端口做了映射"13306:3306"以备后续使用
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.20
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
- personal_net
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
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=root
# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
- --spring.r2dbc.password=o#DwN&JSa56
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: mysql:8.1.0
restart: on-failure:3
networks:
- personal_net
command:
- --default-authentication-plugin=caching_sha2_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
volumes:
- ./mysql:/var/lib/mysql
- ./mysqlBackup:/data/mysqlBackup
ports:
- "13306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
interval: 3s
retries: 5
start_period: 30s
environment:
# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
- MYSQL_ROOT_PASSWORD=o#DwN&JSa56
- MYSQL_DATABASE=halo
networks:
personal_net:
external: true
5.配置npm compose
同第四步写配置的方式:
cd #到root家目录
mkdir -p compose/npm
cd compose/npm #进入目录
vi docker-compose.yaml #挑一个会用的编辑器(vi,vim,nano等等)
将下面npm compose配置粘贴进docker-compose.yaml中
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
networks:
- personal_net
container_name: npm
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
- TZ=Asia/Shanghai
networks:
personal_net:
external: true
6.启动容器
到各自服务的compose目录下执行docker compose up -d
cd /root/compose/halo
docker compose up -d
cd /root/compose/npm
docker compose up -d
7.npm反代halo
7.1防火墙放行npm web页面
npm web端口默认为81
ufw allow 81/tcp
然后地址栏输入ip:81访问npm web设置页面
7.2设置halo反向代理
这里痛点(反代ip填写)已经在前面docker 网络配置解决。
7.2.1 Forward Hostname / IP
查看所有使用容器网络personal_net的容器ip,指令如下:
docker network inspect personal
输入信息中找到halo容器ip信息:
"IPv4Address": "172.18.0.4/16"
故halo博客容器ip为:172.18.0.4
进入web,默认用户名密码如下,登录,创建用户名密码等
Email: [email protected] Password: changeme
依次点击dashboard->proxy hosts->Add Proxy Host
domain names填写博客域名
Forward Hostname / IP填写:172.18.0.4
端口填写halo compose配置中映射端口:8090
7.3npm反代主机服务
有些服务可能不是用docker搭建,依然可以用npm反代,但是Forward Hostname / IP就不能简单的填写localhost了,此时localhost代表的是npm容器内部主机。
解决办法:
7.3.1使用网关ip
获取 Docker 网络网关 IP:
docker network inspect personal_net
找到 Gateway
字段,例如 172.18.0.1
。
7.3.2防火墙放行网关ip
在 NPM 中配置反向代理时,将 IP 地址设置为该网关 IP,端口为宿主机上服务的端口。当然,还需要配置一下防火墙:
ufw allow from 172.18.0.0/16
评论区