ubuntu上部署hexo博客
之前这个个人博客一直挂在github pages或者coding pages下面,之前在百度云上买了一台云服务器,闲着也是闲着,就将个人博客转到这上面来吧。
本文从一个纯净的ubuntu系统开始,到最后的上线,主要涉及以下内容
- 云服务器上git环境的搭建
- 云服务器上nginx的设置
- 云服务器上https证书的设置
- 本地hexo提交到云服务器
- 云服务器git 钩子设置
- 设置图片防盗链
一步一步来,我买的是ubuntu 18.04 x64
一、云服务器上git环境的搭建¶
1.1 安装git¶
1.2 初始化git仓库¶
这时我们就创建了一个空的git仓库
二、设置nginx环境¶
2.1 安装nginx¶
2.2 设置nginx环境¶
我们将hexo的index目录设置为 /var/www/myblog
2.3 绑定域名¶
需要将www.yangyanxing.com 的域名指向/var/www/myblog
在/etc/nginx/sites-available
创建yangyanxing.com文件,写入
然后创建一个链接文件 ln -s /etc/nginx/sites-available/yangyanxing.com /etc/nginx/sites-enabled/
重启nignx sytemctl restart nginx
, 在/var/www/myblog
目录下写一个index.html文件,然后再访问一下www.yangyanxing.com 查看nginx域名设置是否生效,如果是你设置的index.html则说明生效了.
三、云服务器上https证书的设置¶
添加 certbot 源
安装certbot
生成证书,会有几个步骤
- 输入邮箱,随意填
- 是否同意许可,Y
- 是否分享你的电子邮件 N
- 选择哪个域名需要添加证书,这里输入列出的编号
- 是否将http强制跳转到https,我选是 2
执行完脚本以后,我们再浏览器中刷新一下,之前的http就自动跳转到了https则说明设置https成功。
Let's Encrypt 签发的 SSL 证书有效期只有 90 天,所以在过期之前,需要自动更新 SSL 证书。最新版 certbot 会自动添加更新脚本到 /etc/cron.d 里,此脚本每隔 12 小时运行一次,并将续订任何在30天内到期的证书。输入以下命令检测自动续签是否工作:
certbot renew --dry-run
命令运行后如果没有报错,即说明自动续签可以正常工作。
四、本地hexo提交到云服务器¶
在第一步中初始化git仓库以后,服务器上的地址为/root/myblog/hexo_blog.git
我们是可以得到git的地址为你的服务器用户名@云服务器的IP地址:/root/myblog/hexo_blog.git
先本地clone一下这个项目,前提是需要将本机的公钥文件id_rsa.pub 复制到云服务器中的authorized_keys 文件里。
设置本地hexo的_config.yml 文件
然后就可以使用hexo d
来提交部署,如果没有报错,则继续往下走。
五、云服务器git 钩子设置¶
云服务器上的git的钩子设置是为了将提交上来的文件,将其拷贝到第二步中nginx设置的域名目录
创建 /root/myblog/hexo_blog.git/hooks/post-receive
设置为
保存退出,并添加执行权限,之后再hexo d 提交一下,看看是否可以正常自动部署了!
六、设置图片防盗链¶
其实经过上面几步的操作以后,基本上已经完成了hexo向云服务器自动部署了,但是可以再做一些优化,比如图片防盗链.
valid_referers 这行的作用是配置可以识别 refer,即可以正常获取资源文件的请求,在这里配置加入白名单的请求 refer 域名。 参数说明:
- none 代表请求的 refer 为空,也就是直接访问,比如在浏览器中直接访问图片
www.yangyanxing.com/test1.png
,直接访问时,refer 会为空。 - blocked refer 来源不为空,但是里面的值被代理或者防火墙删除了
- server_names refer 来源包含当前的
server_names
即location
的父节点server
节点的server_name
的值。 - 字符串 定义服务器名称,比如
*.test1.com
,配置后,来源是从test1.com
就会被认为是合法的请求。 - 正则表达式 匹配合法请求来源, 如
~\.test2\.
当请求的 refer
是合法的,即可以被后面任一参数所匹配, $invalid_referer
的值为0, 若不匹配则值为 1, 进入 if
的代码中。我这里的设置是,如果是不合法的请求,就统一返回一张图片,也可以直接返回 403
。
参考文章
