Git Pages是结合git服务操作的web网页托管平台。通过git提交再结合git hook脚本就能很好的将提交的文件上传到web服务虚拟目录里。但是Github、Netlify、Coding等已经提供了免费git pages服务,为什么还要自己在vps上折腾搭建git pages呢?因为这些服务商提供的git pages是有限制的,比如空间容量相对较小、对动态网页支持不完善或者没有、访问速度较慢等。那么自建的git pages的优势就显现出来了。下面就介绍怎么一步步搭建该服务。
¶1、安装Git
1 | yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel |
接下来我们创建一个git用户组和用户,用来运行git服务:
1 | 创建git用户组和git用户 |
¶2、配置ssh秘钥登录
收集所有需要登录的用户的公钥,公钥位于id_rsa.pub
文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys
文件里,一行一个。
如果没有该文件创建它:
1 | mkdir -p /home/git/.ssh |
客户机
1 | copy客户端的秘钥到vps的/home/git/.ssh/authorized_keys |
¶3、搭建git仓库
1 | mkdir -p /opt/blog/git |
1 |
|
1 | chown -R git:git /opt/blog/git && chgrp -R git /opt/blog/git && chmod -R 755 /opt/blog/git |
¶4、搭建web服务
需要安装好nginx,可以参考我的另一篇文章《nginx学习笔记》。
这里已经提前通过编译安装的方式把nginx安装到了/opt/nginx目录,然后只需配置nginx即可。
1 | vim /opt/nginx/conf/conf.d/blog.conf |
1 | server { |
1 | 启动nginx(如果没有启动的话) |
¶5、配置https服务
这里使用letsencrypt得到免费的ssl ca证书,生成证书的步骤虽然点麻烦,但是支持通配符而且又免费,何乐而不为呢?当然你可以使用其他免费的ssl ca证书,比如阿里云的免费证书,这里就不介绍阿里云是怎样得到证书的了,有兴趣可以去阿里云官网查看。
需要获取letsencrypt ca证书,可以通过安装certbot自动化工具来获取。
1 | yum -y install epel-release |
交互式的配置过程
1 | ### 这里给qcmoke.site和www.qcmoke.site都设置ssl证书(经测试这里只有一个域名的时候才能在后期使用certbot renew续期,否则要重新申请证书) |
配置nginx web服务
1 | vim /opt/nginx/conf/conf.d/blog.conf |
需求:http://qcmoke.site
、http://www.qcmoke.site
、https://qcmoke.site
都重定向到https://www.qcmoke.site
,并且图片都能压缩传输。
1 | server { |
重载配置
1 | /opt/nginx/sbin/nginx -s reload |
¶6、测试
客户机
1 | git clone git@qcmoke.site:/opt/blog/git/blog.git |
之后浏览器访问http://qcmoke.site
就能访问到push到服务器的index.html
页面了。
¶7、ssl续期
Let’s Encrypt 默认情况下只提供三个月的有效期,在有效期剩余半个月的时候,Let’s Encrypt 会发送邮件给你,提醒你需要做证书的续期操作。或者我们也可以通过以下命令查看证书的剩余有效期限:
1 | certbot certificates |
手动续期
1 | certbot renew -v |
如果使用的是通配符域名,那么很不幸,无法直接使用 certbot renew
的方式快速进行续期。只需使用如下命令重新生成证书即可:
1 | certbot --server https://acme-v02.api.letsencrypt.org/directory \ |
具体类似上文首次申请证书差不多,操作完成后重启nginx即可。
自动续期
如果不是申请通配符域名,那么可以通过Linux的定时任务来完成自动续期的需求。
1 | sudo crontab -e |
在最后添加
1 | 0 3 1 * * certbot renew --renew-hook "sudo nginx -s reload" |
可通过sudo crontab -l
命令查看一下是否存在刚才添加的定时任务中。
对于通配符域名,则比较麻烦,因为需要人为地进行TXT记录域名解析,所以实现过程比较繁琐,这里就不介绍了。
¶8、通配符证书自动续期
实现通配符证书自动续期其实也可以通过调用域名提供商的Api接口来实现,不过会比较麻烦,但也是总是有解决办法:
https://zhuanlan.zhihu.com/p/354241539
https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
¶9. 错误解决方案
(1)如果使用的是certbot-auto,发现certbot-auto一直卡在“Installing Python packages…”?
1 | vim /data/ssl/certbot-auto |
(2)解决Couldn‘t download https://raw.githubusercontent.com的方法
方式1:
在更新命令后加 --no-self-upgrade
即可不更新执行。
方式2:
1 | cat >> /etc/hosts <<-EOF |
(3)出现错误An unexpected error occurred: There were too many requests of a given type :: Error creating new order :: too many failed authorizations recently: see https://letsencrypt.org/docs/failed-validation-limit/
因为操作失败太多次导致会被限制一段时间不允许再操作,为了解除限制可以删除/etc/letsencrypt/accounts的所有内容,然后就可继续申请了。
1 | rm -rf /etc/letsencrypt/accounts/* |
📚 参考