利用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/rsync-deploy@v1.0
  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

(链接若失效,请自行快照)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则 返回列表 发新帖

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

快速回复 返回顶部 返回列表