Skip to main content

系统概览

详细了解 GitHub Enterprise Server 的系统内部结构、功能和安全性。

关于 GitHub Enterprise Server

GitHub Enterprise Server 是 GitHub 平台的自承载版本。 GitHub 将 GitHub Enterprise Server 作为独立虚拟设备分发。 当你预配虚拟机并安装设备后,该实例运行带自定义应用程序堆栈的 Linux 操作系统。 有关详细信息,请参阅“关于 GitHub Enterprise Server”。

存储体系结构

GitHub Enterprise Server 需要两个存储卷,一个装载到根文件系统路径 (/) 下,另一个装载到用户文件系统路径 (/data/user) 下 。 这种架构将运行软件环境与持久应用程序数据分离,从而可以简化升级、回滚和恢复程序。

根文件系统包含在分布式机器映像中。 它包含基本操作系统和 GitHub Enterprise Server 应用程序环境。 根文件系统应被视为临时性的。 升级到今后的 GitHub Enterprise Server 版本时,根文件系统中的所有数据都将被替代。

根存储量分成两个相同大小的分区。 其中一个分区将装载为根文件系统 (/)。 另一个分区仅在升级和升级的回退过程中作为 /mnt/upgrade 装载,以便在必要时更容易回退。 例如,如果分配了 200GB 根卷,將有 100GB 分配到根文件系统,100GB 用于升级和回滚。

根文件系统包含存储以下信息的文件。 此列表并未囊括所有方式。

  • 自定义证书颁发机构 (CA) 证书(在 /usr/local/share/ca-certificates* 中)
  • 自定义网络配置
  • 自定义防火墙配置
  • 复制状态

用户文件系统包含存储以下配置和数据的文件。 此列表并未囊括所有方式。

  • Git 存储库
  • 数据库
  • 搜索索引
  • 在 GitHub Pages 站点上发布的内容
  • Git Large File Storage 中的大文件
  • 预接收挂钩环境

部署拓扑

默认情况下,GitHub Enterprise Server 作为独立实例运行。 可以通过为部署使用不同的拓扑来提高 GitHub Enterprise Server 的可靠性和性能。

  • 若要缓解系统或网络故障的影响,可以部署被动副本实例。 在影响主实例的中断期间,可以手动故障转移到副本实例。 有关详细信息,请参阅“关于高可用性配置”。
  • 可以配置多个活动副本,以提高与主实例相距很远的开发人员的性能。 有关详细信息,请参阅“关于 Geo-replication”。
  • 一些拥有数万个开发人员的企业可能会受益于横向缩放而不是垂直缩放的群集配置。 有关详细信息,请参阅“关于集群”。

数据保留和数据中心冗余

警告:在生产环境中使用 GitHub Enterprise Server 之前,我们强烈建议你设置备份和灾难恢复计划。

GitHub Enterprise Server 包括支持通过 GitHub Enterprise Server Backup Utilities 进行联机和增量备份。 你可以通过安全网络链接(SSH 管理端口)远距离为场外或地理上分散的存储生成增量快照。 在主数据中心发生灾难时,你可以在恢复时通过网络将快照恢复到新预配的实例中。

除网络备份外,在实例处于离线或维护模式时,还支持用户存储卷的 AWS (EBS) 和 VMware 磁盘快照。 如果你的服务级别要求允许定期离线维护,可以将定期卷快照用作低成本、低复杂性的方案,代替通过 GitHub Enterprise Server Backup Utilities 进行网络备份。

有关详细信息,请参阅“在实例上配置备份”。

安全性

GitHub Enterprise Server 在基础结构上运行,受你定义的访问和安全控制措施(例如防火墙、网络策略、IAM、监视和 VPN)约束。 GitHub Enterprise Server 适用于受法规合规性约束的企业,它有助于避免公有云中的软件开发平台引发的问题。

GitHub Enterprise Server 还包含额外的安全功能。

操作系统、软件和补丁

GitHub Enterprise Server 运行自定义的 Linux 操作系统,其中只包含必要的应用程序和服务。 GitHub 将实例核心操作系统的补丁作为其标准产品发布周期的一部分进行分发。 补丁可解决 GitHub Enterprise Server 的功能、稳定性和非关键性安全问题。 GitHub 还根据需要在常规发布周期之外提供重要的安全补丁。

GitHub Enterprise Server 作为一种设备提供,许多操作系统包与通常的 Ubuntu 分发相比进行了修改。 因此,我们不支持修改基础操作系统(包括操作系统升级),与 GitHub Enterprise Server 许可证和支持协议第 11.3 除外条款保持一致。

目前,GitHub Enterprise Server 的基础操作系统是 Ubuntu 20 (Focal Fossa)。

定期补丁更新发布在 GitHub Enterprise Server 发行页面上,发行说明页面提供了详细信息。 这些补丁一般含有经过测试并且质量经过我们工程团队批准的上游供应商和项目安全补丁。 从上游更新发布到测试以及捆绑于即将发布的 GitHub Enterprise Server 补丁版本中时,可能稍有延迟。

