站点图标 谷姐靓号网

利用GitHub Actions自动部署Telegram Bot代码到服务器

5/5 - (1 vote)

最近写了几个新的Bot,为了方便写的时候调试,研究了如何自动从本地部署到服务器,同时为了代码管理,Google了下“Github自动部署到服务器”。试了下Github Actions,真是相见恨晚。先简单记录下如何实现自动部署。

本地环境: Git + Pycharm
中间仓库: Github private repository
运行服务器: VPS + 开启SSH密钥对登陆 + 安装必要的工具

一、Github 设置

创建Github账号并创建私有库

如果没有Github账号可以按教程创建一个。现在创建私有库免费,且个人使用没有数量上的限制。感谢Github,为代码进行Git管理带来了便捷。

在Github创建免费私有仓库

创建SSH密钥对,用于授权Github对服务器的访问

防黑客爆破:配置SSH密钥对用于远程访问服务器

私钥配置到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

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

三、服务器环境安装

安全设置

关闭密码方式登陆,仅开启SSH密钥方式登陆,参考

防黑客爆破:配置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/rsync-deploy@v1.0
        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 申请

超简单1分钟创建Telegram Bot,获取Bot Token

公钥私钥生成

防黑客爆破:配置SSH密钥对用于远程访问服务器

退出移动版