在云服务器上部署hexo博客

本文最后更新于:2022年4月20日 上午

在云服务器上部署hexo博客

hexo这类静态博客可以在github上免费直接部署,而且不用考虑高防、负载均衡等问题;但它的域名必须为用户名.github.io,这使得一些名字过长,而且github的大陆访问速度一直不稳定。

  • 其实根据我的实际体验,GitHub每天凌晨两点以后访问特别稳,页面秒开。
  • GitHub也可以自定义域名,选中仓库点击设置,拉到下面就能看到。但是总归是要一个自己的域名。

对于域名过长的问题,有些小伙伴可能想到了去云服务商那里购买一个自己的域名。在这个时候他就会发现一个有趣的问题:没有剩余时长3个月及以上的云服务器,ICP是不发备案号的——也就是说这个域名可以买,但用不了。

对于此,我在阿里云购买了一个域名和一个云服务器。服务器闲着也是闲着,下面记录一下以阿里云为例如何在云服务器上部署hexo博客。服务器配置已经写成了一键配置脚本。

1.一些准备

1.1.域名

要购买域名必须首先在实名填写一个“信息模版”,需要上传身份证正反面无遮挡高清照片。1-2天后审核通过。

审核通过后才能购买域名。搜索你喜欢的二级域名,会显示给你搭配不同顶级域名的价格,比如good.com会比good.xyz贵。点击购买按钮时会跳出来一些可选服务,土豪可以购买全程代办,穷学生可以什么都不选。

这里面有一个“云解析DNS”非常让人困惑,让人不清楚是不是买了域名必须要买这个才能正常使用。实际上那个服务是给你返回你查询这个域名的IP,而不是把你的域名映射到指定的IP上——也就是说和我们搭博客没啥关系。其实在阿里云买域名本身就附带了解析服务。

刚刚购买完域名会显示正在审核,其实此时已经可以做域名到指定IP的映射。2-3小时后审核通过,但此时还是只能做域名到指定IP的映射。如果你尝试使用其他几种映射,比如重定向到另一个域名,就会提示你:没备案,不行。

域名购买后2-3天才会同步给工信部系统,在此之前是不能ICP备案的。

1.2.云服务器

如果是首次购买阿里云服务器,会有99一年的优惠活动,请自行探索。如果已经不是第一次购买——静态博客不需要什么性能,挑最便宜的买就行。首先选地区,推荐上海,网站备案省事(买偏远的服务器会更便宜)。然后选共享型机器(性能突发型),CPU和内存都选最低就行。时长至少选3个月。网络按最低选就行,是固定带宽还是按量付费按需选择即可。

我个人习惯用ubuntu18.04版本。阿里云的服务器直接给root用户,这很好。设置一下密码,主机名。安全策略里面打开80和443端口。

1.3.ICP备案

域名的控制台页面上方应该有一个ICP备案的按钮,点击进入。填写信息后点击“信息校验”。需要通过阿里云手机客户端拍照身份证以及人脸核验。核验通过后可以提交给阿里云初审了。

两三个小时后就会接到阿里云的电话通知阿里云初审的一些不通过的点,可以让客服帮你改也可以你自己在阿里云网站或手机上改。改好后自动提交管局审核。几小时后收到短信验证码提醒,点击短信中的链接,填写验证码和手机号、身份证号,即可通过手机核验。然后静候管局审批。

一般人“网站名称”这一项第一次填几乎不会通过的🤪。不能有身份信息(姓名),不能有行业信息(计算机),不能有平台暗示(博客、XX学校)。总之,别太认真,反正填什么不影响你的网站内容,这个是给管局看的。据说“[adj.]的[n.]”这样就可以通过了,比如“好看的桌子”。还有人曾经写“奇变偶不变”通过了。

一周左右,短信体提醒备案通过。在网站下面加上备案号,备案完成。

1.4.本机hexo环境

参考我以前的文章 hexo博客fluid主题美化

1
2
3
4
xcode-select --install # 安装git
sudo npm install hexo-cli hexo-server hexo-deployer-git -g # 安装hexo
hexo init ~/blog # 初始化博客项目目录
npm install hexo-deployer-git --save # 安装发布插件

2.配置服务器

大体上分为安装软件、设置用户、设置git、配置nginx四个步骤。一键配置脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
echo -e "\033[31mstart apt set\033[0m" &&
apt-get update && apt-get upgrade -y && apt-get install -y git nginx &&
echo -e "\033[31mend apt set\033[0m\n" &&

echo -e "\033[31mstart user set\033[0m" &&
useradd -m git -d /home/git -g root -s /usr/bin/git-shell && echo "git:123456"|chpasswd &&
echo -e "\033[31mend user set\033[0m\n" &&

