operations/site-runner

自包含的持续交付站点托管

0.1.0 2024-05-21 13:23 UTC

This package is auto-updated.

Last update: 2024-09-20 13:30:36 UTC


README

从代码库启动站点运行者的服务器配置。

License

此代码设置服务器以使用 GitOps 工具(如 GitHub Actions)和托管工具(如 DDEV)启动和测试网站。

目标是快速在任何服务器上启动运行环境,用于自动化和手动测试,并与 GitOps API 直接集成。

它使用 GitHub Actions 和 Workflows 以及自托管运行者,提供持久、可访问的环境和日志,完全集成 GitHub Deployments & Checks API,以提供最佳的开发者体验。

有关更多详细信息,请参阅 https://operations-project.gitbook.io/operations-experience-project/operations-site-server

此功能做什么

此 Ansible Playbook 为运行网站准备裸 Linux 服务器

  1. 为管理员创建用户,并使用 GitHub 用户 SSH 密钥授予 SSH 访问权限。
  2. 安装 Docker、Composer 和 DDEV。
  3. 创建一个 platform 用户以存储站点代码和运行任务。
  4. 以服务形式安装 GitHub Self-hosted Runner,作为 platform 用户运行。
  5. 远程侦听新作业。无需授予 GitHub 访问权限来发布 webhooks。
  6. 运行项目 .github/workflows 配置中定义的 GitHub Actions。

然后,项目代码库将接管使用 GitHub Actions 配置。

GitHub Actions

使用自托管运行者,所有服务器上的活动都使用 GitHub 的 Actions 系统运行。

通过 GitHub 界面,您可以跟踪每个部署、测试运行和 cron 作业,用于拉取请求和实时环境。

部署逻辑

目前,所有部署逻辑都存储在 GitHub 工作流程配置中

  • 在哪里克隆代码。
  • 启动站点的命令。
  • 运行更新的命令。
  • 同步数据的命令。

请参阅示例文件夹中的有效配置。

