溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何通過gitee管理hexo管理發(fā)布內(nèi)容

發(fā)布時間:2021-07-19 10:14:59 來源:億速云 閱讀:173 作者:chen 欄目:編程語言

這篇文章主要介紹“如何通過gitee管理hexo管理發(fā)布內(nèi)容”,在日常操作中,相信很多人在如何通過gitee管理hexo管理發(fā)布內(nèi)容問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何通過gitee管理hexo管理發(fā)布內(nèi)容”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

想法

  • 最原始的辦法是通過ftp或者winscp這樣的工具能實現(xiàn)內(nèi)容上傳,但是不夠簡化,首先你要登錄服務(wù)器,然后找到相應(yīng)文件夾進行更新。

  • 第二種方法是先更新gitee倉庫,然后通過ssh登錄服務(wù)器,然后從倉庫pull下所有代碼

  • 第三種方法是不需要gitee倉庫,直接在服務(wù)器建一個空倉庫,然后把本地發(fā)布文件push到服務(wù)器倉庫上

上面3種方法,第1種最原始,第2種比較繁瑣,第3種簡單可操作,但是第3種有一個問題,就是代碼管理全部在服務(wù)器上,可視性比較差,能不能通過gitee管理代碼,包括原始文件,然后一旦用戶push,通過鉤子函數(shù),觸發(fā)服務(wù)器主動拉取,這樣,所有操作都簡化為了本地的一個git push指令。說干就干,問了一圈度娘,果然高手在民間,幾個關(guān)鍵步驟都有相應(yīng)的帖子介紹。

第一步 建立hexo空倉庫

本地把項目文件統(tǒng)統(tǒng)push上去,除了node_module文件夾。這樣,項目文件也不會丟失,便于以后復(fù)用。

第二步 建立服務(wù)器到hexo倉庫私鑰通信

1. 創(chuàng)建ssh連接密鑰

參看 https://gitee.com/help/articles/4181#article-header0

none

ssh-keygen -t rsa -C "xxxxx@xxxxx.com"  
# Generating public/private rsa key pair...

產(chǎn)生兩個文件:id_rsa id_rsa.pub
切換到 ~/.ssh目錄,cat id_rsa.pub 文件,復(fù)制,這個就是gitee需要的公鑰,注意最后的用戶信息不要復(fù)制
gitee倉庫上操作后,服務(wù)器就能免登錄操作倉庫了

如何通過gitee管理hexo管理發(fā)布內(nèi)容  

gitee倉庫管理上添加公鑰  

gitee倉庫管理上添加公鑰  

gitee倉庫管理上添加公鑰  

如何通過gitee管理hexo管理發(fā)布內(nèi)容  

gitee倉庫管理上添加公鑰  

2. 創(chuàng)建webhooks鉤子函數(shù)并在服務(wù)器上處理

分兩步,一是gitee上進行添加webhooks鉤子,不懂得可以參照官方文檔 https://gitee.com/help/categories/40
第二步,在服務(wù)器上添加地址監(jiān)聽,對上一步填寫的post地址進行維護,大意就是一旦收到post請求,就執(zhí)行一個sh命令,這個命令可以pull下倉庫代碼。

gitee上添加wenhooks  

gitee上添加wenhooks  


我這里用的是nodejs的express模塊監(jiān)聽某個端口,文件名為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) });//# 需要執(zhí)行的腳本位置,需要自行修改成自己的,這行代碼比較重要,是要讓系統(tǒng)去執(zhí)行一個腳本命令
})
try {
  http.createServer(function (req, res) {
    handler(req, res, function (err) {
      res.statusCode = 404
      res.end('no such location')
    })
  }).listen(1999) // # 服務(wù)監(jiān)聽的端口,自行修改
}catch(err){
  console.error('Error:', err.message)
}

然后編輯一下腳本文件deploy.sh,大概內(nèi)容如下:

none

cd /hexo項目路徑 #需要改成自己的項目地址,這行比較重要,當(dāng)時因為這個問題折騰了好久,所有的都對,就是pull失敗
git pull git@gitee.com:zdong22/hexo.git

node下的pm2工具啟動進程,非常方便
pm2 start webhooks.js --name wenhook

如何通過gitee管理hexo管理發(fā)布內(nèi)容  

pm2  

3.起一個Nginx服務(wù)

需要使用ssl,這樣傳輸更安全
首先監(jiān)聽80端口和443端口,然后80端口重定向到443端口
修改nginx.conf文件內(nèi)容如下:

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     /網(wǎng)站證書.pem;  # pem文件的路徑
        ssl_certificate_key  /網(wǎng)站證書.key; # key文件的路徑
        # ssl驗證相關(guān)配置
        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;    #安全鏈接可選的加密協(xié)議
        ssl_prefer_server_ciphers on;   #使用服務(wù)器端的首選算法

}

4. 服務(wù)器設(shè)置一下git參數(shù)

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文件  

修改config文件  


修改 .git/info下的 sparse-checkout文件,添加一行, public/

none

[root@iZbp13m488196desr77aezZ info]# ls
exclude  sparse-checkout
[root@iZbp13m488196desr77aezZ info]# cat sparse-checkout
public/
[root@iZbp13m488196desr77aezZ info]#

如何通過gitee管理hexo管理發(fā)布內(nèi)容  

修改sparse-checkout文件  

大功告成!

現(xiàn)在發(fā)文邏輯就是
hexo new ->編輯 ->hexo clean -> hexo g -> git push ,幾個指令,然后網(wǎng)站就更好了。

ps:還有幾個重要的點
一是端口要確保能訪問,系統(tǒng)防火墻打開端口之后,云服務(wù)器控制臺還有一道防火墻
二是文件權(quán)限一定要確定,拿一個普通用戶去執(zhí)行root操作肯定失敗
三是發(fā)布之后檢查一下,是不是內(nèi)容存在問題,訪問是否正常

到此,關(guān)于“如何通過gitee管理hexo管理發(fā)布內(nèi)容”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI