笨蛋也能学会的从零开始在阿里云服务器上搭建halo博客的教程
为什么使用halo
笔者在搭建博客之初时,在wordpress typecho ghost和halo之间纠结过很久,因为本身一开始就想的是搭建一个动态博客站,因此便没有考虑hexo和hugo,毕竟我真的需要很那些也许一辈子都用不上一次的小功能.
之所以使用halo目前还是看重了他的简便性,相比较typecho和ghost,halo部署要简易的多,如果你不想学习(或是没有时间学习)docker的等功能的话,使用类似宝塔面板和halo自身带的1pannel面板也能实现傻瓜式安装。网上教程其实已经也足够充分了,但是分块都很散,需要不断的在网上查找,今天我想尽可能把各种消息全部汇总到同一片文章里面
提前准备
halo是一个动态博客站,需要数据库的支持,因此你显然需要一台服务器,笔者在阿里云下的云服务器吃灰已久,便正好用他来搭建网络博客亲自测试下来,2G2C的服务器搭建好主题等花里胡哨的功能之后正好够用(不排除后续出现问题的可能)

为了以防万一我把自己的服务器的配置po在上面
在购买服务器的时候,因为笔者的服务器只用于搭建博客,并无他用,所以操作系统之类的其实没必要特意去选,随便一个操作系统即可
搭建自己的个人博客站你还需要购买一个域名(总不能指望别人用IP+端口来访问你的博客站)
由于服务器在国内的缘故,如果想要网站解析到自己的服务器上是需要ICP备案的,备案的时间较长,因此最好就在你服务器的运营商那里购买域名,这样备案也方便一些,后续如果迁站换服务器也不需要重复备案
如果你不想备案的的话就是用境外的服务器,相对来说也不会很卡,毕竟只是一个博客站
在阿里云购买域名之前需要填写实名认证模板,阿里云有官方的模板填写教程
个人如何填写并提交实名认证_域名(Domain)-阿里云帮助中心
再填好域名之后就可以购买自己心仪的域名了
域名注册_域名查询_域名申请_域名购买_域名续费_国际域名-万网-阿里云品牌
在挑选挑选新意域名的时候要注意看续费的价格,有很多域名初年价格便宜而续费价格高的离谱,这点要注意,一般来说热门域名贵一些,冷门域名便宜一些
在购买域名之后,你需要备案之后才能将域名解析到国内的服务器,同时,不备案的服务器的80端口和443端口是不能使用的。如果想在国内使用的话备案几乎是必须要做的
注意:备案一般都是在相应的运营商那里进行备案,比如如果你在阿里云购买的域名解析到阿里云的服务器上,就在阿里云就行备案,如果有一天你将服务器迁移至腾讯云,那么你需要在腾讯云重新进行备案才行
当然如果你是第一次备案的话阿里云也已经写好教程了
个人网站ICP备案_备案(Filing Service)-阿里云帮助中心
在填写ICP备案信息的时候会要求你填写互联网信息服务页面,会要求你填写网站内容网站域名,以及网站接入的ECS实例,如果你的服务器也是在阿里云(看到这里你的服务器也确实应该在阿里云)的话会自动搜索的你所有拥有的ECS实例的ID
备案时间比较长,在阿里审核的第二天之后会有人给你打电话确认信息,过了大概几个小时之后会受到工信部的验证码用于核验,核验之后阿里云会提交管局审核大概10天左右,在审核成功后就能拿到ICP备案号了
在备案号拿下来之后你就可以搭建网站了,虽然拿到ICP备案号之后的30天内你需要去做个人网站的公安联网备案公安备案_备案(Filing Service)-阿里云帮助中心,但是可以在网站搭建完成之后再去做,因为你的域名已经可以解析到你的服务器上了,你服务器的80和443端口也都已经开放了
在进行搭建之前别忘了设置服务器安全组,将需要用到的端口开放
DNS配置解析

在阿里云域名控制台可以增加解析,记录类型A即可,因为大部分都是IPv4的地址,主机记录就是你要写的网站域名,比如本网站的域名是blog.name1110.tech,如果你备案的是主域名,你也仍然可以使用该域名的子域名去绑定服务器,记录值就是你服务器的外网IP,绑定之后你就能使用域名加端口的方式来实现访问你的服务器了
搭建博客
终于到主菜了,实际上小白搭建博客的方式非常简单,基本上做一路Next就能实现,考虑到大部分小白怕折腾,这里采用1PANNEL的方法,1pannel通过docker来管理不同应用,因此小白无需特意学习并安装docker的相关知识,上手就能用
安装1pannel
1pannel
$ bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"1pannel安装十分简单,在ROOT下使用这一条指令就能安装
1pannel在安装过程中会要求你设定端口和密码,端口默认即可,设定好密码之后,一路next,他会自动安装docker和1pannel面板,安装好之后会出现

保存好用户和密码,接下来你就可以使用外部地址来访问1pannel面板了,访问1pannel面板之后他会让你及逆行登录,用户名和密码就是你上面所看到的,记得妥善保存
安装openrestry mysql 和 halo
在1pannel的应用商店里面可以一键安装上述的内容

在安装mysql的时候如果你没有外部访问需求可以不勾选开放外部访问,设定好root用户名和密码就可以安装