网络安全性

GitHub Enterprise Server 的内部防火墙限制对实例服务的网络访问。 网络上仅提供设备正常运行所需的服务。 有关详细信息,请参阅“网络端口”。

应用程序安全性

GitHub 的应用程序安全团队全时关注 GitHub 产品(包括 GitHub Enterprise Server)的漏洞评估、渗透测试和代码评审。 GitHub 还与外部安全公司签约,要求他们对 GitHub 产品定期进行安全性评估。

外部服务和支持

GitHub Enterprise Server 无需从网络访问外部服务也可以正常运行。 你可以选择集成外部服务,以提供电子邮件传送、外部监控和日志转发等功能。 有关详细信息,请参阅“配置电子邮件通知”、“设置外部监视”和“日志转发”。

你可以手动收集故障排除数据并发送至 GitHub 支持。 有关详细信息,请参阅“向 GitHub 支持提供数据”。

加密通信

GitHub 将 GitHub Enterprise Server 设计为在公司防火墙后面运行。 为确保线路通信安全,我们建议你启用传输层安全协议 (TLS)。 GitHub Enterprise Server 在 HTTPS 流量方面支持 2048 位和更高的商业 TLS 证书。 有关详细信息,请参阅“配置 TLS”。

默认情况下,该实例还为使用 Git 的仓库访问和管理目的提供安全外壳 (SSH) 访问。 有关详细信息,请参阅“关于 SSH”和“访问管理 shell (SSH)”。

如果你为 你的 GitHub Enterprise Server 实例 配置 SAML 身份验证,则可以在实例和 SAML IdP 之间启用加密断言。 有关详细信息,请参阅“将 SAML 用于企业 IAM”。

用户和访问权限

GitHub Enterprise Server 提供三种类型的帐户。

  • admin Linux 用户帐户已控制对基础操作系统的访问,包括对直接文件系统和数据库的访问。 一小部分受信任的管理员应该有权访问此帐户,他们可以通过 SSH 访问。 有关详细信息,请参阅“访问管理 shell (SSH)”。
  • 实例 Web 应用程序中的用户帐户对自己的数据以及其他用户或组织明确授予权限的任何数据具有完全访问权限。
  • 实例 Web 应用程序中的站点管理员是可以管理高级 Web 应用程序和实例设置、用户和组织帐户设置以及仓库数据的用户帐户。

有关 GitHub Enterprise Server 的用户权限的更多信息,请参阅“GitHub 上的访问权限”。

身份验证

GitHub Enterprise Server 提供四种身份验证方法。

  • SSH 公钥身份验证提供使用 Git 的仓库访问权限和管理 shell 的访问权限。 有关详细信息,请参阅“关于 SSH”和“访问管理 shell (SSH)”。
  • 使用 HTTP cookie 的用户名和密码身份验证提供 Web 应用程序访问和会话管理权限,可选择双重身份验证 (2FA)。 有关详细信息,请参阅“配置内置身份验证”。
  • 使用 LDAP 服务、SAML 身份提供程序 (IdP) 或其他兼容服务的外部 LDAP、SAML 或 CAS 身份验证提供对 Web 应用程序的访问权限。 有关详细信息,请参阅“将 SAML 用于企业 IAM”。
  • OAuth 和 personal access token 为外部客户端和服务提供对 Git 存储库数据和 API 的访问权限。 有关详细信息,请参阅“管理个人访问令牌”。

审核和访问日志记录

GitHub Enterprise Server 存储传统的操作系统日志和应用程序日志。 应用程序还会编写详细的审核和安全日志,永久存储在 GitHub Enterprise Server 上。 可通过 syslog-ng 协议将两种类型的日志实时转发到多个目标。 有关详细信息,请参阅“关于企业的审核日志”和“日志转发”。

访问和审核日志包括如下信息。

访问日志

  • 关于浏览器和 API 访问的完整 web 服务器日志
  • 通过 Git、HTTP 和 SSH 协议访问仓库数据的完整日志
  • 通过 HTTPS 和 SSH 的管理访问日志

审核日志

  • 用户登录、密码重置、2FA 请求、电子邮件设置更改,以及对授权应用程序和 API 的更改
  • 站点管理员操作,例如解锁用户帐户和仓库
  • 仓库推送事件、访问授权、转让和重命名
  • 组织成员变更,包括团队创建和删除

GitHub Enterprise Server 的开源依赖项

若要查看实例的 GitHub Enterprise Server 版本中依赖项的完整列表以及每个项目的许可证,请访问 http(s)://HOSTNAME/site/credits

你的实例上提供包含依赖项和关联元数据完整列表的 tarball。

  • 对于所有平台通用的依赖项,请访问 /usr/local/share/enterprise/dependencies-<GHE version>-base.tar.gz
  • 对于特定于平台的依赖项,请访问 /usr/local/share/enterprise/dependencies-<GHE version>-<platform>.tar.gz

还在 https://enterprise.github.com/releases/<version>/download.html 处提供包含依赖项和元数据完整列表的 tarball。

延伸阅读