写在前面
0xfaner 白嫖了一台阿里云的云服务器!
这就是故事的开端:受疫情的影响,阿里云推出了「学生“在家实践”计划(现活动已结束)」。0xfaner 免费领到了一台 2 核 4G 的云服务器 ECS
。
0xfaner 虽然抢到了服务器,但是麻烦也接踵而至。
首先,0xfaner 收到了阿里云的通知,要求博客添加备案信息,否则要罚款,但是他发现自己没有进行公安备案,于是嫌麻烦的他索性连 ICP 备案一起注销了,反正博客托管在Github Page上。
第二天 0xfaner 收到了七牛云的通知,加速域名没有备案,所以图床失效了。0xfaner 访问了自己的博客,发现图床果然炸了,博客背景都没法显示了,凄凄惨惨。于是 0xfaner 把图片托管在了 Github Page 上。但是 Github Page 实在太慢了,过了两天 0xfaner 实在受不了啦,想到了
ECS
还没用,所以打算把博客部署在ECS
上……
五天后,终于配完了 Hexo 的踩坑带师 0xfaner 决定记录一下这次的配置经历。
简介
Hexo 是基于 Node.js 的一款静态博客框架,可以方便地生成静态网页托管在 GitHub 或服务器上。搭建博客的性价比之选,依赖少易于安装。
首先介绍下 Hexo 的机制:本地环境生成静态文件,将这些文件托管在平台上,这样用户只能访问到你生成的静态文件。所以评论这样的功能 Hexo 必须依靠第三方插件实现。但是好处是降低平台负担,仅需要托管即可。
本次部署环境:
远程服务器:CentOS 7.7
本地:Windows 10
注意本文中的本地环境已经配置好了部署到 Github Page 所需的全部要求。
服务器配置
服务器端需要两个环境:
Git,用于接收静态文件并部署到指定文件夹。
Nginx,用于托管静态文件。
Git
安装
首先检查 Git 是否安装:
1 | git --version |
如果显示:-bash: git: command not found
则说明没有安装,那么:
1 | yum install -y git |
配置
为了安全,我们新建一个名为 git 的用户,专门用于接受静态文件:
1 | useradd git // 添加用户名为git |
Git 仓库目录在 /home/git/repos/blog.git
,静态文件部署在 /home/git/projects/blog
:
1 | cd /home/git/ |
我们需要配置 Git,利用 post-receive
实现自动化部署:
1 | cd blog.git/hooks |
输入内容如下(不了解 Vim 文本编辑器操作的用户需要自行了解一下):
1 |
|
然后配置权限:
1 | chmod +x post-receive // 配置可执行权限 |
然后我们测试一下仓库是否成功配置,在本地:
1 | git clone git@0xfaner.top:/home/git/repos/blog.git |
如果能够把空仓库拉下来就说明配置完成。
然后我们建立 SSH 信任关系:
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub git@0xfaner.top // 将本机的公钥复制到服务器中 |
注意使用
Git Bash
进行操作,否则第一条命令ssh-copy-id
无法运行。注意此操作需要本地已经生成过公钥私钥,使用ssh-keygen
生成。
如果不需要密码而成功登陆了,那么说明配置完成,运行命令 logout
即可退出登录。
安全起见,禁用 git 用户的 shell 登录权限,使其只能用 git clone
与 git push
等命令:
1 | cat /etc/shells // 查看 git-shell 是否在登录方式里面 |
然后修改 /etc/passwd
的权限:
1 | vi /etc/passwd |
进行如下修改:
1 | - git:x:1000:1000::/home/git:/bin/bash |
Nginx
安装
首先检查 Nginx 是否安装:
1 | nginx -v |
如果显示:-bash: nginx: command not found
则说明没有安装,那么:
1 | yum install -y nginx |
安装完成后,运行:
1 | nginx |
然后访问自己服务器的IP或域名来看看效果吧。
配置
修改 Nginx 的配置文件 nginx.conf,一般目录为 /etc/nginx/nginx.conf
。
1 | vi /etc/nginx/nginx.conf |
如果目录位置不对,那么:
1 | whereis nginx |
然后根据显示的目录找一下吧(x
将其中的 user
从默认的 nginx
改为 git
或 root
以确保访问权限,防止出现 403 Forbidden
错误。
同时将根目录修改为静态文件所在的目录:
1 | - user nginx; |
修改完成后,运行:
1 | nginx -s reload |
以重启 Nginx。
本地配置
默认大家都是已经实现了 hexo 部署到 Github Page 了,那么只需要修改站点配置文件_config.yml
。
1 | deploy: |
然后本地运行:
1 | hexo s && hexo g && hexo d |
就完成了部署啦~
其他技巧
开启HTTPS
首先需要配置一份证书,可以使用 Let’s Encrypt 的免费证书或在阿里云等服务商处代为申请。
因为是纯静态博客,所以也不需要用 Certbot 进行一键 HTTPS 配置,直接在 Nginx 里面加载证书就行。
首先将证书传输到服务器中,包括 .pem
和 .key
两个文件。
然后将 nginx.conf
文件中的 HTTPS 部分取消注释,修改根目录,并配置证书路径。
1 | user git; |
然后运行:
1 | nginx -s reload |
即可完成配置。
HTTP强制跳转HTTPS
如果希望访问都以 HTTPS 方式,那么需要配置 HTTP 强制跳转 HTTPS。修改 nginx.conf
文件即可。
从下面两段代码中任选一段:
1 | if ($scheme = http) { |
1 | if ($server_port = 80) { |
插入到:
1 | user git; |
然后运行:
1 | nginx -s reload |
即可完成配置。