使用正确的 GitHub Actions 配置,服务器将

  1. 将代码克隆到 /var/platform/example.com/pr#
  2. 为每个 DDEV 站点写入特殊的 DDEV 配置,以设置唯一的 URL。
  3. 启动网站。(ddev start
  4. 如果是一个测试网站,同步数据并运行测试。

目前,您必须将这些模板复制到您的流程中。随着项目的进展,我们将发布共享工具。

文档

这是一个仍处于概念验证阶段的非常年轻的项目。将尽可能添加更多信息。

架构

  1. Operations 平台(此存储库)

    • Ansible 集合。一组用于引导服务器以运行站点的角色和配置。
    • 安装到 /usr/share/operations
    • Ansible Playbook
      • geerlingguy.security
      • geerlingguy.github-users
      • geerlingguy.composer
      • geerlingguy.docker
    • 安装系统用户、Docker、Composer、GitHub Runner 和 DDEV。(待定更多引擎)
    • @TODO:自动更新:控制用户 GitHub 运行器更新此存储库,并在推送新提交以更改服务器配置时启动 Playbook。
    • 用户
      • 创建特殊用户以管理服务器。
      • 控制用户(control)用于服务器更新。它具有 sudo NOPASSWD 权限,以允许自我配置。如果使用多个服务器,此用户将具有对那些服务器的 SSH 访问权限,以便远程配置它们。
      • 平台用户(platform)用于所有应用代码。所有应用都会克隆到主目录,即 /var/platformplatform 用户可以通过 SSH 访问克隆仓库和访问远程服务器。platform 用户运行启动站点所需的命令,例如 ddev
      • 系统管理员可以通过将他们的 GitHub 用户名添加到 ansible 变量 operations_admin_users 来设置。每个用户都将通过上传到 GitHub.com 的 SSH 密钥获得服务器访问权限,并授予 sudo NOPASSWD 权限以允许手动维护服务器。
    • 服务引擎
      • 操作平台依赖于其他工具来启动站点。
      • “服务引擎”通过简单地封装工具的命令,使启动、停止、销毁和恢复/同步站点变得简单。
      • DDEV 作为一种概念证明,被用作第一个服务引擎。
      • 有时间的话,将添加更多。
  2. Git 运行器

    • 此角色安装和配置私有 Git 运行器。
    • 所有必要的操作都通过 Git 主机的“工作流程”或“管道”系统运行,包括部署、cron 作业、备份等。
    • 运行器监听事件,如 git 推送或问题创建,然后执行由 git-ops 配置文件定义的操作,无需 webhooks。这允许私有托管服务器运行站点,而无需强制用户授予对互联网的访问权限。
    • 所有任务都记录在 git 主机的 Web 界面中。无需其他任务运行器(如 jenkins)。
    • 运行器文档
  3. Git 运行器配置

    • 每个项目必须包含特定于该 git 主机的 workflow/pipeline 配置文件,该文件与私有运行器一起工作。
    • 示例配置文件位于(模板)(./templates)文件夹中(即将推出)。

链接

TBD

入门

此存储库包含设置自动化托管平台所需的所有内容。

先决条件

  1. git
  2. ansible

一旦克隆了存储库,ansible 将设置其余部分。

安装

  1. 安装 Ansible 和 git。

  2. 克隆。

     git clone git@github.com:operations-project/site-runner.git /usr/share/operations
    
  3. 准备。

    此 playbooks 使用 GitHub Token 自动创建 GitHub 运行器。

    此令牌仅用于创建运行器。无需其他 API 交互,因为所有操作都由 GitHub 运行器处理。运行器任务为每个作业获取唯一的 GITHUB_TOKEN,因此用户可以通过这种方式与 GitHub API 交互。

    注意:如果您的项目不是个人仓库,您需要在您的组织中启用“个人访问令牌”。

    要为组织启用个人访问令牌

    1. 打开您组织的页面。例如: https://github.com/organizations/operations-platform/
    2. 点击 设置
    3. 在左侧侧边栏中点击 个人访问令牌
    4. 通过向导配置令牌在您的组织中的工作方式。

    完成配置后,您的组织将在创建自己的“个人访问令牌”时可用。

    要创建个人访问令牌

    1. 转到创建令牌页面: https://github.com/settings/personal-access-tokens/new
    2. 资源所有者 下,选择您的组织。
    3. 仓库权限 下,对于 管理,选择 读/写
    4. 点击 生成令牌。保存令牌以供下面的 配置 步骤使用。
  4. 配置 Ansible 清单。

    Ansible 清单非常强大和灵活。有许多方法可以管理您的清单。

    本剧本包含示例库存和变量文件,您可以将它们手动放置在/etc/ansible/hosts/etc/ansible/host_vars/sites.myhost.com.yml

    请参阅示例文件,链接如下:./ansible/hosts.example./ansible/host_vars/host.example.yml

    结果应该看起来像这样

    • /etc/ansible/hosts

      [operations_host_ddev]
      sites.myhost.com ansible_connection=local
      
    • /etc/ansible/host_vars/sites.myhost.com.yml

      # Add a list of github usernames to grant access to. They will get sudo users and SSH access.
      operations_admin_users:
      - YOUR_GITHUB_USERNAME
      
      operations_github_api_token: YOUR_API_TOKEN
      operations_github_runners:
      - repo_name: YOUR_ORG/YOUR_REPO
      

    有关附加选项的详细信息,请参阅 ./ansible/host_vars/host.example.yml

    您可以根据自己的需要构建Ansible库存。以下是必需的选项。

  5. 安装。

    要安装,请以您的用户身份运行ansible-playbook(不要使用sudo)。Ansible知道如何在需要时运行sudo

    只要您的活动用户可以运行sudo,您就可以以您的个人用户账户运行ansible-playbook

     ansible-playbook /usr/share/operations/playbook.yml
    

    一旦剧本成功完成,您将在GitHub中看到一个新运行的程序。要确认

    • 访问您存储库的设置页面。
    • 点击操作,然后点击运行者
    • 您应该看到一个与您在Ansible库存中设置的主机名和标签匹配的运行者

    注意:剧本将根据您的operations_admin_users变量创建用户,并授予他们无密码的SUDO访问权限。第一次运行后,您可以以您的个人用户身份运行ansible-playbook

  6. 实施。

    要使用它,您需要添加一个GitHub工作流程配置文件,其中runs-on设置为您的运行者具有的标签。

    以下是一个确认运行者的示例

    # .github/workflows/demo.yml
    name: Verify Self-Hosted Runner
    
    # Run on all pushes and manual triggering with "workflow_dispatch"
    on:
        workflow_dispatch:
        push:
    
    jobs:
      verify:
        # Match a label or use the hostname label.
        runs-on: sites.myhost.com
    
        steps:
          - name: Environment
            run: |
              hostname -f
              whoami
              env

    更多工作流程示例即将推出。

构建于

列出本项目开发人员将与之交互的重要依赖项。

贡献

有关提交拉取请求的流程的详细信息,请参阅CONTRIBUTING.md

版本控制

我们使用SemVer进行版本控制。有关可用版本,请参阅发行版页面。

作者

  • Jon Pugh - 从模板创建项目。

请参阅参与本项目的贡献者列表。

许可

本项目采用MIT许可 - 有关详细信息,请参阅LICENSE文件。

致谢

  • @g1a 为您所做的一切。
  • aegir, lando, docksal, ddev等