最近使用halo重新搭建了自己的个人博客。相比之前使用hexo搭建的静态博客,自己的体验是类似halo的动态博客日常维护会更加方便,不过动态博客对资源要求会相对高一些。
Halo是基于Java开发的开源建站工具,这里介绍一下使用halo搭建博客的过程,有需要的同志可以自行取用。
这是我搭建好的博客效果:https://xiejinjie.com
博客所需资源
搭建博客需要一台云服务器和一个域名。
最后博客部署的结构如下图:
云服务器选购
云服务器可以选择阿里云、腾讯云或者其它云服务厂商。
这边使用的是阿里云的服务器,阿里云服务器选购。阿里云有每年99元限购一台的服务器,资源配置不是很高2核2GB,但对于个人博客已经足够,而且后续续费依然是这个价格。
注:服务器构建的时候使用阿里云的Linux镜像构建,镜像自带了docker,后续也是使用docker进行构建,会更加方便。
博客搭建
服务器选购好,就可以搭建博客了。
这边使用docker compose进行搭建。docker compose是使用docker容器化技术,通过定义好服务的资源配置文件compose.yaml,然后docker根据配置文件进行服务构建。
根据如下步骤进行搭建:
登录服务器创建博客目录
我们连接到服务器终端,执行下面命令,创建博客目录halo2。
mkdir -p /opt/docker/halo2
创建compose.yaml文件
在创建的目录下创建compose.yaml文件,执行以下命令创建compose.yaml文件。
cd /opt/docker/halo2
vim compose.yaml
compose.yaml内容如下,其中halo定义了博客服务的配置,pg_db定义了数据库文件。
services:
halo:
image: registry.fit2cloud.com/halo/halo:2.21
restart: on-failure:3
container_name: halo
depends_on:
pg_db:
condition: service_healthy
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://pg_db/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
pg_db:
image: postgres:15.4
restart: on-failure:3
container_name: pg_db
volumes:
- ./postgresql:/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
启动博客服务
在halo2目录中执行下面命令,拉取halo镜像,并启动服务。
cd /opt/docker/halo2
docker compose up -d
命令执行成功后,halo2目录下会多出两个目录halo2和postgresql,这两个目录下是前面compose.yaml中定义的服务和数据库挂载目录,用来存放博客服务的数据文件。
访问博客服务
服务成功启动后,云服务厂商服务器的配置安全组规则页面,配置允许8090端口访问。
如下是阿里云配置安全组的操作过程:
博客初始化
使用「服务器ip+端口」直接访问博客了,我这边是 http://8.155.42.30:8090/。
成功访问可以看到系统初始化的提示,填写博客标题和登录用户名密码进行初始化。
初始化成功后,使用「服务器ip+端口」重新访问就可以看到成功部署的博客,右上角登录控制台可以修改博客主题配置和发布新的文章。
域名选购
部署好的博客虽然可以通过「服务器ip+端口」直接访问,但是方便记忆。我们还需要购买一个域名,比如我选择的域名是xiejinjie.com 。
域名购买建议使用和服务器一致的云服务厂商,搜索喜欢的域名和后缀进行选购。
阿里云注册域名的链接:阿里云域名注册。
需要注意的是部分域名首年很便宜,但是续费价格会相对高一些。
域名绑定服务器IP
选购好域名后,需要配置DNS服务,让域名绑定服务器IP,才可以使用域名访问博客。
在云服务厂商的域名管理菜单,添加两条A解析记录 「@」 和「www」指向服务器ip。
dns解析生效后,在服务器终端中使用ping命令向域名发起请求,可以获取到服务器的应答。
ping xiejinjie.com -c 3
SSL证书申请
浏览器会对不支持https的站点添加不安全的标识,使用https访问,需要我们为域名申请配置SSL证书。
推荐使用Certbot工具 直接申请 Let's Encrypt 的免费证书。阿里云和腾讯云的免费证书现在一次只能申请三个月,到期后需要手动续签,服务器需要重新配置新的证书。
Certbot工具 可以在终端直接执行命令进行续签,也可以配置定时任务自动续签。
Certbot 申请配置SSL证书
执行以下命令申请证书,域名换成自己的。
yum install certbot -y
certbot --version
certbot certonly --standalone -d example.com -d www.example.com
命令执行成功后,会在服务器上生成SSL证书的凭证和密钥。
Nginx服务
我们通过Nginx作服务代理,配置SSL证书。
登录服务器创建Nginx目录
mkdir -p /opt/docker/nginx
配置compose.yaml文件
服务器终端执行以下命令,创建compose.yaml文件。
cd /opt/docker/nginx
vim compose.yaml
compose.yaml内容如下,其中挂载目录添加了上面Certbot 生成的SSL证书。
services:
nginx:
container_name: nginx
image: nginx:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./conf.d:/etc/nginx/conf.d
- ./html:/usr/share/nginx/html
- ./logs:/var/log/nginx
- ./ssl/crt:/etc/ssl/crt
# 挂载Certbot生成SSL证书
- /etc/letsencrypt/:/etc/letsencrypt/
extra_hosts:
- "host.docker.internal:host-gateway
配置Nginx
服务器终端执行以下命令,创建nginx配置文件。
mkdir -p /opt/docker/nginx/conf
cd /opt/docker/nginx/conf
vim nginx.conf
nginx.conf内容如下,其中配置的域名替换为自己的:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
rewrite ^(.*)$ https://$host$1;
}
server {
listen 443 ssl;
# 域名替换为自己的
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://host.docker.internal:8090;
proxy_set_header Host $host;
}
}
}
启动Nginx服务
cd /opt/docker/nginx
docker compose up -d
服务启动成功后可以使用域名直接访问博客了,我这边是 https://xiejinjie.com。
ICP备案
在国内服务器运行的站点需要进行ICP备案后才可以正常访问,没有进行备案的域名访问时会被运营商拦截,如果服务器使用的是海外服务器可以跳过这一步。
在云服务厂商ICP备案专栏,按照要求填写相关信息提交备案申请至工信局审核即可,需要七个工作日左右可以通过。
结束
至此,我们博客的搭建工作就全部完成了,接下来就可以自定义博客的主题风格和发布文章了。
halo控制台中的应用市场有丰富的主题和插件,可以选择自己喜欢的主题或者插件直接安装使用。
快使用halo搭建你的个人博客吧,记录自己的生活和成长过程,随着时间的积累你的博客会成为你的一张个人名片。
❤️ 感谢您的耐心阅读 ❤️
⭐️ 欢迎我的微信公众号【晋杰创业拼图】⭐️
🥰 期待与您一同成长进步 🥰
参考资料