【99%环境搭建系列】阿里云服务器配置Hexo博客

本文最后更新于:2023年12月20日 下午

前言

这个环境搭建系列好久没更了,所以趁此机会难得填坑一下。

之前一直白嫖是Github pages来部署自己的博客,然后觉得还是有一个自己的服务器更好一点,还能学习相关知识。所以趁还没回学校,把自己的博客部署到自己的服务器上,毕竟之前购买的域名一直没用上,甚是心痛啊。

这次我是在阿里云上买的服务器,主要是因为之前在阿里云上买的域名,所以这次搭建的过程就用阿里云进行说明。

新建用户

这里以阿里云的服务器来举例。

通常创建好服务器实例后,在重置一下实例的密码,就可以用root用户进行ssh连接了。使用root用户登录后,我这里是新建了一个用户,命令如下:

1
2
3
4
# 新建用户
adduser zyx
# 设置密码
passwd zyx

然后赋予zyx用户root权限,具体做法是编辑/etc/sudoers,在root用户下方添加新增的用户名,如下所示。

image-20220213160236426

ssh免密登录

在本地创建密钥,使用命令如下:

1
ssh-keygen -t rsa

然后一直回车,创建一个密钥。因为我是mac系统,生成的密钥文件位置在~/.ssh/id_rsa.pub

然后回到服务器端,创建.ssh目录(在当前用户的~ 目录下即可),并编辑文件.ssh/authorized_keys,复制粘贴刚刚在本地创建好的密钥。

1
vim .ssh/authorized_keys

配置环境

首先需要安装配置一下开发相关的软件环境了,使用的命令如下[1]

1
2
3
4
5
6
7
8
9
10
# 更新下载源
sudo apt-get update
# 安装 git
sudo apt install git
# 安装 vim
sudo apt install vim
# 安装 node.js
sudo apt install nodejs
# 安装 nginx
sudo apt install nginx

这里安装完 nginx ,开启 nginx 服务并确认服务状态。

1
2
3
4
5
# 启动 nginx
systemctl start nginx.service

# 查看nginx服务状态,绿色的active说明启动成功
systemctl status nginx.service

此时访问公网 IP 应该能看到如下的欢迎页:

nginx欢迎页

然后再创建网站目录和远程仓库目录,使用命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建网站目录,以这个目录作为博客静态文件的存放目录,之后再nginx配置文件里会用到
mkdir /home/zyx/hexo
# 创建服务器上的远程仓库目录
git init --bare blog.git
# 新建钩子文件
vim /home/zyx/blog.git/hooks/post-receive

# ---------
# 把如下内容粘贴进去

#!/bin/bash
git --work-tree=/home/zyx/hexo --git-dir=/home/zyx/blog.git checkout -f

# 然后给这个脚本添加执行权限,否则后面博客内容无法进行部署
chmod +x /home/zyx/blog.git/hooks/post-receive

注意上面创建远程仓库的命令,这里加了--bare参数,表示创建的是一个裸仓库,含义是这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作。

开放端口

在安装完nginx并启动服务后,在浏览器中直接访问服务器的公网ip是可以看到nginx的欢迎页的。但是在实际操作中却发现,无法访问。后来发现是没有开放端口,所以我们需要在ECS云服务器的控制台中,在”网络与安全“中的”安全组“中,选择对应的安全组,选择”配置规则“,开放80(http)和443(https)端口。最终效果如下所示,此时再访问公网ip,就可以看到nginx的欢迎页的。

域名解析添加记录

SSL证书

在阿里云中,搜索”SSL证书“产品,选购免费的“DV单域名证书”,然后在控制台里创建证书,填上自己购买的域名和相关信息即可。签发成功后,就可以下载证书。

因为之后使用nginx进行配置,所以我这里下载的也就是nginx对应的证书。下载后会得到一个zip压缩包,解压后得到 .key.pem 结尾的两个文件。

在nginx的安装目录(就是nginx.conf所在的目录,不知道的话可以通过nginx -t来查看配置文件所在目录)下,新建一个 cert 目录,将下载的两个证书文件放到 cert 目录下。

