之前这个个人博客一直挂在github pages或者coding pages下面,之前在百度云上买了一台云服务器,闲着也是闲着,就将个人博客转到这上面来吧。
本文从一个纯净的ubuntu系统开始,到最后的上线,主要涉及以下内容
- 云服务器上git环境的搭建
- 云服务器上nginx的设置
- 云服务器上https证书的设置
- 本地hexo提交到云服务器
- 云服务器git 钩子设置
- 设置图片防盗链
一步一步来,我买的是ubuntu 18.04 x64
| # apt-get update
# apt-get install git
|
| root@instance-tgmmsl5q:~# mkdir myblog
root@instance-tgmmsl5q:~# chown -R $USER:$USER myblog/
root@instance-tgmmsl5q:~# chmod -R 755 myblog/
root@instance-tgmmsl5q:~# cd myblog/
root@instance-tgmmsl5q:~/myblog# git init --bare hexo_blog.git
Initialized empty Git repository in /root/myblog/hexo_blog.git/
|
这时我们就创建了一个空的git仓库
| # apt-get update
# apt-get install nginx
|
我们将hexo的index目录设置为 /var/www/myblog
| root@instance-tgmmsl5q:~/myblog# cd /var/www/
root@instance-tgmmsl5q:/var/www# mkdir myblog
root@instance-tgmmsl5q:/var/www# chown -R $USER:$USER myblog/
root@instance-tgmmsl5q:/var/www# chmod -R 755 myblog/
|
需要将www.yangyanxing.com 的域名指向/var/www/myblog
在/etc/nginx/sites-available
创建yangyanxing.com文件,写入
| server {
listen 80;
listen [::]:80;
server_name www.yangyanxing.com;
root /var/www/myblog;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
access_log off;
expires 1d;
}
location ~ \.(js|css) {
access_log off;
expires 1d;
}
}
|
然后创建一个链接文件 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则说明生效了.
添加 certbot 源
| add-apt-repository ppa:certbot/certbot
|
安装certbot
| apt-get update && apt-get install python-certbot-nginx -y
|
生成证书,会有几个步骤
- 输入邮箱,随意填
- 是否同意许可,Y
- 是否分享你的电子邮件 N
- 选择哪个域名需要添加证书,这里输入列出的编号
- 是否将http强制跳转到https,我选是 2
执行完脚本以后,我们再浏览器中刷新一下,之前的http就自动跳转到了https则说明设置https成功。
Let's Encrypt 签发的 SSL 证书有效期只有 90 天,所以在过期之前,需要自动更新 SSL 证书。最新版 certbot 会自动添加更新脚本到 /etc/cron.d 里,此脚本每隔 12 小时运行一次,并将续订任何在30天内到期的证书。输入以下命令检测自动续签是否工作:
certbot renew --dry-run
命令运行后如果没有报错,即说明自动续签可以正常工作。
在第一步中初始化git仓库以后,服务器上的地址为/root/myblog/hexo_blog.git
我们是可以得到git的地址为你的服务器用户名@云服务器的IP地址:/root/myblog/hexo_blog.git
先本地clone一下这个项目,前提是需要将本机的公钥文件id_rsa.pub 复制到云服务器中的authorized_keys 文件里。
设置本地hexo的_config.yml 文件
| deploy:
- type: git
repo: `你的服务器用户名@云服务器的IP地址:/root/myblog/hexo_blog.git`
branch: master
|
然后就可以使用hexo d
来提交部署,如果没有报错,则继续往下走。
云服务器上的git的钩子设置是为了将提交上来的文件,将其拷贝到第二步中nginx设置的域名目录
创建 /root/myblog/hexo_blog.git/hooks/post-receive
设置为
| #!/bin/bash
git --work-tree=/var/www/myblog --git-dir=/root/myblog/hexo_blog.git checkout -f
|
保存退出,并添加执行权限,之后再hexo d 提交一下,看看是否可以正常自动部署了!
其实经过上面几步的操作以后,基本上已经完成了hexo向云服务器自动部署了,但是可以再做一些优化,比如图片防盗链.
| location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
access_log off;
expires 1d;
valid_referers none server_names *.yangyanxing.com;
if ($invalid_referer){
rewrite ^/ http://ww1.sinaimg.cn/large/795ab47fly1g4a6llk7wjj20c808174s.jpg;
}
}
|
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
。
参考文章
在Ubuntu18.04服务器上部署Hexo博客
图片防盗链