在安装halo的时候,需要输入数据库用户的名字和密码,外部访问地址默认是localhost建议改为自己的IP加端口(或者你的域名加端口),同时要勾选端口外部访问,这样一来就可以通过外部浏览器来初始化halo了,外部访问地址可以进行修改,我们在做好反向代理的之后还会来修改。
在安装完成之后我们就可以通过你设置的外部访问地址来进入网站对halo实现初始化,初始化时需要设置你的邮箱用户名和密码,站点标题和外部访问地址可以后期修改,设定完成之后就成功搭建完成了
反向代理
目前我们虽然已经解析了DNS,但是端口还是暴露在外,这无疑是不安全的,所以我们需要部署一个反向代理,halo官方教程已经写明了使用Nginx Proxy Manager来实现反向代理
与 Nginx Proxy Manager 配合使用 | Halo 文档
因为halo官方文档已经说过一遍了,不过不影响我在赘述一遍(用来凑字数)
在安装1pannel的时候已经顺便帮你的服务器上安装好了docker,所以不需要再特地配置docker,只需要写好yml文件即可
使用ssh连接服务器,在sudo下
mkdir -p ~/data/docker_data/nginxproxymanager # 创建一个 npm 的文件夹
cd ~/data/docker_data/nginxproxymanager # 进入该文件夹
vi docker-compose.yml生成docker-compose.yml文件,点击i再出现--INSERT--之后输入一下内容
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 不建议修改端口
- '81:81' # 可以把冒号左边的 81 端口修改成你服务器上没有被占用的端口
- '443:443' # 不建议修改端口
volumes:
- ./data:/data # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 data 目录,用于存放数据,如果不存在的话,会自动创建
- ./letsencrypt:/etc/letsencrypt # 点号表示当前文件夹,冒号左边的意思是在当前文件夹下创建一个 letsencrypt 目录,用于存放证书,如果不存在的话,会自动创建注意保证语法格式正确(就是空格回车啥的)如果不确定的可以一行一行复制
最后按esc后输出:wq保存文件退出
由于此时我们NPM绑定的是80端口,而80端口之前绑定时openresty服务,我们需要打开1pannel将这个服务停止(后续我们就不在需要这个了)
之后在对应文件夹下输入
docker compose up -d 就成功配置了npm,可以通过外部浏览器输入IP:81端口进入NPM
默认登录的用户名:admin@example.com 密码:changeme
进去之后会要求你换密码,按要求更换即可
进入之后点击Proxy Host->Add Proxy Host 能看到以下页面

Domain Names:填我们 Halo 网站的域名,首先记得做好 DNS 解析,把域名绑定到我们的服务器的 IP 上Scheme:默认http即可,除非你有自签名证书Forward Hostname/IP:填入服务器的 IP,或者 Docker 容器内部的 IP(如果 NPM 和 Halo 搭建在同一台服务器上的话)Forward Port:填入 Halo 映射出的端口,这边默认是8090Cache Assets:缓存,可以选择打开Block Common Exploits:阻止常见的漏洞,可以选择打开Websockets Support:WS 支持,可以选择打开Access List:这个是 NPM 自带的一个限制访问功能,这边我们不管,后续可以自行研究
说白了你只需要填写域名 IP和端口剩下的都无所谓就是了
IP可以是内部地址,因为你此时的NPM和halo在一台服务器上
save之后成功实现了反向代理
SSL 证书申请
最后 ,我们需要申请一张SSL证书让我们的域名可以HTTPS访问,正巧NPM支持申请新的SSL证书并绑定

打开Force ssl 如果你成功备案,80和443开放并且又没有什么意外的话,你会得到一张3个月的免费SSL证书,证书会3个月自动续期。
当然,如果没用使用NPM申请SSL而是使用别的方法,比如阿里云,阿里云每年支持20张3个月的个人免费SSL证书和68块钱一年的个人SSL证书
在获得后在证书管理页面选择创建证书

过一会你的SSL证书就下来了,接下来你需要下载Nginx服务器类型的Pem和Key

然后回到NPM的管理页面,选择上方的SSL certificate选择Add SSL certificate->custom,导入你刚才获得的key和pem,部署SSL证书,最后回到proxy host界面,选择你刚刚建立的proxy host点击编辑,然后选择弹出框的SSL栏并选择你自己的SSL证书即可
接下来就可以用https://你的域名 来访问你的博客了
图床搭建(可选)
最后就是图床,halo的图片资源是存在本地的,如果你的博客会有很多图片,这就不可避免的造成资源的损失,因此使用图床相对来说是一个更加优雅的解决办法
我使用的是阿里云的OSS来实现图床的搭建(300块钱还没用完)注意OSS不仅存储要钱,流出流量也是要算钱的
在开通OSS之后,首先创建你的bucket

建议使用本地冗余存储(会便宜一些) 阻止公共访问和读写权限默认是私有和未开通,需要你在开通之后再打开
打开之后进入设置
记录下
Bucket名称,Endpoint(地域节点):xxxx,Bucket域名(外网地址):xxxx
然后点击自己头像框(右上)点击Accesskey管理,生成一个Accesskey和id,可以使用RAM用户生成,这样后续比较好管理全权限。
接下来下载Picgo并配置

按照刚刚记录下来的内容填写即可
注意存储区域是地域节点的第一个字段,比如我的字段是oss-cn-beijing 这样就成功配置了。
Halo自身也有使用OSS的插件,可以将图片附件转到你的OSS里面,但是这样的话未来迁站就不太方便,因此手动配置图床要更加好些。
最后别忘了再OSS设置那里打开防盗链,设置白名单以防止爬虫盗链造成流量和经济损失
如果你在Halo站内写文章的话现在就可以了,如果你在站外写文章(比如typora)也可以将picgo配置到typora里面,这样在写文档处理图片的时候会更加优雅