将Hexo网站托管到VPS
整体方案
我有一个用于提高上网体验的VPS,配置还不错,仅仅跑一个小服务太浪费了。买了域名之后,便想把网站也托管到VPS上,和Github互为备份,其中一个出问题了,修改一下域名解析即可。
整体方案如下:在本地机器上生成网站静态文件,利用git的post-receive
钩子自动部署文件到VPS的指定目录中。VPS使用nginx作为HTTP服务器,为访客提供服务。本文默认本地机器上已经完成了Hexo环境的搭建(能够生成网站文件,并部署到Github上),VPS上已安装git和nginx。
部署过程
SSH登录配置
首先在VPS上新建一个名为git的账户专门用来部署网站文件:
1 | adduser git |
将
1 | git:x:502:502:/home/git:/bin/bash |
修改为:
1 | git:x:502:502:/home/git:/usr/bin/git-shell |
上面的git-shell
是一个login
shell,为ssh用户提供受限的git权限。将本地机器上的公钥(~/.ssh/id_rsa.pub
文件的内容)添加到VPS的/home/git/.ssh/authorized_keys
文件末尾,添加之后,使用git账户登录VPS无需密码。
Git仓库配置
建立一个裸仓库,目录可以自己选择:
1 | mkdir -p /var/repo |
然后配置git
hooks,在blog.git/hooks
目录下新建一个post-receive
文件:
1 | cd /var/repo/blog.git/hooks |
在文件中写入如下内容:
1 | !/bin/sh |
参数/var/repo/blog.git
为git仓库目录,/var/www/blog
为部署目录,即最终存放网站文件的目录。为该文件添加可执行权限,同时修改目录的所有者:
1 | chmod +x /var/repo/blog.git/hooks/post-receive |
本地配置
在_config.yml
配置文件的deploy
字段中添加一个VPS项:
1 | deploy: |
部署过程不变:
1 | hexo clean |
网站文件会同时部署到Github和VPS上。VPS部署成功后,在/var/www/blog
目录下能看到网站文件。
Nginx配置
首先确认nginx已启动,在本地浏览器中输入VPS的IP地址,要能看到nginx默认的欢迎页。如果没看到页面,有可能是开启了防火墙,要把HTTP和HTTPS端口添加到防火墙的允许列表:
1 | sudo firewall-cmd --permanent --zone=public --add-service=http |
Nginx的配置文件都放在/etc/nginx
目录下,nginx.conf
为主配置文件,我们修改server
块中server_name
和root
字段的内容,并添加location
字段的配置。修改后的配置文件内容如下:
1 | # |
运行nginx -s reload
重新载入配置,在本地浏览器中输入VPS的IP地址,如果能够看到网站页面,说明配置成功。
域名解析
VPS部署和nginx配置完成后,需要修改DNS配置,即可将域名绑定到VPS的IP上。删除原来的域名解析配置,分别新添加一个www
和@
记录,记录值均为VPS的IP地址。等待一段时间,域名解析成功,即可用域名访问托管在VPS上的网站。