hexo+阿里云+个人域名
主要分为两个章节,一个是nginx+hexo+git,将静态页面部署到服务器的git仓库中,并通过hooks把页面资源/home/hexo目录下,nginx通过域名-页面资源的映射索引到目标文件;一个是域名问题,其中涉及到ssl证书、域名映射发生冲突(本质上是对nginx各配置文件的原理的理解不够)。
部署过程(Debian/ Ubuntu)
1. 安装
首先安装nginx & git
1 |
|
测试git是否安装成功
1 |
|
测试nginx是否安装成功
1 |
|
去浏览器输入服务器的公网ip,看见如下图类似的画面则已经安装成功
2. 创建git用户
(用root?太不明智了吧,还是另外创建一个比较好!)
创建git用户
1 |
|
给git用户权限
1 |
|
找到 root ALL=(ALL:ALL) ALL
在其下面添加 git ALL=(ALL:ALL) ALL
修改完成后复原权限
1 |
|
3. 存主机的公钥
1 |
|
将本地主机的id_rsa.pub
内容复制到authorized_keys
中即可
1 |
|
修改这里的权限
1 |
|
4. 建立网站的根目录
1 |
|
5. 配置Nginx
1 |
|
修改内容
1 |
|
使用nginx -t
命令检查配置文件的语法是否出错。然后使用systemctl restart nginx.service
命令重启服务即可。
6. 初始化git仓库
1 |
|
这里使用的是post-receive
这个钩子,当git有收发的时候就会调用这个钩子。 在blog.git
裸库的 hooks
文件夹中,新建post-receive
文件。
1 |
|
在这个空白文件中加入以下语句
1 |
|
添加权限,保证hooks能起作用
1 |
|
7. 本地配置
在hexo的根目录中打开_config.yml
文件。部署到多个平台的方法如下,branch缺省为master
1 |
|
完事就可以尝试部署了,若还有问题,请见“遇到的问题”
在nginx服务器上部署域名证书
1. 下载域名的证书
2. 编辑 Nginx 根目录下的 nginx.conf
文件。修改内容如下:
如找不到以下内容,可以手动添加。可执行命令 nginx -t ,找到nginx的配置文件路径。
如下图示例:
此操作可通过执行
vim /etc/nginx/nginx.conf
命令行编辑该文件。由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为
nginx/1.15.0
以上请使用listen 443 ssl
代替listen 443
和ssl on
。
请仔细阅读注释!
1 |
|
3. 重载nginx
通过执行以下命令验证配置文件问题。
1 |
|
通过执行以下命令重载 Nginx。
1 |
|
成功以后可以访问https://{{your domain}}
验证
4. http自动跳转为https(可选)
在部署过程的第5点中编辑的配置文件里加跳转语句即可
1 |
|
在 root /home/hexo; # 修改为网站的根目录
语句下方(只要是server花括号都可以)加以下语句
1 |
|
返回第3点,重载nginx。
成功以后可以访问http://{{your domain}}
验证,观察是否跳转到https页面
遇到的问题
1. server name端口冲突
修改nginx配置参数后,使用nginx -t检查配置.
提示successfull后就可以使用 nginx -s reload来重新加载配置
我配置的过程中遇到这样的问题,就是绑定了主机名后,重新加载配置时会出现警告
1 |
|
问题根源:在server块中填写配置信息时,每个server_name(域名)只能绑定一个目录。如果出现了在不同的server块中使用了同一个server_name,且绑定了不同目录的情况,就会报上述警告。
该问题不会影响服务器正常运作,但是会出现其中一个被ignored的server块的配置功能无效的情况。
2. 访问https域名出现nginx初始化页面
在写nginx.conf
配置文件时,没有修改location块中root后面的根目录路径,此处我使用的是绝对路径/home/hexo
3. 本地hexo d没有推送至服务器git仓库
问题分析:
这个问题出现的时候你会发现访问自己的域名时没有加载页面元素,空空如也。去hexo目录检查也发现是空的,hooks的配置也没有问题,问题就只能是在deploy时出现的。在初始化的时候我们没有创建分支,git仓库默认分支为master,而有些人习惯使用main分支进行推送,导致推送不成功。
解决方法:
把_config.yml文件中deploy块里branch删掉,或者写成master即可。
4. 403 forbidden,nginx无法正常显示
问题分析:
一般来讲,即使hexo静态资源推送失败,nginx也至少会把index.html放在网页上,而不是403 forbidden,除非nginx啥也索引不到。通过查看nginx的错误日志,发现了481 directory index of "/home/hexo/" is forbidden
解决方法:
去nginx根目录下,配置文件nginx.conf
加上配置 autoindex on;
自动索引