
基于Halo的博客搭建
这两天想起来以前总说着要搭建一个Blog个人网站。毕竟是一个计算机出生的学生,在学校里面学习这么多年了,连个博客都没有,实在有点说不过去,于是决定立刻开始搭建一个。一开始想着要自己完完全全手搓一个,但是发现无从下手。于是还是打算先基于目前最便捷的框架来直接设计一个。
经过我前期的调研,发现有这么几个wordpress、Halo、solo、poitize。在我的既要又要下,我选择了这个Halo简洁又美观又开源免费的框架。下面简单写一下我的配置过程。
安装docker
基于官方文档,采用docker compose的方式来进行安装。首先要安装docker与docker compose,我的云服务器是腾讯云的轻量级服务器,由于我之前我在服务器上运行了泰拉瑞亚的游戏服务,使用的系统版本为ubuntu 20.04。但是在docker安装文档中提示系统最少要使用22.04的版本,害得我得先重置一下系统。
重置完成后就可以开始安装了,按照一下命令安装一下
# 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 "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# install docker engine
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
运行一个简单的容器,检查一下docker是否安装好
sudo docker run hello-world
这里我提示了网络错误,主要原因是docker的源在国内目前很难使用,于是必须先更新一下docker国内源。我们需要在/etc/docker
目录下面创建文件daemon.json
sudo mkdir /etc/docker
sudo touch daemon.json
sudo vim daemon.json
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.imgdb.de",
"https://docker-0.unsee.tech",
"https://docker.hlmirror.com"
]
}
systemctl daemon-reload
systemctl restart docker
执行完成后在运行之前docker run hello-world应该就能提示成功了。然后是安装docker compose
sudo apt-get update
sudo apt-get install docker-compose-plugin
docker compose version
如果提示正常就安装成功了
安装Halo
接下来我们就可以安装Halo框架,首先创建一个文件夹
mkdir ~/halo && cd ~/halo
创建 docker-compose.yaml
,并输入一下配置文件
touch docker-compose.yaml
vim docker-compose.yaml
##配置文件
version: "3"
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.21
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
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:postgresql://halodb/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
halodb:
image: postgres:15.4
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
networks:
halo_network:
然后启动服务,这里注意一下,因为我使用的是基于docker rep安装的compose,所以命令中,docker和compose之间不要加-
docker compose up -d
然后使用ip+/console 即可进入 Halo 管理页面,首次启动会进入初始化页面。
额外配置项
由于后续需要使用域名来访问我的博客,并且现在网站不使用https协议就会报不安全的问题,所以还需要配置443协议,并为我的域名配置协议证书
首先安装在服务器本机上安装nginx与协议配置软件
sudo apt-get update
sudo apt-get install -y nginx
# 安装 certbot(Let's Encrypt)
sudo apt-get install -y certbot python3-certbot-nginx
然后我们为我们的域名和www.域名配置https协议证书
sudo certbot --nginx -d natsukiz.site -d www.natsukiz.site --expand
然后关闭nginx的默认站点
ls -l /etc/nginx/sites-enabled
# 若看到 default -> /etc/nginx/sites-available/default
sudo rm -f /etc/nginx/sites-enabled/default
添加网站的配置xxx.site
sudo touch xxx.site
sudo vim xxx.site
upstream halo {
server 127.0.0.1:8090;
keepalive 32;
}
# 443:主站(裸域)提供服务
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name natsukiz.site;
ssl_certificate /etc/letsencrypt/live/natsukiz.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/natsukiz.site/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
client_max_body_size 1024m;
location / {
proxy_http_version 1.1;
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_set_header Connection "";
proxy_buffering off;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_pass http://halo;
}
}
# 443:www -> 裸域 301(先完成 TLS,避免默认页)
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.natsukiz.site;
ssl_certificate /etc/letsencrypt/live/natsukiz.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/natsukiz.site/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
return 301 https://natsukiz.site$request_uri;
}
# 80:所有 http 请求统一跳到 https 裸域
server {
listen 80;
listen [::]:80;
server_name natsukiz.site www.natsukiz.site;
return 301 https://natsukiz.site$request_uri;
}
将新配置更新到nginx中
sudo nginx -t
sudo systemctl reload nginx
然后使用域名访问即可!目前我使用的主题是Hao,具体配置可以再控制台中修改