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

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

通过 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)。

    210 引用 • 2036 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 3 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 747 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 440 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    288 引用 • 734 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    27 引用 • 225 回帖 • 162 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 242 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 39 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    30 引用 • 96 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 104 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖 • 1 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 371 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    86 引用 • 122 回帖 • 627 关注
  • 996
    13 引用 • 200 回帖 • 11 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖 • 1 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 694 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    171 引用 • 512 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 623 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 483 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 172 关注
  • danl
    146 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 4 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 2 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 159 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    135 引用 • 191 回帖