前言
现在市面上有很多其他的免费博客网站,为什么要搭一套个人的博客?不为别的,极客的世界不就是为了折腾吗~😝
写博客一方面是为了将自己踩坑的经历写出来分享给后来的人;更重要的是自己的思路的总结和整理,避免自己以后也落入相同的坑。因此记录下这一篇,以防自己或者后来人重复踩坑😃
为什么选择Halo?
在众多开源博客方案里面,Halo的门槛可以说是最低的之一。仅仅需要少部分基础知识,花费很少的时间,即可搭建好你专属的博客。本篇教程是介绍基于Docker的部署方式,比本地化部署更简单便捷,而且并不会有性能损耗。是现在最为流行的部署方式。
一、基础设施
1.1 服务器
配置信息
- 所属区域:中国香港
- 所在节点:CMI Direct
- 核心数量:1 核心
- 实际内存:1024 MB
- 数据磁盘:10 GB
- 出口带宽:30Mbps
这是一台位于香港的基于KVM架构的VPS主机。配置很丐,但是拿来建个博客站还是足够了。Halo本身性能很好,无论是编写文章还是浏览都是比较流畅的。在这之前还搭建了一个Wordpress,性能不如Halo(纯主观感受无数据支撑),不论是编辑还是浏览都比较缓慢。
1.2 域名
域名可以去各大域名商进行购买,促销的时候普通的com域名或者cn域名一年只需要几十块钱。放两个链接:第一个是我买域名的服务商GoDaddy;第二个是随便在知乎上爬的一篇文。都是官网,放心点击。
① GoDaddy,国际知名域名提供商,配合海外的VPS使用,建站无需在国内备案
② 去知乎爬一爬文,搜索几个性价比高的域名供应商也是可以的
1.3 DNS
域名解析推荐CloudFlare。CloudFlare可以提供全世界范围内的域名解析,并且基础服务完全免费。基础服务包括域名解析、全链路SSL加密、基础CDN加速、防攻击等等。注册仅需要邮箱即可。
购买域名后,在域名供应商提供的管理后台里面把DNS服务器设置为CloudFLare提供的域名解析服务器即可,既方便又安全。只是他家的基础CDN加速节点全部位于海外,这对于国内的用户来说不够友好。但是如果仅仅是需要他家的域名解析服务的话,还是强烈推荐的。
二、软件环境
2.1 操作系统
CentOS Linux release 7.8.2003
2.2 网关
nginx version: nginx/1.16.1
三、安装流程
3.0 安装前准备
更新系统软件到最新版本
sudo yum update -y
3.1 安装Docker
直接yum安装即可
sudo yum install docker-ce docker-ce-cli containerd.io
使用systemd开启docker服务
sudo systemctl enable docker
sudo systemctl start docker
3.2 安装Halo
如果系统端口8090可用,只需默认拉取最新Halo镜像即可:
sudo docker pull ruibaby/halo
创建容器并运行:
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped ruibaby/halo
参数解释
- -p: 端口映射,将宿主机的8090端口映射到Docker镜像的8090端口
- -v: 目录映射,将宿主机的~/.halo目录映射至Docker镜像的/root/.halo目录,宿主机的目录可修改为自己习惯的存储路径
- --restart=unless-stopped:除非主动使用 docker stop halo,否则Docker会将停止运行的容器自动重启。
配置完成后即可通过 ip:port 进行访问了。如果已经配置了域名,下一步讲解如何通过域名进行访问。
3.3 安装nginx
直接yum安装并启用:
sudo yum install nginx
sudo systemctl enable nginx
sudo systemctl start nginx
查看是否正常运行:
sudo systemctl status nginx
3.4 配置nginx转发
创建配置文件,请根据自己的域名进行配置,下面以我的博客地址为例:
sudo vim /etc/nginx/conf.d/blog.lisuibiao.com.conf
填入以下代码并保存:
server {
listen 80;
server_name blog.lisuibiao.com;
rewrite ^ https://$http_host$request_uri? permanent; #强制将http重定向到https
server_tokens off;
}
server {
listen 443 ssl;
server_name blog.lisuibiao.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
server_tokens off;
ssl_certificate /etc/nginx/ssl/lisuibiao.com.fullchain;
ssl_certificate_key /etc/nginx/ssl/lisuibiao.com.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# secure settings (A+ at SSL Labs ssltest at time of writing)
# see https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';
ssl_prefer_server_ciphers on;
proxy_set_header X-Forwarded-For $remote_addr;
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-Host $server_name;
proxy_set_header X-Forwarded-Proto https;
access_log /var/log/nginx/blog.access.log;
error_log /var/log/nginx/blog.error.log;
proxy_read_timeout 1200s;
client_max_body_size 0;
}
}
稍微解释一下这个配置文件。这个配置文件的前半部分是我的https标准模板,直接将所有的http流量重定向到https,并且在443端口配置了ssl证书。后半部分的部分代码:
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-Host $server_name;
proxy_set_header X-Forwarded-Proto https;
access_log /var/log/nginx/blog.access.log;
error_log /var/log/nginx/blog.error.log;
proxy_read_timeout 1200s;
client_max_body_size 0;
}
则是将https://blog.lisuibiao.com/ 反向代理至 http://127.0.0.1:8090,即我们的运行中的Halo容器。以此实现了通过域名访问Halo的目的。
如果没有配置HTTPS,则将此部分代码粘贴至配置文件监听80端口的server即可。
引用文章
- 本文链接: https://blog.lisuibiao.com/archives/十分钟搭建halo
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!