极狐GitLab 维护模式的内部工作原理
维护模式在何处强制执行?
极狐GitLab 维护模式仅通过 Rails 应用中的几个关键位置,在应用层面阻止来自 HTTP 和 SSH 请求的写入操作。 在代码库中搜索 maintenance_mode?。
- 只读数据库方法,当不允许写入数据库时,该方法会切换特殊行为。我们使用此方法来处理可能在 GET 请求中出现写入操作的地方。在代码库中搜索 Gitlab::Database.read_only?。
- 只读中间件,用于阻止引起数据库写入的 HTTP 请求,除非显式允许(例如 GET 请求)。
- 通过 SSH 的 Git 推送访问被拒绝,当 gitlab-shell 向 /internal/allowed 发送 POST 请求以检查是否允许访问时,返回 401。
- 容器镜像仓库认证服务,在该服务中阻止对容器镜像仓库的更新。
数据库本身不处于只读模式(Geo 辅助站点除外),并且可以被未受阻止的源写入。