Hexo博客部署到云服务器

2015年开始使用Hexo写博客,并将博客托管在GitHub上,同时在阿里云买了域名做了备案。但是由于GFW的原因在国内访问极慢,于是后来托管到CODING上,终于平稳运行了一段时间。在2021年年底收到来自CODING的一封邮件,意思就是CODING不再提供网站托管功能,已托管的网站后续需在腾讯云Serverless控制台进行域名配置、部署等操作.

不过这个影响不大,只不过管理入口发生了变化。可是就在2022年2月份,我又收到一封来自阿里云的邮件,说我的备案信息存在2个问题,问题1是备案接入信息与实际接入信息不符;问题2是网站下方备案编号未指向工信部网站。

后者好解决,可前者因为当时备案的阿里云服务器早就已经到期回收了,而且现在博客托管在腾讯云,哪怕申请了阿里云服务器也还是无法解决问题。于是我上腾讯云官网查看下了有关ICP备案的相关内容,发现我这种情况只需在腾讯云做“接入备案”即可,终于发现了一丝曙光

可就在我暗中窃喜的时候,我又看了如下信息……通过腾讯云Serverless服务进行备案,需要购买Serverless服务资源包,并且需满足腾讯云账号实名认证类型为“企业”和备案主体类型为“非个人”。犹如晴天霹雳。

既然这样,那就只剩下最后一条路了,买台阿里云服务器,然后将Hexo博客部署到云服务器,这样就可以完美解决啦!

有人会说先申请一台阿里云服务器,等阿里云备案信息核查通过后再退库后就可以,只是这样只能应付一时,长期来看并不是最优解决方案。而且近年来备案的要求和审查力度越来越严格了,建议还是不要投机取巧。

服务器配置要求


CPU 内存 操作系统 Git版本 WEB软件
>= 1核 >= 2G 推荐CentOS7.x Git2.x 推荐使用宝塔Linux面板安装LNMP套件,操作管理方便

说明
WEB软件也可自行安装Nginx或Apache,推荐使用宝塔Linux面板是因为其不仅可以方便的添加网站和开启HTTPS,还支持对服务器进行资源监控,端口管理等功能,是一款能够有效提升运维效率的服务器管理软件。

Git安装及配置


说明
因为CentOS自带的系统yum源中的Git版本较低,此处采用源码编译的方式进行安装

安装依赖库和编译工具

1
yum install gcc openssl-devel curl-devel expat-devel -y

说明
如果自带的系统yum源无法访问,可参考以下方法配置阿里云yum源

1
2
3
4
5
cd /etc/yum.repos.d/
mkdir backup
mv * backup/
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all

下载Git源码包并解压编译安装

Git官方下载页面根据所用操作系统选择对应的安装方法,由于RedHat/Oracle Linux/CentOS通常会发布旧版本的Git,可到此页面下载更新版本的tar包并从源代码构建。

卸载旧版本的Git(如果有的话)

1
yum remove git -y

解压Git源码包

1
2
tar zxf git-2.31.0.tar.gz
cd git-2.31.0

执行编译

1
make prefix=/usr/local/git all

安装Git到/usr/local/git目录下

1
make prefix=/usr/local/git install

配置Git环境变量

修改/etc/profile配置文件并使其生效

1
2
echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/profile
source /etc/profile

验证安装完成

1
git --version

创建Git用户并配置sudo权限

创建Git用户

1
useradd git

配置sudo权限

1
visudo

按向下键(或J键)找到root ALL=(ALL) ALL,在其后面添加以下内容并保存退出

1
git     ALL=(ALL)       ALL

配置密钥

本地机器执行以下命令创建密钥,如果本地机器是Windows则在Git Bash中执行

说明
如果本地机器已有密钥,可跳过此步,无需重复创建

1
ssh-keygen -t rsa

复制~/.ssh/id_rsa.pub里面的公钥内容,在服务器执行以下命令,切换到git用户创建~/.ssh目录,并将刚才复制的公钥内容保存到authorized_keys文件中,修改文件权限,最后切换回root用户

1
2
3
4
5
6
7
8
# 切换至git用户
su - git
mkdir ~/.ssh
echo "替换为id_rsa.pub文件的内容" > ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 切换回root用户
exit

测试从本地机器是否可以通过git用户免密登录服务器

1
ssh git@<yourIp>

创建网站根目录

1
2
mkdir -p /data/web/blog
chown git:git -R /data/web/blog

说明
此网站根目录对应WEB软件的网站发布目录,可自定义。

