opensuse/portus此目录包含创建生产就绪的 Portus Docker 镜像所需的所有资源。
本仓库的 master 分支包含从 master 分支构建 Portus 所需的文件,标记为 head。其他分支用于从更稳定的分支构建 Portus,命名格式为 portus-<release>。
此外,请注意部署方式已发生较大变化:
head),Portus 使用 Puma。本文档包含 Puma 部署的说明。如需了解其他版本的部署方法,请参考对应分支的此文件。
SUSE 容器团队重视安全,因此我们做出以下决策:
production 环境,默认启用 SSL。可通过将环境变量 PORTUS_CHECK_SSL_USAGE_ENABLED 设置为 false 禁用 SSL,但不推荐此操作。SUSE 容器团队持续自动化 Portus 及此镜像的发布流程,确保其保持最新和安全。
部署此镜像时,请确保在运行时添加所有必需的密钥和证书,而非将其添加到 Docker 镜像中。
此镜像基于 openSUSE 42.2,通过 SUSE 容器团队在 开放构建服务 顶级项目及子项目(每个 Portus 分支对应一个子项目)中构建的 RPM 包安装 Portus。
此镜像使用 Puma 作为 Web 服务器,仅绑定到 3000 端口。
此 Docker 镜像包含一个 init 脚本,负责以下操作:
/certificates 目录下所有 .crt 文件下文将详细说明这些步骤。
Portus 的状态存储在 MariaDB 数据库中,因此此 Docker 镜像为无状态。
此镜像包含自定义 init 脚本,负责配置外部数据库。
脚本将持续尝试连接数据库 90 秒,每次失败后暂停 5 秒。若数据库无法连接,容器将退出并显示错误信息。
脚本会通过常规的 Rails 流程创建 Portus 数据库并完成初始数据填充。
当上游项目引入新的数据库迁移时,数据库将自动迁移。
Portus 需要 SSL 密钥和证书以通过 HTTPS 提供内容,这些文件必须位于容器的 /certificates 目录中。此外,部署者需设置环境变量 PORTUS_PUMA_TLS_KEY 和 PORTUS_PUMA_TLS_CERT。注意,该密钥还用于签署 JWT 令牌,以验证 Docker 客户端与 Registry 的身份。
当 Registry 使用 TLS 进行安全防护时,还需添加 Registry 的证书。Registry 证书必须放在 /certificates 目录中,此镜像的 init 脚本会自动导入扩展名为 .crt 的证书。
此镜像还支持通过 Docker 密钥 设置部分环境变量。具体而言,设置 PORTUS_DB_PASSWORD_FILE、PORTUS_PASSWORD_FILE、PORTUS_SECRET_KEY_BASE_FILE、PORTUS_EMAIL_SMTP_PASSWORD_FILE 和 PORTUS_LDAP_AUTHENTICATION_PASSWORD_FILE 为密钥路径,将自动分别用这些文件的内容设置 PORTUS_DB_PASSWORD、PORTUS_PASSWORD、PORTUS_SECRET_KEY_BASE、PORTUS_EMAIL_SMTP_PASSWORD 和 PORTUS_LDAP_AUTHENTICATION_PASSWORD。
所有日志输出到 stdout 和 stderr,便于按常规方式处理此镜像的日志。
可使用现有的 Docker 镜像编排解决方案部署此镜像。更多示例可参考 Portus 源码的 examples 目录。
Portus 使用 crono 处理部分后台任务。也可通过此镜像执行该脚本,只需将环境变量 PORTUS_INIT_COMMAND 设置为 "bin/crono"。
以下是完整的环境变量列表:
安全相关设置:
PORTUS_SECRET_KEY_BASE:可使用 openssl rand -hex 64 生成,或通过 PORTUS_SECRET_KEY_BASE_FILE 提供 Docker 密钥。PORTUS_KEY_PATH:证书密钥路径,Portus 用于与 Docker Registry 进行身份验证。PORTUS_PASSWORD:隐藏用户 portus 的密码,可使用 openssl rand -hex 64 生成,或通过 PORTUS_PASSWORD_FILE 提供 Docker 密钥。PORTUS_PUMA_TLS_KEY:Puma 要使用的 TLS 密钥。PORTUS_PUMA_TLS_CERT:Puma 要使用的 TLS 证书。PORTUS_CHECK_SSL_USAGE_ENABLED:设为 false 可完全禁用 SSL。数据库相关设置(详见 配置数据库):
PORTUS_DB_ADAPTER:数据库类型,支持 postgresql 和 mysql2,默认值为 mysql2。PORTUS_DB_HOST:运行 MariaDB(或 Postgres)数据库的主机。PORTUS_DB_USERNAME:要使用的数据库用户。PORTUS_DB_PASSWORD:数据库用户密码,可通过 PORTUS_DB_PASSWORD_FILE 提供 Docker 密钥。PORTUS_DB_DATABASE:Portus 数据库名称。PORTUS_DB_PORT:可选数据库端口号。PORTUS_DB_POOL:连接池数量。PORTUS_DB_TIMEOUT:请求超时值。部署相关设置:
PORTUS_MACHINE_FQDN_VALUE:Portus 实例的完全限定域名(例如:portus.example.com)。Puma 微调设置:
PORTUS_PUMA_WORKERS:要生成的 Puma 工作进程数,默认值为 1。PORTUS_PUMA_MAX_THREADS:要创建的 Puma 最大线程数,默认值为 1。RAILS_SERVE_STATIC_FILES:设为 true 可让 Puma 提供静态文件,默认值为 false(此时需在容器前部署 NGinx 等服务)。执行其他命令:
PORTUS_INIT_COMMAND:可设置要运行的命令,例如要运行 crono,可设为 "bin/crono"。PORTUS_BACKGROUND:设为 true 表示要执行的进程是 rails 运行器 bin/background.rb(即后台进程),相当于 PORTUS_INIT_COMMAND=rails r /srv/Portus/bin/background.rb 的快捷方式。还可传递更多环境变量以配置 Portus,详见 此处。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务