前几日,由于想自己搭建一个可以翻墙的服务器,便在DigitOcean上买了一个每个月5美元的最低配置版的装有Ubuntu系统的Droplets。如果是学生的话可以在github领学生包,里面有50美元的代金券,直接在github上搜索github student pack就能找到,代金券可以在DigitOcean上面使用。还有一种方法就是通过我的邀请链接在DigitOcean上面注册成功后就可以获得10美元,相当于可以免费用两个月。不过,在注册成功前,你必须先充值5美元以激活帐户,这5美元貌似可以申请退还,不过我没试过,毕竟自己会经常用服务器。
迅速搭建完成后,测试了一下,果然可以科学上网了。于是,又想搞点新鲜的玩意儿,毕竟服务器只用来翻墙貌似有点太浪费。于是就想着搭建一个自己的博客系统,闲来无事可以自己写写随笔,作作技术笔记,也算积累一下经验。
听室友说,Hexo用来搭建博客系统不错,于是便决定用它了。Hexo生成的是静态文件,所以可以在本地利用Hexo先生成静态文件,然后将这些静态文件通过git部署到服务器上,用Nginx做Web服务。由于hexo支持git的部署方式,所以可以实现从本地更新博客,非常方便。
搭建过程
本机操作
由于本机是windows,所以这里以windows为例。
- 安装Node.js和Git
生成SSH密钥(有就不用生成):
1
ssh-keygen -t rsa -C "email@example.com" # 一路回车
创建一个文件夹作为博客网站的目录(例如:
E:\BLOG
)进入BLOG目录,执行如下命令初始化Hexo博客:
1
2
3npm install -g hexo-cli
hexo init
npm install安装插件
1
2npm install hexo-deployer-git --save
npm install hero-server生成静态文件并启动hexo服务
1
2hexo g
hexo s打开浏览器输入http://localhost:4000 ,可看到第一篇博客,这只是本地博客。
服务器操作
- 连接服务器:这里我用git bash连接
1
ssh root@<ip地址>
- 在服务器上安装Git和Node.js以及Nginx
1
2
3
4sudo apt install git
sudo apt install nodejs
sudo apt install npm
sudo apt install nginx
配置Nginx托管目录
3.1. 创建
/var/www/hexo
目录,用于Nginx托管1
2
3mkdir -p /var/www/hexo
chown -R $USER:$USER /var/www/hexo
chmod -R 755 /var/www/hexo3.2. 修改Nginx配置
1
2
3sudo vi /etc/nginx/sites-enabled/default
# 将 root /var/www/html 改为 root /var/www/hexo
# 保存退出3.3. 重启nginx
1
nginx -s reload
创建私有git仓库
4.1. 创建用户:git,用于运行git服务
1
sudo adduser git
4.2. 将本机的SSH公钥:
.ssh
目录下的id_rsa.pub
内容添加到/home/git/.ssh/authorized_keys
文件中。4.3. 在
/home/git
下创建一个名为hexo.git
的裸仓库1
git init --bare hexo.git
4.4. 创建Git钩子,在满足条件情况下将静态文件传送到Web服务器目录,即
/var/www/hexo
1
sudo vi /home/git/hexo.git/hooks/post-receive
4.5. 添加如下代码
1
2
git --work-tree=/var/www/hexo --git-dir=/home/git/hexo.git checkout -f4.6. 保存并退出,将该文件变为可执行文件
1
sudo chmod +x /home/git/hexo.git/hooks/post-receive
4.7. 将
hexo.git
目录和网站目录的所有者改为git用户1
2sudo chown -R git:git /home/git/hexo.git
sudo chown -R git:git /var/www/hexo
至此,结束服务器端配置。
部署到服务端
在本机中修改hexo站点配置文件
_config.yml
1
2
3
4deploy:
type: git
repo: git@<服务器IP地址或域名>:/home/git/hexo.git
branch: master之后就能通过以下命令,完成博客的更新了。
1
hexo d -g