初始化Git裸仓库并配置自动化部署

1
2
3
4
mkdir -p /data/git
cd /data/git/
git init --bare blog.git # 一定要加上--bare参数哦
chown git:git -R blog.git

此时在Git仓库目录(/data/git/blog.git)下,有一个自动生成的hooks目录,在hooks目录下创建一个新的钩子post-receive,用于自动化部署

1
vim /data/git/blog.git/hooks/post-receive

在文件中添加以下内容,根据实际情况修改工作树目录和Git目录

1
2
3
#!/bin/bash
# git --work-tree=<work-tree-dir> --git-dir=<git-dir> checkout -f
git --work-tree=/data/web/blog --git-dir=/data/git/blog.git checkout -f

修改文件权限

1
2
chown git:git /data/git/blog.git/hooks/post-receive
chmod +x /data/git/blog.git/hooks/post-receive

安装并配置宝塔Linux面板


安装宝塔Linux面板

宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。

说明
宝塔Linux面板安装教程可在官网查看,本文安装的是7.8.0正式版

1
2
cd ~
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

中间会让确认是否默认安装到/www目录下,输入y回车即可

1
Do you want to install Bt-Panel to the /www directory now?(y/n):y

网络状况良好的情况下大概3分钟即可安装完成,安装成功会输出如下内容,其中包括面板的外网、内网访问地址和默认的用户名密码,这些信息也可之后再通过/etc/init.d/bt default命令查看

说明
如果是在阿里云或其他云商的服务器上部署,记得参考官网安装教程开启相关安全组端口,否则将无法正常使用面板

1
2
3
4
5
6
7
8
9
10
11
12
==================================================================
Congratulations! Installed successfully!
==================================================================
外网面板地址: http://xx.xx.xx.xx:8888/fd450357
内网面板地址: http://10.211.55.5:8888/fd450357
username: ffpwe3ya
password: 69420ae8
If you cannot access the panel,
release the following panel port [8888] in the security group
若无法访问面板,请检查防火墙/安全组是否有放行面板[8888]端口
==================================================================
Time consumed: 3 Minute!

配置宝塔Linux面板

浏览器访问面板地址,使用默认用户名密码登录

下拉滚动条并阅读《用户协议》,勾选‘我已阅读并同意“《用户协议》”’,单击“进入面板

因为宝塔面板许多功能都依赖于官网,第一次登录后需要绑定宝塔账号,如果还没有宝塔账号可以单击“登录”按钮下方的“未有账号,免费注册”跳转到注册,如果已有宝塔账号则直接输入账号信息单击“登录”进行绑定

在“推荐安装套件”窗口选择安装“LNMP(推荐)”,仅勾选安装“Nginx”,安装方式选择“极速安装”或“编译安装”均可,最后单击“一键安装”,等待安装完成。

说明
Hexo是一个快速,简单和强大的博客框架,Hexo会将你写的博客快速生成静态文件并附带一个美观的主题,因此只需要安装Nginx即可满足发布博客的要求,其余组件可视自身情况勾选安装。

添加网站并按需配置SSL证书

单击“网站”>“添加站点

填写网站相关信息后,单击“提交

  • 域名:设置网站域名,如需填写多个域名,请换行填写,每行一个域名,默认为80端口
  • 根目录:此处设置的根目录就是之前创建的网站根目录/data/web/blog,如果不是根据教程创建的,选择相应的目录即可

到域名注册商根据服务器类型(此处为Nginx)下载对应域名的SSL证书(以阿里云为例),其中.key后缀的是密钥,.pem后缀的是证书。

单击刚创建的网站SSL证书下的“未部署”字样

选择“其他证书”,用文本编辑器完整复制粘贴密钥(KEY)和证书(PEM或CRT格式)的内容到对应的文本框中,单击“保存

证书添加成功后在右上角打开“强制HTTPS

配置本地Hexo


在博客根目录_config.yml中添加以下内容

1
2
3
4
5
6
7
deploy:
# Deployment 部署到自建Git
- type: git
# repo: git@<x.x.x.x>(服务器IP):<git-dir> #仓库地址
# repo: ssh://git@<x.x.x.x>(服务器IP):<ssh-port><git-dir> #发布至SSH非22端口服务器
repo: git@10.211.55.5:/data/git/blog.git
branch: master

执行部署

1
hexo clean all && hexo g && hexo d

访问博客域名,看是否成功

说明
访问前需要在域名注册商配置域名解析,将域名解析到云服务器IP地址,如果是本地服务器也可通过配置hosts解析进行测试。