指南
如何使用 S3 存储桶作为 gem 源。
Gem 服务器解决方案 凭借其广泛的功能集,非常适合私有托管、镜像和版本间构建等用例。使用 S3 存储桶作为您的 gem 源,您可以获得私有 gem 服务器的便利性,而无需运行或维护主机。在本指南中,我们将介绍使用 S3 存储桶设置私有 gem 源以及使用 gem
命令进行配置所需的步骤。
如果您想了解有关创建 S3 存储桶及其定价的信息,请查看 s3 文档。
确保您运行的是支持 S3 签名的 ruby gems 版本。您可以使用以下命令更新您的 ruby gems
$ gem update --system
设置仓库
对于静态 gem 源,除了 <gemname>.gem
文件之外,您还需要 4 个额外的文件
specs.<version>.gz
latest_specs.<version>.gz
prerelease_specs.<version>.gz
quick/Marshal.<version>/<gemname>.gemspec.rz
您可以使用以下命令生成所有这些文件:gem generate_index
。
$ mkdir ~/repo && cd ~/repo
# <gemname>.gem must exist in a directory named `gems`
$ mkdir gems && wget -P gems/ https://rubygems.org.cn/downloads/rake-12.3.2.gem
$ gem generate_index --directory .
# replace bucket1 with name of the bucket you created
$ aws s3 sync . s3://bucket1
与 gem 命令一起使用
最佳实践是创建一个单独的 IAM 用户,该用户仅对 S3 存储桶具有读取权限。使用另一个 IAM 用户以写入权限推送 gem。
您可以使用 --source
标志使用您的 s3 源
$ gem install rake -v 12.3.2 --source s3://<AWS_ACCESS_KEY_ID>:<AWS_SECRET_ACCESS_KEY>@bucket1
如果您想预先配置多个 s3 源,请使用 .gemrc
。它还有助于避免与密钥中的特殊字符相关的错误,并允许您指定 s3 存储桶区域。
在 :sources
密钥下添加您的 s3 源。每个 s3 存储桶都应该在 s3_source
密钥下的哈希中拥有自己的凭据集。您可以使用其中一个提供程序来提取 AWS 凭据
env
- AWS 环境变量instance_profile
- AWS EC2 实例元数据 - 仅在实际 EC2 实例上有效
或者显式设置 AWS 访问 ID、密钥和会话令牌。
请注意,如果您 gem 存储库不在存储桶的根目录下,则需要将
<path_to_gems_dir>/
添加到您的 s3 源 URI。注意:尾部斜杠。
$ cat ~/.gemrc
:sources:
- s3://bucket1/
- s3://bucket2/
- s3://bucket3/path_to_gems_dir/
- s3://bucket4/
- https://rubygems.org.cn/
:s3_source:
:bucket1:
:provider: env
:bucket2:
:provider: instance_profile
:region: us-west-2
:bucket3:
:id: AOUEAOEU123123AOEUAO
:secret: aodnuhtdao/saeuhto+19283oaehu/asoeu+123h
:region: us-east-2
:bucket4:
:id: AOUEAOEU123123AOEUAO
:secret: aodnuhtdao/saeuhto+19283oaehu/asoeu+123h
:security_token: AQoDYXdzEJr
:region: us-west-1