服务器教程(番外) | hexo 博客部署
唠唠闲话
暑假用 Github pages 快捷部署博客,但国内访问比较慢。正好之前买了腾讯云服务器,索性把网站部署上来,即能加快访问速度,还支持百度收录。
参考文章
腾讯云:在 Ubuntu 14.04 服务器上部署 Hexo 博客
腾讯云:个人 hexo 博客的服务端部署及构建
导语
Hexo 是用 Node.js 开发的一个静态站点生成器,支持 Markdown 语法写作,有着强大的插件系统,而且性能优异。
本文将介绍如何在一台 Ubuntu 系统的 CVM 云服务器上快速部署 Hexo 博客站点并通过云服务器上的私有 Git 仓库部署到 Web 服务器目录下。
部署教程
本地设置
-
Hexo 安装及初始化,参看这篇。
-
编辑
_config.yml
文件,找到 Deployment 部分,如下修改:1
2
3
4deploy:
type: git
repo: <用户名>@<公网IP>:/var/repo/hexo_static
branch: master其中
<公网IP>
为服务器 IP 地址或域名(如果有的话)
服务器设置
完成本地端的操作后,回到服务器的配置。服务器的连接,命令执行和文件传输参看这篇。
安装 Nginx 和 Git
在云服务器上安装 Git 和 Nginx 两个必备的软件包。Git 用于版本管理和部署,Nginx 用于静态博客托管。
1 | sudo apt-get update |
创建私有 Git 仓库
-
创建
/var/repo
目录,并在目录下,创建一个名为 hexo_static 的裸仓库(bare repo)。1
sudo mkdir -p /var/repo/ # 创建文件夹
注:
-p
参数表示文件夹存在时忽略操作。 -
修改目录的所有权和用户权限,使
$USER
用户具备/var/repo
目录下所有新生成的目录和文件的权限1
2
3
4# 更改文件所属
sudo chown -R $USER:$USER /var/repo/
# 更改文件权限(可读可执行,不可写)
sudo chmod -R 755 /var/repo/ -
初始化 git 仓库
1
2cd /var/repo/
git init --bare hexo_static.git
配置 Nginx 托管文件目录
-
创建
/var/www/hexo
目录,用于 Nginx 托管。和上一步类似,这里也需要修改目录的所有权和权限。1
2
3sudo mkdir -p /var/www/hexo
sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo -
修改 Nginx 的 default 文件
1
sudo vim /etc/nginx/sites-available/default
-
修改
root
参数为/var/www/hexo
1
2
3
4
5
6
7...
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/hexo; # 站点目录
index index.html index.htm;
...
如果购买了域名,可以将配置中的 default_server 修改为你的域名,例如:
- 最后,重启 Nginx 服务,使得改动生效。
1
sudo service nginx restart
做完这一步之后,你去访问服务器的 IP 时,应该还是会报错的,因为 /var/www/hexo
目录是空的。
创建 Git 钩子
接下来,在服务器上的裸仓库 hexo_static 创建一个钩子,在满足特定条件时将静态 HTML 文件传送到 Web 服务器的目录下,即 /var/www/hexo
。
-
在自动生成的 hooks 目录下创建一个新的钩子文件:
1
vim /var/repo/hexo_static.git/hooks/post-receive
-
在该文件中添加如下代码,指定 Git 的工作树(源代码)和 Git 目录(配置文件等)。
1
2
git --work-tree=/var/www/hexo --git-dir=/var/repo/hexo_static.git checkout -f -
保存并退出文件,并让该文件变为可执行文件。
1
chmod +x /var/repo/hexo_static.git/hooks/post-receive
其他
部署及访问
到这一步,服务器端的设置基本完成,本地端执行 hexo d
部署网站,上传成功后,浏览器输入公网 IP 访问网站。
域名设置
网站部署后,下一步设置域名访问,相关设置参看这篇: 服务器教程(四) | 域名相关
免密登录
设置服务器的 ssh 免密登录,方法同这篇教程,设置后使用 hexo deploy
命令省去密码输入。