通过 Github Action 发布项目到 Aliyun 阿里云 ECS

本贴最后更新于 1739 天前,其中的信息可能已经时移俗易

通过 Github Action 发布项目到 Aliyun 阿里云 ECS,非常适合团队项目或是个人的小项目,操作简单、便于维护。

本文将通过最详细的描述,从每个步骤的源头开始讲起,保证小白也能成功。

通过 Github 的 Action 发布到 ECS 有几个关键点:

  1. 项目构建环境的初始化,以及项目的编译

这一步可以利用 Action 的构建模板,选择合适的基础环境,然后再定制化编译脚本完成初始化和编译流程。

  1. Action 的编译环境,如何安全的连接到 ECS 完成发布

项目完成编译后,需要把文件上传到服务器,并完成服务的重启,此时需要通过 SSH 等服务。

本文以 SSH 为主进行介绍,SSH 链接到 ECS,建议通过密钥形式,安全性更高。

下面是一份我的个人项目中的一份脚本,供大家参考:

name: Build And Deploy To Aliyun ECS
on:
  push:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          persist-credentials: false
          ref: master
          submodules: true
      - name: Install and Build
        run: |
          yarn install
          yarn build
      - name: Deploy to aliyun server
        uses: easingthemes/ssh-deploy@v2.0.7
        env:
          SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SERVER_ACCESS_TOKEN }}
          ARGS: "-avzr --delete"
          SOURCE: "dist/"
          REMOTE_HOST: ${{ secrets.ALIYUN_SERVER_HOST }}
          REMOTE_USER: "root"
          TARGET: "/root/web"

分部分介绍:

第一部分:

name: Build And Deploy To Aliyun ECS

这个是任务的名称,参考作用。

第二部分:

on:
push:
branches: [ master ]

这部分是触发器,当发生哪些行为时,触发 Github Action 的执行。
如上配置,则是当 master 分支,发生 push 时,触发执行。
你同样可以切换到其他的分支或其他的行为,比如新 tag 的 push 等等,具体请参考:
https://docs.github.com/cn/free-pro-team@latest/actions/reference/events-that-trigger-workflows

第三部分

jobs:

这里就开始正式的构建项目了,jobs 就是工作流程,工作流程运行包括一项或多项作业。 作业默认是并行运行。
我们这里定义了一项作业,即 build。

runs-on: ubuntu-latest
steps:

这里定义了我们这项作业的运行环境,机器可以是 GitHub 托管的运行器或自托管的运行器。
可选的 GitHub 运行器有 windows、ubuntu 和 macos,你也可以构建自托管的运行器,满足您高度的自定义运行环境需求。
我的项目是 NodeJS 编写的,默认的 ubuntu 运行器包含 NodeJS 环境,所以我这里直接采用了 GitHub 提供的运行器。

steps 则是作业的步骤,每个步骤可以是运行命令或是其他操作。

- name: Checkout
  uses: actions/checkout@v2
  with:
  persist-credentials: false
  ref: master
  submodules: true

这是我们作业的第一个步骤,这个步骤的任务是把我们的源码 checkout 下来,此处选择的分支是 master。

- name: Install and Build
  run: |
     yarn install
     yarn build

这是作业的第二个步骤,NodeJS 项目的构建环境初始化和编译。

- name: Deploy to aliyun server
  uses: easingthemes/ssh-deploy@v2.0.7
  env:
    SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SERVER_ACCESS_TOKEN }}
    ARGS: "-avzr --delete"
    SOURCE: "dist/"
    REMOTE_HOST: ${{ secrets.ALIYUN_SERVER_HOST }}
    REMOTE_USER: "root"
    TARGET: "/root/web"

这是作业的最后一个步骤,项目编译完成后,将会在项目目录的 dist 下生成最终文件,我们只需要把这个目录下的所有问题发布到 ECS 即可。
这里使用的是 SSH 链接到了 ECS。
先详细介绍一下几个关键参数:

ARGS: "-avzr --delete"
SOURCE: "dist/"
TARGET: "/root/web"

这三个参数,将本地的 dist 目录下的所有文件覆盖到了云端的/root/web 目录

SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SERVER_ACCESS_TOKEN }}
REMOTE_HOST: ${{ secrets.ALIYUN_SERVER_HOST }}
REMOTE_USER: "root"

这三个参数是 SSH 的链接参数,user 即链接服务的用户名(阿里云一般是 root),host 即服务器地址(可以是 IP 也可以是域名)
SSH_PRIVATE_KEY 链接私钥
其中 HOST 和 KEY 两个我们采用了环境变量的方式引用,对应 secrets 的环境变量,你可以在项目的如下图所示位置进行配置:

gaecs1.png

我们配置了两个参数,HOST 比较简单,关于私钥的配置,请参考如下步骤:

(其实是 SSH 免密码登录的配置,熟悉的同学可以掠过)

  1. 我们需要创建一个私钥

我们可以利用阿里云控制台进行操作(同样,也可以用 linux 的命令行进行操作)

进入阿里云的 ECS 控制台,在左侧菜单找到 < 网络与安全 > < 密钥对 >

点击创建密钥对,如下填写,名称和其他信息可以随意:
gaecs2.png

创建成功后,就会自动下载私钥文件,我们保存到本地即可。

  1. 利用私钥生成公钥

Windows 可以使用 WSL,Linux 的进入终端

输入如下命令,即可生成公钥

ssh-keygen -y -f /path/to/private_key > /path/to/public_key.pub
  1. 将公钥写入.ssh

将生成的公钥里面的内容,追加到 ECS 的~/.ssh/authorized_keys 中即可。

  1. 更新 ssh 配置,允许 root 登录

编辑/etc/ssh/sshd_config

修改如下配置:

PermitRootLogin yes

然后执行:

service sshd restart

应用配置

  1. 更新 GitHub 配置

进入 Secrets 配置,点击,如下图所示填写

名称填写我们在脚本里写的变量名:ALIYUN_SERVER_ACCESS_TOKEN

值,填写私钥的内容。
gaecs3.png
创建完成后,记得删掉私钥,并清空回收站,不要让任何人获取到私钥内容。

至此,一切大功告成!

  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2040 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 343 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    100 引用 • 905 回帖
  • 电影

    这是一个不能说的秘密。

    123 引用 • 608 回帖
  • 笔记

    好记性不如烂笔头。

    311 引用 • 794 回帖
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 1 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 63 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    59 引用 • 22 回帖 • 6 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    108 引用 • 153 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 506 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    53 引用 • 190 回帖 • 1 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 312 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 571 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 54 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 563 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    186 引用 • 1021 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 2 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 186 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    118 引用 • 54 回帖 • 4 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    183 引用 • 3885 回帖 • 1 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 662 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 59 回帖 • 1 关注
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 818 回帖