operations / site-runner
自包含的持续交付站点托管
This package is auto-updated.
Last update: 2024-09-20 13:30:36 UTC
README
从代码库启动站点运行者的服务器配置。
此代码设置服务器以使用 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 服务器
- 为管理员创建用户,并使用 GitHub 用户 SSH 密钥授予 SSH 访问权限。
- 安装 Docker、Composer 和 DDEV。
- 创建一个
platform
用户以存储站点代码和运行任务。 - 以服务形式安装 GitHub Self-hosted Runner,作为
platform
用户运行。 - 远程侦听新作业。无需授予 GitHub 访问权限来发布 webhooks。
- 运行项目
.github/workflows
配置中定义的 GitHub Actions。
然后,项目代码库将接管使用 GitHub Actions 配置。
GitHub Actions
使用自托管运行者,所有服务器上的活动都使用 GitHub 的 Actions 系统运行。
通过 GitHub 界面,您可以跟踪每个部署、测试运行和 cron 作业,用于拉取请求和实时环境。
部署逻辑
目前,所有部署逻辑都存储在 GitHub 工作流程配置中
- 在哪里克隆代码。
- 启动站点的命令。
- 运行更新的命令。
- 同步数据的命令。
请参阅示例文件夹中的有效配置。
使用正确的 GitHub Actions 配置,服务器将
- 将代码克隆到
/var/platform/example.com/pr#
。 - 为每个 DDEV 站点写入特殊的 DDEV 配置,以设置唯一的 URL。
- 启动网站。(
ddev start
) - 如果是一个测试网站,同步数据并运行测试。
目前,您必须将这些模板复制到您的流程中。随着项目的进展,我们将发布共享工具。
文档
这是一个仍处于概念验证阶段的非常年轻的项目。将尽可能添加更多信息。
架构
-
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/platform
。platform
用户可以通过 SSH 访问克隆仓库和访问远程服务器。platform
用户运行启动站点所需的命令,例如ddev
。 - 系统管理员可以通过将他们的 GitHub 用户名添加到 ansible 变量
operations_admin_users
来设置。每个用户都将通过上传到 GitHub.com 的 SSH 密钥获得服务器访问权限,并授予sudo NOPASSWD
权限以允许手动维护服务器。
- 服务引擎
- 操作平台依赖于其他工具来启动站点。
- “服务引擎”通过简单地封装工具的命令,使启动、停止、销毁和恢复/同步站点变得简单。
- DDEV 作为一种概念证明,被用作第一个服务引擎。
- 有时间的话,将添加更多。
-
Git 运行器
-
Git 运行器配置
- 每个项目必须包含特定于该 git 主机的 workflow/pipeline 配置文件,该文件与私有运行器一起工作。
- 示例配置文件位于(模板)(./templates)文件夹中(即将推出)。
链接
- GitHub 问题模板
- GitHub 提交请求模板
- 贡献指南(决定你的行为准则)
TBD
入门
此存储库包含设置自动化托管平台所需的所有内容。
先决条件
- git
- ansible
一旦克隆了存储库,ansible 将设置其余部分。
安装
-
安装 Ansible 和 git。
-
克隆。
git clone git@github.com:operations-project/site-runner.git /usr/share/operations
-
准备。
此 playbooks 使用 GitHub Token 自动创建 GitHub 运行器。
此令牌仅用于创建运行器。无需其他 API 交互,因为所有操作都由 GitHub 运行器处理。运行器任务为每个作业获取唯一的
GITHUB_TOKEN
,因此用户可以通过这种方式与 GitHub API 交互。注意:如果您的项目不是个人仓库,您需要在您的组织中启用“个人访问令牌”。
要为组织启用个人访问令牌
- 打开您组织的页面。例如: https://github.com/organizations/operations-platform/
- 点击 设置。
- 在左侧侧边栏中点击 个人访问令牌。
- 通过向导配置令牌在您的组织中的工作方式。
完成配置后,您的组织将在创建自己的“个人访问令牌”时可用。
要创建个人访问令牌
- 转到创建令牌页面: https://github.com/settings/personal-access-tokens/new
- 在 资源所有者 下,选择您的组织。
- 在 仓库权限 下,对于 管理,选择 读/写。
- 点击 生成令牌。保存令牌以供下面的 配置 步骤使用。
-
配置 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库存。以下是必需的选项。
-
-
安装。
要安装,请以您的用户身份运行
ansible-playbook
(不要使用sudo
)。Ansible知道如何在需要时运行sudo
。只要您的活动用户可以运行
sudo
,您就可以以您的个人用户账户运行ansible-playbook
。ansible-playbook /usr/share/operations/playbook.yml
一旦剧本成功完成,您将在GitHub中看到一个新运行的程序。要确认
- 访问您存储库的设置页面。
- 点击操作,然后点击运行者。
- 您应该看到一个与您在Ansible库存中设置的主机名和标签匹配的运行者
注意:剧本将根据您的
operations_admin_users
变量创建用户,并授予他们无密码的SUDO
访问权限。第一次运行后,您可以以您的个人用户身份运行ansible-playbook
。 -
实施。
要使用它,您需要添加一个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等