然后修改 nginx.conf 配置文件,添加如下配置[2]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 80;
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名,或者是域名的用为IP
root /home/zyx/hexo; #改成博客目录
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
location / {
index index.html index.htm;
}
}
server {
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
listen 443 ssl;
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
root /home/zyx/hexo; #改成博客目录
index index.html index.htm;
ssl_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换已上传的证书私钥文件的名称。
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 / {
index index.html index.htm;
}
}

网站备案

ICP备案

在右上角控制台旁边,有个“ICP备案”按钮,点击这里进行网站的ICP备案,按照相关流程操作即可[3]。备案时间最好在工作日,大概需要一天时间。还有一个注意点是,备案用的服务器拥有时长必须满3个月以上,否则是无法用于网站备案的,也就是说免费申请的服务器是不能拿来做备案的。(白嫖党落泪QAQ)

只有域名ICP备案之后,才能通过域名访问网站,否则只能通过公网ip进行访问。还要记得在域名解析的控制台里,给自己购买的域名添加记录。

注意这里不用通过搜索“网站备案”来找,会把你导向眼花缭乱的云市场,属实没有必要。并且备案成功之后,注意要在自己的网站页面上增加备案的脚注。

公安联网备案

除了工信部的ICP备案,还需要进行公安联网备案,同样按照阿里云的指导文档进行操作即可[4]。注意在选择服务类型时,不要选择”博客网站“,选择”www服务“即可,不然可能又需要等待下次审核审核。

再补充一下,还需要上传安全评估报告,也就是下图的左侧登录入口。其中填报安全评估报告的内容可以参考安全网络报告中的问题及参考解答

全国互联网安全管理服平台

注意一下,公安联网备案是需要本人现场到本地的网警部门审核签字的,所以最好在当地留出充裕的时间。我的一个惨痛教训就是临近开学的时候申请,结果人去学校了,所以就不能在本地这边办理了。
幸运的是北京这边似乎网上办理就可以了。也就是ICP备案和公安联网备案可以是不同省份,但各个地方会有自己的要求。

Hexo站点配置修改

最后修改本地hexo博客所在目录下的站点配置文件,也就是**_config.yml**,填入之前在服务器上创建的git仓库地址。最终执行hexo clean & hexo g & hexo d命令,就可以将静态文件代码部署到服务器上了,就可以通过域名或者ip进行访问,看到部署好的博客页面。

1
2
3
4
5
deploy:
type: git
repository: [username]@100.0.0.100:/home/git/blog.git #用户名@服务器Ip:git仓库位置
branch: master

问题踩坑

最后再说个我后来迁移博客的时候踩的坑,就是上述准备工作就绪后,在本地执行命令hexo d 进行部署,然后访问公网 ip 结果报错 403 Forbidden,这个报错是主要权限配置错误,即 nginx服务器中的目录和文件可能会出现所有者/组的错误,导致访问权限错误,可能的原因就是 nginx 的启动用户和对应目录的用户不一致,我就是犯了这个错,nginx.conf 文件配置里的 user 一项配置要改成和博客根目录所属的用户一致

除此之外,如果发现执行 hexo d 命令后,服务器上的博客根目录下并没有生成博客网站文件,很可能是之前 git 的钩子文件没有加上写权限。

附录:Nginx常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 停止开机自启动
systemctl disable nginx.service
#设置nginx服务开机自启动
systemctl enable nginx.service
#启动nginx服务
systemctl start nginx.service
#停止nginx服务
systemctl stop nginx.service
#重启nginx服务
systemctl restart nginx.service
#重新读取nginx配置(这个最常用, 不用停止nginx服务就能使修改的配置生效)
systemctl reload nginx.service
# 查看服务当前状态
systemctl status nginx.service
# 查看所有已启动的服务
systemctl list-units --type=service

备注/参考


【99%环境搭建系列】阿里云服务器配置Hexo博客
https://2017zhangyuxuan.github.io/2022/02/13/2022-02/2022-02-13 阿里云服务器配置Hexo博客/
作者
Zhang Yuxuan
发布于
2022年2月13日
许可协议