最近寫了幾個新的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密鑰方式登陸
安裝必要的程序
- apt-get install sudo vim screen htop rsync curl sqlite3 python3-pip
- pip3 install python-telegram-bot
複製代碼
其中,
rsync和curl是把代碼從Github上傳到服務器必須用的;
給root用戶安裝sudo命令是是為了向下兼容有些為普通用戶準備的帶sudo的命令;
裝vim的目的是博主習慣用vim;
裝htop是為了更直觀地看系統進程;
sqlite3和python3-pip是部署的項目需要用到。
四、Github倉庫創建Actioins
等代碼可從本地Push到Github倉庫後,新建一個Actions腳本,將需要觸發的一些命令寫入
以下腳本供參考,可以直接替換掉新建的Actions腳本裡面的默認內容
- name: Deploy Python Telegram Bot (gdsharebot)
- on:
- push:
- branches:
- - master
- paths-ignore:
- - README.md
- - readme.md
- - LICENSE
- jobs:
- deploy:
- runs-on: ubuntu-latest
- if: "!contains(github.event.head_commit.message, 'ci skip')"
- steps:
- - uses: actions/checkout@v2
- - name: Deploy to Server
- uses: AEnterprise/[email protected]
- env:
- DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
- ARGS: -avz --delete --exclude='*.pyc'
- SERVER_PORT: "22"
- FOLDER: ./
- SERVER_IP: ${{ secrets.SSH_HOST }}
- USERNAME: ${{ secrets.SSH_USERNAME }}
- SERVER_DESTINATION: /root/gdsharebot
- - name: Restart server
- uses: appleboy/ssh-action@master
- with:
- host: ${{ secrets.SSH_HOST }}
- username: ${{ secrets.SSH_USERNAME }}
- key: ${{ secrets.DEPLOY_KEY }}
- script: |
- screen -ls | egrep "^\s*[0-9]+.gdsharebot" | awk -F "." '{print $1}' | xargs --no-run-if-empty kill
- screen -S gdsharebot -dm bash -c "cd /root/gdsharebot; python3 main.py"
- exit
複製代碼
五、其他的一些記錄
Telegram Bot 申請
公鑰私鑰生成
原文鏈接:https://www.goojie.eu/2745.html
(鏈接若失效,請自行快照) |