通過Git將Hexo部落格部署到伺服器
本文首發於我的個人部落格 orxing.top 歡迎來訪
伺服器是用的阿里雲ECS CentOS,本來是用來部署WordPress的,後來接觸了Hexo,就把Hexo直接部署到了GitHub pages和Coding Pages上,但是最近發現Coding pages經常抽風,所以我決定將hexo重新部署回伺服器上
基礎
- 使用hexo生成靜態檔案
- 在雲主機上搭建git環境,並將靜態檔案通過git上傳到雲主機
- 使用git-hooks實現自動部署
- Nginx用做靜態檔案伺服器,實現外界對部落格的訪問
環境
-
本地桌面為Win10,使用的終端為cmder,cmder自帶git,理論上使用bash也一樣
-
伺服器為 CentOS 7 64bit,預設狀態,不使用寶塔面板
開始
登入伺服器
$ ssh [email protected]
#這裡假設伺服器外網ip為123.125.114.144(悄悄告訴你一個大祕密,這是百度的ip地址)
#登陸密碼就是你拿到伺服器一開始設定的密碼
複製程式碼
安裝git和nginx
$ yum install git
$ yum install nginx
複製程式碼
新增一個git使用者
$ adduser git #新增git使用者
$ chmod 740 /etc/sudoers #改變sudoers檔案的許可權為檔案所有者可寫
$ vim /etc/sudoers #vim是一個很強大的編輯器,使用方法自行Google
複製程式碼
找到root ALL=(ALL) ALL
,在它下方加入一行
git ALL=(ALL) ALL
複製程式碼
$ chmod 400 /etc/sudoers #將其許可權修改為檔案所有者可讀
$ sudo passwd git #設定git使用者的密碼
複製程式碼
給git使用者新增ssh金鑰
如果以前使用過給github或者是coding之類的,應該知道這個金鑰指的什麼,這裡我不多說
$ su git #切換到git使用者
$ mkdir ~/.ssh #建立.ssh資料夾
$ touch ~/.ssh/authorized_keys #建立authorized_keys檔案
$ chmod 600 ~/.ssh/authorzied_keys #為authorized_keys檔案賦予檔案所有者可讀可寫的許可權
$ chmod 700 ~/.ssh #為.ssh資料夾賦予資料夾所有者可讀可寫可執行的許可權
$ vim ~/.ssh/authorized_keys #將ssh金鑰貼上進去
複製程式碼
關閉終端,使用ssh [email protected]
重新登入伺服器,測試是否能不要密碼登入到git使用者
建立git倉庫並使用git-hooks實現自動部署
$ sudo mkdir /var/repo #新建目錄,這是git倉庫的位置
$ sudo mkdir /var/www #
$ sudo mkdir /var/www/hexo #這是部落格原始檔的目錄
複製程式碼
$ cd /var/repo #轉到git倉庫的資料夾
$ sudo git init --bare blog.git #建立一個名叫blog的倉庫
$ sudo vim /var/repo/blog.git/hooks/post-update
複製程式碼
增加下面兩行,當我們從本地push上去時,git-hooks會自動執行下列命令,這是git自帶的的方法,表示在/var/repo/blog.git
中對/var/www/hexo
執行checkout -f
命令,可以在我們每次 push 完之後,把部署目錄更新到部落格的最新狀態,這裡我也有點糊塗,不太懂為什麼checkout的作用是這個
#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f
複製程式碼
然後給許可權
$ cd blog.git/hooks/
$ sudo chown -R git:git /var/repo/ #進行資料夾及其子檔案所有者變更
$ sudo chown -R git:git /var/www/hexo #進行資料夾及其子檔案所有者變更,我也不知道為什麼git:git
$ sudo chmod +x post-update #賦予其可執行許可權
複製程式碼
其實還有一種辦法,即push後,先刪除之前的檔案,再clone倉庫到/var/www/hexo
,可以自行嘗試,連結在此
配置nginx
$ sudo nginx -t #檢視nginx配置路徑,寶塔面板安裝nginx非下列路徑
$ sudo vim /etc/nginx/nginx.conf
複製程式碼
找到server配置塊,主要配置listen,server_name,root三個欄位。listen是埠,server_name是你的域名orxing.top
,root為部落格原始檔路徑 /var/www/hexo
域名沒備案,不允許使用80埠,不能新增server_name,埠可以換為任意埠,如果你的80埠被佔,也可以修改為其他埠,自定義埠的填一個listen即可,另一個可以刪除
域名備案了,那把域名填上,並且去域名控制檯將域名解析到你的伺服器ip上
由於阿里雲伺服器預設沒有開啟80埠,所以你必須去自行開啟,其他埠也是同理
給git使用者設定許可權
給git使用者設定許可權,使其不能通過ssh [email protected]
登入,也不能通過su git切換到git使用者,
git操作不影響
$ sudo vim /etc/passwd
#修改最後一行
#將/bin/bash修改為/usr/bin/git-shell
複製程式碼