0%

将hexo博客部署到Digital Ocean上

考虑到AWS即将到期,申请了Github的学生开发包薅了Digital Ocean的50刀,用着最便宜的机器挂着博客。
简单记一下部署过程。

建立一个Droplets

略过Digital Ocean注册等等步骤,直接进行新建Droplets(实例)。

选用了如下机型:
旧金山2区 | Ubuntu 18.04.3 (LTS) x64 | 1 GB / 1 CPU | 25 GB SSD disk | 1000 GB transfer
勾选添加在账号的SSH公钥,直接嵌入在新实例中。

创建之后,因为使用了SSHKey创建实例,点击Reset root password,重置一个root密码。
在控制台Console用邮箱发来的重置密钥登录,之后输入一遍重置密钥两遍新密钥即可设定新密码。

使用Windows Terminal SSH登录

正好win的新Terminal还挺好看的,试着在里面加了一个ssh连接配置,前置需要开启电脑的OpenSSH客户端。
打开Terminal设置,直接进入设置文件setting.json,往下拉,在"list"下面新增如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
{
// 网上随便找个GUID生成器生成一个
"guid": "{B9BA33ED-79BE-B0D9-CAFB-0BF61664E9EC}",
"hidden": false,
// 名称和颜色主题自定,主题可以按住`Alt`点击Terminal设置,在打开的`default.json`里面找喜欢的
"name": "Digital Ocean Shell",
"colorScheme" : "One Half Dark",
// SSH命令,使用-i加载本地私钥,省去了每次输密码的麻烦
"commandline":"ssh -i C:/Users/noname/.ssh/id_rsa [用户名]@[IP地址]",
// 一个Linux企鹅icon
"icon" : "ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png"
},

服务端配置

默认都在root用户下进行操作。

创建目录

创建如下两个目录

  • /root/hexoBlog 博客主目录
  • /root/hexoBlog/www nginx根目录

nginx相关配置

安装nginx

1
apt install nginx

修改nginx根目录

1
vim /etc/nginx/sites-available/default

直接修改default文件,将root目录改为上面创建的/root/hexoBlog/www

修改以后检查一次配置文件

1
nginx -t

修改文件夹权限

1
2
3
chmod a+r /root
chmod a+x /root
chmod 777 /root/hexoBlog/www

确保到nginx根目录的路径上每个文件夹都有555以上的权限

重启nginx

1
service nginx restart

nginx配置结束
为了确认是否正常工作,可以在/root/hexoBlog/www下面随便放个index.html再重启,直接在浏览器内访问IP查看能否加载页面。

安装node.js

两行搞定

1
2
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
apt-get install -y nodejs

第一行的setup_12.x可以换成需要的版本号。

git相关配置

安装git

1
apt-get install git

创建一个git用户

用于本地push用

1
adduser git

初始化git文件夹

1
git init --bare blog.git

/root/hexoBlog/blog.git git仓库位置,之后本地hexo推送的内容都在这里

配置 hooks

1
vim /root/hexoBlog/blog.git/hooks/post-receive

写入并保存如下内容:

1
2
#!/bin/sh
git --work-tree=/root/hexoBlog/www --git-dir=/root/hexoBlog/blog.git checkout -f

这个hook的目的是将每次push上去的内容从仓库挪到nginx根目录内

改文件权限

1
chmod +x post-receive

修改git仓库所有权

交给git用户

1
chown -R git:git blog.git

git用户的SSH设置

虽然git用户可以在push的时候输入密码登录,但是太麻烦了,我肯定还是想敲完hexo d -g就立马切出去干点别的,所以得给git用户也配置一个SSH Key。

(在配置文件/etc/ssh/sshd_config内,我把使用密码登录关掉了,强制SSH使用私钥进行连接)

1
PasswordAuthentication no

由于Digital Ocean嵌入的公钥位置在/root/.ssh/authorized_keys内,为了让其它用户也能用私钥登录,需要在其它用户的目录内也新建一个authorized_keys文件填写公钥

切换到git用户,在/home/git下面新建/.ssh/authorized_keys
完整目录结构如下:

1
2
3
4
home
└ git
└ .ssh
└ authorized_keys

在authorized_keys里面填写公钥,SSH默认使用id_rsa作为私钥,因此把id_rsa.pub里面的内容复制进去。

禁用 git 用户的 shell 登录权限

1
vim /etc/passwd

git:x:1001:1001:,,,:/home/git:/bin/bash
改为git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

本地配置

安装hexo

略过

设置deploy

打开hexo的_config.yml,修改deploy如下:

1
2
3
4
deploy:
type: git
repo: git@IP地址:/root/hexoBlog/blog.git
branch: master

测试git的SSH连接

1
ssh -t git@IP地址

连接上后会因为被禁止shell登录强制退出,但是能正常连上就行了。

域名和Cloudflare

由于是从aws搬来的,域名服务商那边的解析已经设置成Cloudflare了,这里重新写一次。

修改NS服务器

首先把域名服务商的DNS解析服务器修改为Cloudflare提供的NS地址,例如

1
2
asa.ns.cloudflare.com
gabe.ns.cloudflare.com

二级域名设置

由于本博客是挂在wsswms.dev下面的blog子域名,因此在Cloudflare里添加一条A记录,名称为blog,内容就设定成服务器IP即可。

缓存

因为博客调试时页面内容变化较大,为了能及时显示,需要清理Cloudflare的缓存或者直接关闭缓存。

Cloudflare的域名首页开启开发模式;如果需要强制刷新缓存时,进入缓存选项卡选择清除所有内容

其它

新版NexT主题自定义css的设置

新版的next修改了自定义css的位置,网上很多关于背景图片/透明度等等的设置在新版中需要做一些改动。

首先打开next主题的_config.yml文件,在custom_file_path中启用style: source/_data/styles.styl这一行。
这里的source指的是hexo博客的source目录,按照默认路径在source/_data/styles.styl位置创建文件,其功能和旧版中的themes/next/source/css/_custom/custom.styl是一样的,以修改背景图片为例,在styles.styl添加如下部分即可:

1
2
3
body { 
background:url(https://raw.githubusercontent.com/wsswms/blogImg/master/img/006Z5VJxgy1ft02wfgednj30co0bvwem.jpg);
}

欢迎在Weibo和Twitter关注我