個人博客快速自動部署到自己的服務器
發佈於 | 分類於 Code
自己之前博客的文章都是使用WebStorm連接上服務器的FTP,打包之後手動提交到服務器,太麻煩,所以想找一個自動部署的方案。
🚀 使用 GitHub Actions 自動部署前端項目到雲服務器
實現前端項目的自動化部署可以顯著提升開發效率。GitHub Actions 提供了強大的自動化能力,讓你能夠在代碼推送至特定分支後,自動完成構建、測試和部署到雲服務器的全過程。
📋 前期準備
- 雲服務器配置:
- 創建對應網站
- 開放 ssh 對應端口 22
- 生成 SSH 密鑰對:
- 在本地終端運行 ssh-keygen -t rsa -b 4096 -C "Github Action"生成密鑰對。這將產生一個私鑰(如 id_rsa)和一個公鑰(如 id_rsa.pub) (注意:mac電腦,win沒試)
- 配置服務器 SSH 訪問:
- 將公鑰內容添加到服務器的 ~/.ssh/authorized_keys 文件中。這可以通過手動編輯文件或使用 ssh-copy-id 命令實現。
- 下方這條指令把本機用戶目錄下的 id_rsa.pub 文件發送到服務器root用戶的 home 目錄下,並添加到 authorized_keys 文件中
bash
ssh-copy-id -i ~/.ssh/id_rsa.pub root@你的IP- 最後測試 SSH 密鑰登錄,確保無需密碼即可連接到服務器:ssh root@你的服務器,如果成功登錄,說明配置成功。
- 配置 GitHub Secrets 存儲私鑰:
- 在 GitHub 倉庫中,導航到 Settings > Secrets and variables > Actions。
- 點擊 New repository secret,添加以下加密變量(Secrets),這些變量將在工作流文件中使用:
SSH_PRIVATE_KEY:你的私鑰內容(id_rsa 文件內容)SSH_HOST:你的服務器 IP 地址SSH_USER:你的服務器用戶名(如 root)SSH_PORT:SSH 端口號(默認 22)TARGET:服務器上部署項目的目標路徑(例如 /var/www/html)
⚙️ 配置 GitHub Actions 工作流
在你的項目根目錄下創建 .github/workflows文件夾,並在其中創建一個 YAML 文件(如 deploy.yml)來定義工作流。
基本工作流示例 (使用 SCP 進行文件傳輸) 以下是一個基礎的工作流配置示例,它在代碼推送到 main 分支時觸發,負責拉取代碼、安裝依賴、構建項目,並通過 SCP 將構建產物傳輸到雲服務器。 工作流文件內容如下:
yaml
name: Deploy to Server # 工作流的名稱
on: # 指定觸發工作流的事件
push:
branches: [ main ] # 當代碼推送到 main 分支時觸發
jobs:
build-and-deploy: # 定義一個名為 build-and-deploy 的任務
runs-on: ubuntu-latest # 使用最新的 Ubuntu 系統作為運行環境
steps: # 定義任務中的各個步驟
- name: Checkout code # 步驟1:檢出代碼
uses: actions/checkout@v3 # 使用 GitHub 官方的 checkout Action 來獲取倉庫代碼
- name: Setup Node.js # 步驟2:設置 Node.js 環境
uses: actions/setup-node@v3
with:
node-version: '18' # 指定 Node.js 版本,請根據你的項目要求調整
- name: Install dependencies and build # 步驟3:安裝依賴並構建項目
run: | # 執行一系列 shell 命令
npm install
npm run build
- name: Deploy to Server # 步驟4:部署到服務器
uses: appleboy/scp-action@v0.1.5 # 使用 SCP Action 進行文件傳輸
with: # 配置 SCP Action 的參數
host: ${{ secrets.SERVER_HOST }} # 服務器 IP,從 Secrets 中讀取
username: ${{ secrets.SERVER_USER }} # 服務器用戶名,從 Secrets 中讀取
key: ${{ secrets.SSH_PRIVATE_KEY }} # SSH 私鑰,從 Secrets 中讀取
port: ${{ secrets.PORT }} # SSH 端口,從 Secrets 中讀取(可選,默認22)
source: "dist/*" # 要傳輸的本地文件或目錄(構建產物)
target: ${{ secrets.TARGET }} # 服務器上的目標路徑,從 Secrets 中讀取自此每次編輯好博文提交到git上之後就會自動執行工作流上傳到服務器對應目錄。
覺得有用?請我喝杯咖啡 ☕
如果文章對你有幫助,歡迎支持一下~
