部落格建站7 - hexo部落格獨立伺服器如何自動部署?

陌尘(MoChen)發表於2024-08-24
  • 1. 本網站的系統架構
  • 2. 安裝git
  • 3. 配置git使用者
    • 3.1. 為什麼要建立git使用者
    • 3.2. 建立git使用者
    • 3.3. 設定git使用者的密碼
    • 3.4. 建立公鑰-私鑰對
    • 3.5. 伺服器配置公鑰
  • 4. hexo配置自動化部署
    • 4.1. 配置Git倉庫
    • 4.2. hexo站點配置

1. 本網站的系統架構

  • 網站示例: sunlogging.com
  • 伺服器: 阿里雲ECS
  • 伺服器系統: Ubuntu 24.04 LTS
  • 部落格框架: Hexo
  • 網站主題: Volantis

2. 安裝git

執行環境: ECS伺服器 + 本地計算機

  1. 安裝
sudo apt install -y git
  1. 驗證
git --version

顯示具體的版本號則說明安裝成功。

3. 配置git使用者

3.1. 為什麼要建立git使用者

為了實現部落格的自動化部署,我們後面要使用公鑰免密登入伺服器。為了安全起見,最好不要使用root使用者免密登入,我們建立一個受限的使用者來進行免密登入。

3.2. 建立git使用者

執行環境: ECS伺服器

  1. 建立賬戶
adduser git
  1. 檢視是否建立成功
cat /etc/passwd | grep git
# 或
id git
  1. 配置sudoers

將git使用者新增到sudo的配置檔案

# 切換到root使用者
su -
# 編輯配置檔案
vim /etc/sudoers
# 增加配置, 在開啟的配置檔案中,找到root ALL=(ALL) ALL, 在下面新增一行
# 其中git是你要加入的使用者名稱稱
git ALL=(ALL) ALL

3.3. 設定git使用者的密碼

執行環境: ECS伺服器

  1. 設定密碼
sudo passwd git
# shell提示符會提示輸入新密碼兩次,輸入完成後按回車。

設定完密碼後,就可以用git使用者遠端登入ECS伺服器了。

  1. 驗證
ssh git@伺服器IP
# 伺服器IP是ECS伺服器的公網IP

輸入剛設定的密碼進行登入,如果登入成功,這說明git使用者密碼的設定成功。

3.4. 建立公鑰-私鑰對

執行環境: 在本地計算機

前提條件: 已安裝git和ssh客戶端,如果未安裝,請先安裝。

# 進入~/.ssh,如果不存在該目錄,可以手動建立一個
cd ~/.ssh

# 建立公鑰-私鑰對
ssh-keygen -t ed25519 -C "you_email@example.com"
# 郵箱使用你的git配置的郵箱

接下來,碰見系統詢問就直接按Enter鍵。此時便會在 ~/.ssh 目錄建立兩個檔案,分別為: id_ed25519 (私鑰) 和 id_ed25519.pub (公鑰)。

3.5. 伺服器配置公鑰

執行環境: ECS伺服器

前提條件: 已安裝git,如果未安裝,請先安裝。

  1. 複製id_ed25519.pub

複製 4.4建立的 id_ed25519.pub 的內容。注意不要在命令列裡選中複製,可以用VSCode等編輯器開啟檔案後,複製內容。

  1. 用git使用者登入伺服器
ssh git@伺服器IP
  1. 建立authorized_keys檔案
# 進入git使用者的home目錄
cd ~
# 建立.ssh目錄
mkdir .ssh
cd .ssh/
# 建立id_ed25519.pub檔案,並將已複製的內容貼上進來
vim id_ed25519.pub
# 檢查是否儲存成功
cat ./id_ed25519.pub
# 將公鑰檔案複製一份並命名為:authorized_keys
cp ./id_ed25519.pub ./authorized_keys
  1. 驗證

退出遠端登入的伺服器。再次透過ssh用git使用者登入,這時應該不需要輸入密碼就能進正常登入了。

ssh git@伺服器IP

4. hexo配置自動化部署

4.1. 配置Git倉庫

執行環境: ECS伺服器

前提條件: 已安裝git,如果未安裝,請先安裝。

  1. 用git使用者登入伺服器
ssh git@伺服器IP
  1. 建立git倉庫
cd ~
git init --bare sunlogging_repo
  1. 建立 post-receive
cd hooks/
# 建立並編輯 post-receive 檔案
vim ./post-receive
# 在vim內輸入以下內容並儲存:
git --work-tree=/home/www/sunlogging --git-dir=/home/git/sunlogging_repo checkout -f
# 給 ./post-receive 新增執行許可權
chmod +x ./post-receive

post-receive檔案內容的功能:
讓鉤子檔案刪除 /home/www/sunlogging 目錄下原有的檔案,然後從 /home/git/sunlogging_repo 倉庫 clone 新的部落格靜態檔案到 /home/www/sunlogging 目錄下。

  • /home/www/sunlogging: 靜態部落格網站的根目錄
  • /home/git/sunlogging_repo: 部落格網站的git倉庫目錄
  1. 修改 /home/www/sunlogging 目錄許可權
cd /home/www/sunlogging
# 修改 sunlogging 目錄的所屬使用者為git,這樣git使用者才有讀寫許可權
chown -R git:root ./sunlogging/

4.2. hexo站點配置

執行環境: 在本地計算機

前提條件: 已安裝 node.js、hexo、git等軟體,如果未安裝,請先安裝。

  1. 安裝hexo-deployer-git

hexo-deployer-git是hexo官方提供的部署外掛,可以實現hexo站點自動部署到git倉庫。

npm install hexo-deployer-git --save
  1. 修改 _config.yml 配置
deploy:
  type: git
  repo: git@your_pub_ip:/home/git/sunlogging_repo
  branch: master

your_pub_ip為ECS伺服器的公網IP,請替換為你的公網IP。倉庫路徑修改為你自己的倉庫路徑。

  1. 部署網站
# 1.生成靜態頁面
hexo generate
# 或
hexo g

# 2.部署靜態頁面
hexo deploy
# 或
hexo d

# 1+2 簡寫為
hexo g -d
# 或
hexo d -g
  1. 驗證

透過瀏覽器訪問 http://xxx.xxx.xxx.xxx:80/,就能檢視剛部署的部落格主頁了。


大家好,我是陌塵。

IT從業10年+, 北漂過也深漂過,目前暫定居於杭州,未來不知還會飄向何方。

搞了8年C++,也幹過2年前端;用Python寫過書,也玩過一點PHP,未來還會折騰更多東西,不死不休。

感謝大家的關注,期待與你一起成長。



【SunLogging】
部落格建站7 - hexo部落格獨立伺服器如何自動部署?
掃碼二維碼,關注微信公眾號,閱讀更多精彩內容

相關文章