如何通过gitee管理hexo管理发布内容
这篇文章主要介绍“如何通过gitee管理hexo管理发布内容”,在日常操作中,相信很多人在如何通过gitee管理hexo管理发布内容问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何通过gitee管理hexo管理发布内容”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
网站的建设创新互联公司专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为成都食品包装袋等企业提供专业服务。
想法
最原始的办法是通过ftp或者winscp这样的工具能实现内容上传,但是不够简化,首先你要登录服务器,然后找到相应文件夹进行更新。
第二种方法是先更新gitee仓库,然后通过ssh登录服务器,然后从仓库pull下所有代码
第三种方法是不需要gitee仓库,直接在服务器建一个空仓库,然后把本地发布文件push到服务器仓库上
上面3种方法,第1种最原始,第2种比较繁琐,第3种简单可操作,但是第3种有一个问题,就是代码管理全部在服务器上,可视性比较差,能不能通过gitee管理代码,包括原始文件,然后一旦用户push,通过钩子函数,触发服务器主动拉取,这样,所有操作都简化为了本地的一个git push指令。说干就干,问了一圈度娘,果然高手在民间,几个关键步骤都有相应的帖子介绍。
第一步 建立hexo空仓库
本地把项目文件统统push上去,除了node_module文件夹。这样,项目文件也不会丢失,便于以后复用。
第二步 建立服务器到hexo仓库私钥通信
1. 创建ssh连接密钥
参看 https://gitee.com/help/articles/4181#article-header0
none
ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # Generating public/private rsa key pair...
产生两个文件:id_rsa id_rsa.pub
切换到 ~/.ssh目录,cat id_rsa.pub 文件,复制,这个就是gitee需要的公钥,注意最后的用户信息不要复制
gitee仓库上操作后,服务器就能免登录操作仓库了
gitee仓库管理上添加公钥
gitee仓库管理上添加公钥
gitee仓库管理上添加公钥
2. 创建webhooks钩子函数并在服务器上处理
分两步,一是gitee上进行添加webhooks钩子,不懂得可以参照官方文档 https://gitee.com/help/categories/40
第二步,在服务器上添加地址监听,对上一步填写的post地址进行维护,大意就是一旦收到post请求,就执行一个sh命令,这个命令可以pull下仓库代码。
gitee上添加wenhooks
我这里用的是nodejs的express模块监听某个端口,文件名为wenhooks.js,具体代码如下
none
var http = require('http') var createHandler = require('gitee-webhook-handler') var handler = createHandler({ path: '/webhooks_push', secret: 'cqmygysdssjtwmydtsgx'}); function run_cmd(cmd, args, callback) { var spawn = require('child_process').spawn; var child = spawn(cmd, args); var resp = ""; child.stdout.on('data', function(buffer) { resp += buffer.toString(); }); child.stdout.on('end', function() { callback (resp) }); } handler.on('error', function (err) { console.error('Error:', err.message) }) handler.on('Push Hook', function (event) { // # 这个地方就是GitHub 和 Gitee 不一样的地方,需要注意 console.log('Received a push event for %s to %s', event.payload.repository.name, event.payload.ref); run_cmd('sh', ['/*/*/deploy.sh'], function(text){ console.log("sh deploy success");console.log(text) });//# 需要执行的脚本位置,需要自行修改成自己的,这行代码比较重要,是要让系统去执行一个脚本命令 }) try { http.createServer(function (req, res) { handler(req, res, function (err) { res.statusCode = 404 res.end('no such location') }) }).listen(1999) // # 服务监听的端口,自行修改 }catch(err){ console.error('Error:', err.message) }
然后编辑一下脚本文件deploy.sh,大概内容如下:
none
cd /hexo项目路径 #需要改成自己的项目地址,这行比较重要,当时因为这个问题折腾了好久,所有的都对,就是pull失败 git pull git@gitee.com:zdong22/hexo.git
node下的pm2工具启动进程,非常方便pm2 start webhooks.js --name wenhook
pm2
3.起一个Nginx服务
需要使用ssl,这样传输更安全
首先监听80端口和443端口,然后80端口重定向到443端口
修改nginx.conf文件内容如下:
none
//80端口配置 server { listen 80; server_name zhangdong.site; index index.html index.htm index.php; root /hexo项目路径; error_page 404 /404.html; include enable-php.conf; #将 http 重定向 https return 301 https://$server_name$request_uri; } //443端口配置 #https zhagndong.site server { listen 443 ssl; server_name zhangdong.site; root /项目路径; index index.php index.html index.htm; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # ssl证书地址 ssl_certificate /网站证书.pem; # pem文件的路径 ssl_certificate_key /网站证书.key; # key文件的路径 # ssl验证相关配置 ssl_session_timeout 5m; #缓存有效期 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议 ssl_prefer_server_ciphers on; #使用服务器端的首选算法 }
4. 服务器设置一下git参数
pull只拉取public文件夹就行了,其它的不需要
具体方法是:
打开.git文件夹
none
[root@iZbp13m488196desr77aezZ .git]# ls branches config description FETCH_HEAD HEAD hooks index info logs objects ORIG_HEAD refs
修改config文件,sparesecheckout 从false改为true
none
[root@iZbp13m488196desr77aezZ .git]# cat config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true sparsecheckout = true [remote "origin"] url = git@gitee.com:zdong22/hexo.git fetch = +refs/heads/*:refs/remotes/origin/*
修改config文件
修改
.git/info
下的
sparse-checkout
文件,添加一行,
public/
none
[root@iZbp13m488196desr77aezZ info]# ls exclude sparse-checkout [root@iZbp13m488196desr77aezZ info]# cat sparse-checkout public/ [root@iZbp13m488196desr77aezZ info]#
修改sparse-checkout文件
大功告成!
现在发文逻辑就是
hexo new ->编辑 ->hexo clean -> hexo g -> git push ,几个指令,然后网站就更好了。
ps:还有几个重要的点
一是端口要确保能访问,系统防火墙打开端口之后,云服务器控制台还有一道防火墙
二是文件权限一定要确定,拿一个普通用户去执行root操作肯定失败
三是发布之后检查一下,是不是内容存在问题,访问是否正常
到此,关于“如何通过gitee管理hexo管理发布内容”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
当前题目:如何通过gitee管理hexo管理发布内容
URL地址:http://hbruida.cn/article/ppdpoh.html