备案权重域名预定

 找回密碼
 加入我們

利用GitHub Actions自動部署Telegram Bot代碼到服務器

[複製鏈接]
老黑醬 發表於 2021-2-19 20:03:44 | 顯示全部樓層 |閱讀模式

最近寫了幾個新的Bot,為了方便寫的時候調試,研究了如何自動從本地部署到服務器,同時為了代碼管理,Google了下「Github自動部署到服務器」。試了下Github Actions,真是相見恨晚。先簡單記錄下如何實現自動部署。

本地環境: Git + Pycharm
中間倉庫: Github private repository
運行服務器: VPS + 開啟SSH密鑰對登陸 + 安裝必要的工具

一、Github 設置

創建Github賬號並創建私有庫

如果沒有Github賬號可以按教程創建一個。現在創建私有庫免費,且個人使用沒有數量上的限制。感謝Github,為代碼進行Git管理帶來了便捷。

創建SSH密鑰對,用於授權Github對服務器的訪問

私鑰配置到Github倉庫的環境變量

這裡和配置SSH密鑰授權登陸遠程服務器類似,不同的是私鑰需要配置到Github倉庫中而不是保留在本地。
直接進入環境變量配置界面 https://github.com/用戶名/倉庫名/settings/secrets/actions 或從項目的設置裡面進入

倉庫添加加密變量

DEPLOY_KEY變量的值導入後便不可見,但是可以隨時修改。同樣方式導入名子為SSH_HOST的變量,用於存儲服務器的IP,SSH_USERNAME存儲將登陸服務器的用戶名。

上傳公鑰到服務器

和配置SSH密鑰授權登陸遠程服務器一樣。為了方便,也可不去用編輯器編輯authorized_keys文件,直接命令行導入

cat /root/.ssh/authorized_keys <
創建的公鑰的內容
EOF
二、本地安裝Git + Pycharm並配置

安裝Git

直接下載這個版本 https://git-scm.com/download/win

安裝Pycharm

社區版本即夠用了 https://www.jetbrains.com/pycharm/download/#section=windows

設置Pycharm的Github賬號

直接登陸Github賬號報錯「invalid authentication data 404 not found」,可以用token的方式登陸,獲取鏈接:https://github.com/settings/tokens

登陸Github賬號報錯:換token方式登陸

Git的一些操作,包括add,commit,push,都在Pycharm的Git或者VCS菜單下,不需要敲任何命令。

三、服務器環境安裝

安全設置

關閉密碼方式登陸,僅開啟SSH密鑰方式登陸

安裝必要的程序

  1. apt-get install sudo vim screen htop rsync curl sqlite3 python3-pip
  2. pip3 install python-telegram-bot
複製代碼

其中,
rsync和curl是把代碼從Github上傳到服務器必須用的;
給root用戶安裝sudo命令是是為了向下兼容有些為普通用戶準備的帶sudo的命令;
裝vim的目的是博主習慣用vim;
裝htop是為了更直觀地看系統進程;
sqlite3和python3-pip是部署的項目需要用到。

四、Github倉庫創建Actioins

等代碼可從本地Push到Github倉庫後,新建一個Actions腳本,將需要觸發的一些命令寫入

以下腳本供參考,可以直接替換掉新建的Actions腳本裡面的默認內容

  1. name: Deploy Python Telegram Bot (gdsharebot)

  2. on:
  3.   push:
  4.     branches:
  5.       - master
  6.     paths-ignore:
  7.       - README.md
  8.       - readme.md
  9.       - LICENSE

  10. jobs:
  11.   deploy:
  12.     runs-on: ubuntu-latest
  13.     if: "!contains(github.event.head_commit.message, 'ci skip')"

  14.     steps:
  15.       - uses: actions/checkout@v2

  16.       - name: Deploy to Server
  17.         uses: AEnterprise/[email protected]
  18.         env:
  19.           DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
  20.           ARGS: -avz --delete --exclude='*.pyc'
  21.           SERVER_PORT: "22"
  22.           FOLDER: ./
  23.           SERVER_IP: ${{ secrets.SSH_HOST }}
  24.           USERNAME: ${{ secrets.SSH_USERNAME }}
  25.           SERVER_DESTINATION: /root/gdsharebot
  26.       - name: Restart server
  27.         uses: appleboy/ssh-action@master
  28.         with:
  29.           host: ${{ secrets.SSH_HOST }}
  30.           username: ${{ secrets.SSH_USERNAME }}
  31.           key: ${{ secrets.DEPLOY_KEY }}
  32.           script: |
  33.             screen -ls | egrep "^\s*[0-9]+.gdsharebot" | awk -F "." '{print $1}' | xargs --no-run-if-empty kill
  34.             screen -S gdsharebot -dm bash -c "cd /root/gdsharebot; python3 main.py"
  35.             exit
複製代碼


五、其他的一些記錄

Telegram Bot 申請

公鑰私鑰生成

原文鏈接:https://www.goojie.eu/2745.html

(鏈接若失效,請自行快照)
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 加入我們

本版積分規則

备案权重域名预定

4um點擊跨境網編創業社區

GMT+8, 2024-11-24 00:19

By DZ X3.5

QQ

快速回復 返回頂部 返回列表