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 | groupadd 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 /data/git |
1 | !/bin/bash |
1 | chmod +x /data/git/blog.git/hooks/post-receive |
¶4、搭建web服务
需要安装好nginx,可以参考我的另一篇文章《nginx学习笔记》。
安装好nginx后配置nginx web服务。
1 | mkdir -p /data/blog |
1 | server { |
1 | 启动nginx(如果没有启动的话) |
¶5、配置https服务
这里使用letsencrypt得到免费的ssl ca证书,生成证书的步骤虽然点麻烦,但是支持通配符而且又免费,何乐而不为呢?当然你可以使用其他免费的ssl ca证书,比如阿里云的免费证书,这里就不介绍阿里云是怎样得到证书的了,有兴趣可以去阿里云官网查看。
需要获取letsencrypt证书,可以下载certbot-auto自动化工具并通过工具得到证书。
1 | 下载certbot-auto |
交互式的配置过程
1 |
|
配置PFS秘钥(可选)
生成Perfect Forward Security(PFS)键值,这步其实不做也可以。
1 | mkdir /etc/ssl/private/ -p |
配置nginx web服务
1 | vim /etc/nginx/conf.d/blog.conf |
需求:http://qcmoke.site
、http://www.qcmoke.site
、https://qcmoke.site
都重定向到https://www.qcmoke.site
,并且图片都能压缩传输。
1 | server { |
重载配置
1 | nginx -s reload |
¶6、测试
客户机
1 | git clone git@qcmoke.site:/data/git/blog.git |
之后浏览器访问http://qcmoke.site
就能访问到push到服务器的index.html
页面了。
¶7、ssl续期
Let’s Encrypt 默认情况下只提供三个月的有效期,在有效期剩余半个月的时候,Let’s Encrypt 会发送邮件给你,提醒你需要做证书的续期操作。或者我们也可以通过以下命令查看证书的剩余有效期限:
1 | $ /data/ssl/certbot-auto certificates |
💁♂提示:可以提供在命令末尾添加
--no-self-upgrade
来防止certbot-auto脚本自动更新。
手动续期
1 | /data/ssl/certbot-auto renew -v |
如果使用的是通配符域名,那么很不幸,无法直接使用 certbot-auto renew
的方式快速进行续期。可以尝试使用如下命令续期:
1 | /data/ssl/certbot-auto --server https://acme-v02.api.letsencrypt.org/directory \ |
完整操作如下(具体类似上文首次申请证书差不多):
1 | [root@iz2ze4uom6jrktiqj54y48z ~]# /data/ssl/certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d "*.qcmoke.site" -d "qcmoke.site" --manual --preferred-challenges dns-01 certonly |
1 | nginx -s reload |
自动续期
对于通配符域名,则比较麻烦,因为需要人为地进行TXT记录域名解析,所以实现过程比较繁琐,这里就不介绍了。
如果不是申请通配符域名,那么可以通过Linux的定时任务来完成自动续期的需求。
1 | sudo crontab -e |
在最后添加
1 | 0 3 1 * * /data/ssl/certbot-auto renew --renew-hook "sudo nginx -s reload" |
可通过sudo crontab -l
命令查看一下是否存在刚才添加的定时任务中。
¶8. 错误解决方案
发现certbot-auto 一直卡在“Installing Python packages…”?
1 | vim /data/ssl/certbot-auto |
¶9. 解决Couldn‘t download https://raw.githubusercontent.com的方法
方式1:
在更新命令后加 --no-self-upgrade
即可不更新执行。
方式2:
1 | cat >> /etc/hosts <<-EOF |
📚 参考