RubyGems 導覽選單
指南

如何使用 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 憑證

或明確設定 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

了解更多

設定 Travis 以進行版本間建置