echo -e "\033[31mstart git set\033[0m" &&
mkdir -p /home/git/Blog/repo /home/git/Blog/hexo /home/git/git-shell-commands && cd /home/git/Blog/repo && git init --bare blog.git &&
echo -e "#\!/bin/bash\ngit --work-tree=/home/git/Blog/hexo --git-dir=/home/git/Blog/repo/blog.git checkout -f" > /home/git/Blog/repo/blog.git/hooks/post-update &&
chown -R /home/git && git chmod -R 755 /home/git && chmod -R 777 /home/git/Blog && chmod 600 /home/git/git-shell-commands &&
echo -e "\033[31mend git set\033[0m\n" &&

echo -e "\033[31mstart nginx set\033[0m" &&
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/old_default &&
echo -e "server {\n listen 80 default_server;\n server_name yourwebsite.com;\n root /home/git/Blog/hexo;\n}" > /etc/nginx/conf.d/blog.conf &&
echo -e "server {\n root /var/www/html;\n index index.html index.htm index.nginx-debian.html;\n server_name _;\n location / {\n try_files \$uri \$uri/ =404;\n }\n}" > /etc/nginx/sites-available/default &&
nginx -t && nginx -s reload &&
echo -e "\033[31mend nginx set\033[0m\nAll sets are finished!"

下面对每一条命令具体解释。

2.1.安装软件

1
2
3
apt-get update # 更新apt库
apt-get upgrade -y # 更新本机已安装软件
apt-get install -y git nginx # 安装git和nginx

2.2.设置用户

1
2
3
4
5
# 新建用户,名为git,登陆目录为/home/git,加入root用户组,默认终端为git终端(权限低)
useradd -m git -d /home/git -g root -s /usr/bin/git-shell

# 设置用户密码
echo "git:123456"|chpasswd #

2.3.设置git

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 在git用户家目录下新建Blog文件夹,里面repo文件夹用于储存git信息,hexo文件夹用于储存网页,最后一个文件夹用来允许git命令
mkdir -p /home/git/Blog/repo /home/git/Blog/hexo /home/git/git-shell-commands
cd /home/git/Blog/repo

# 在repo文件夹下初始化git,新建一个blog仓库
git init --bare blog.git

# 写入配置文件工作目录和发布目录
echo -e "#\!/bin/bash\ngit --work-tree=/home/git/Blog/hexo --git-dir=/home/git/Blog/repo/blog.git checkout -f" > /home/git/Blog/repo/blog.git/hooks/post-update

# 方便给git更高权限
chown -R /home/git
# 不要给777,会导致密钥认证失败。755是下限,不给组外读权限会导致nginx无法展示网页
chmod -R 755 /home/git
# 给权限,不然上传文章会失败或nginx无法展示网页
chmod -R 777 /home/git/Blog
# 默认不给git-shell执行权限,有需求的人可以给执行权限,这样就可以ssh git用户执行操作
chmod 600 /home/git/git-shell-commands

2.4.配置nginx

1
2
3
4
5
6
7
8
9
10
11
# nginx默认的配置有点问题,需要修改一个文件,因此先备份原文件
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/old_default

# nginx的配置,确定你的浏览器地址栏显示的名称和你网页的位置
echo -e "server {\n listen 80 default_server;\n server_name yourwebsite.com;\n root /home/git/Blog/hexo;\n}" > /etc/nginx/conf.d/blog.conf

# 修改nginx原本的陪配置,关掉这里所有监听的80端口,否则会由于端口冲突运行不起来
echo -e "server {\n root /var/www/html;\n index index.html index.htm index.nginx-debian.html;\n server_name _;\n location / {\n try_files \$uri \$uri/ =404;\n }\n}" > /etc/nginx/sites-available/default

# 测试nginx,启动
nginx -t && nginx -s reload

3.本地配置

修改hexo根目录下_config.yml文件,设置git目标:

1
2
3
4
deploy:
type: git
repo: git@[你主机的IP地址或者域名]:/home/git/Blog/repo/blog.git
branch: master

此时应该已经可以使用了,在hexo根目录下使用hexo clean && hexo g -d重新编译博客并发布。浏览器输入域名可以访问。

4.一些后话

  • 没配置密钥登陆,有需求的小伙伴可以自己改一改脚本。

  • 自己测试我的博客在单核0.5G内存1M带宽的机器上可以流畅访问,对于博客小白来说性能应该没什么问题,20G的硬盘只用了3G多。建议把主题的资源文件和博客的图片都扔到图床中,这样对服务器的空间、计算压力、网络压力都有极大缓解。

  • 没测试过高并发能抗多少。或许以后有时间可以试试。

  • 还没找到所安装环境的干净完全卸载方法。nginx使用apt卸载后不会清除etc目录下的配置,使用apt重新安装也不会重建那个目录。所以环境搞坏了请重置云服务器。

本博客所有文章除特别声明外均为原创,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!