指南
如何使用 S3 儲存區作為寶石來源。
寶石伺服器解決方案 具有廣泛的功能集,非常適合用於私人託管、鏡像和版本間建置等使用案例。使用 s3 儲存區作為寶石來源,你可以享受私人寶石伺服器的便利性,而無需執行或維護主機。在本指南中,我們將介紹使用 s3 儲存區設定私人寶石來源,以及使用 gem
命令進行設定的步驟。
如果您想了解如何建立 s3 儲存空間及其定價,請查看 s3 文件。
請確定您執行的是支援 s3 簽署的 ruby gem 版本。您可以使用下列指令更新您的 ruby gem
$ 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/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 指令搭配使用
建立一個只有 S3 儲存空間讀取權限的獨立 IAM 使用者,是很好的做法。使用另一個具有寫入權限的 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/
: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