將 Sinatra 應用程式部署到 Heroku

將帶有加密 .env.vault 檔案的 Sinatra 應用程式部署到 Heroku。

初始設定

sinatrarackup 安裝到您的 Gemfile。

bundle add sinatra rackup

您的 Gemfile 應如下所示。

Gemfile

source "https://rubygems.org"

gem "sinatra", "~> 3.0"
gem "rackup", "~> 1.0"

建立一個包含網頁伺服器程式碼的 index.rb 檔案。

index.rb

require "sinatra"

get "/" do
  "Hello #{ENV["HELLO"]}."
end

建立您的 config.ru 檔案。

config.ru

require "./index"
run Sinatra::Application

新增一個 Procfile 以在 Heroku 上執行您的應用程式。

Procfile

web: APP_ENV=production bundle exec rackup -p "$PORT"

將程式碼提交並推送到 Heroku。

heroku create
git push heroku
yourapp.herokuapp.com

部署後,您的應用程式將顯示 'Hello .',因為它還沒有存取環境變數的方式。接下來我們來解決這個問題。

安裝 dotenv-vault

安裝 dotenv-vault

bundle add dotenv-vault

在專案的根目錄中建立一個 .env 檔案。

.env

# .env
HELLO="World"

盡可能在您的應用程式中提早 require 和載入 dotenv-vault。

index.rb

require "dotenv-vault/load"
require "sinatra"

get "/" do
  "Hello #{ENV["HELLO"]}."
end

嘗試在本地執行。

ruby index.rb
== Sinatra (v3.0.6) has taken the stage on 4567 for development with backup from Puma
* Listening on http://127.0.0.1:4567

它應該顯示 Hello World

太棒了! ENV 現在具有您在 .env 檔案中定義的金鑰和值。這涵蓋了本地開發。接下來讓我們解決生產環境的問題。

建置 .env.vault

推送您最新的 .env 檔案變更並編輯您的生產機密。了解更多關於同步的資訊

npx dotenv-vault@latest push
npx dotenv-vault@latest open production

使用 UI 來為每個環境設定這些機密。

www.dotenv.org

然後建置您加密的 .env.vault 檔案。

npx dotenv-vault@latest build

其內容應如下所示。

.env.vault

#/-------------------.env.vault---------------------/
#/         cloud-agnostic vaulting standard         /
#/   [how it works](https://dotenv.org/env-vault)   /
#/--------------------------------------------------/

# development
DOTENV_VAULT_DEVELOPMENT="/HqNgQWsf6Oh6XB9pI/CGkdgCe6d4/vWZHgP50RRoDTzkzPQk/xOaQs="
DOTENV_VAULT_DEVELOPMENT_VERSION=2

# production
DOTENV_VAULT_PRODUCTION="x26PuIKQ/xZ5eKrYomKngM+dO/9v1vxhwslE/zjHdg3l+H6q6PheB5GVDVIbZg=="
DOTENV_VAULT_PRODUCTION_VERSION=2

設定 DOTENV_KEY

擷取您的生產環境 DOTENV_KEY

npx dotenv-vault@latest keys production
# outputs: dotenv://:[email protected]/vault/.env.vault?environment=production

使用 CLI 在 Heroku 上設定 DOTENV_KEY

heroku config:set DOTENV_KEY='dotenv://:key_1234…@dotenv.org/vault/.env.vault?environment=production'

或使用 Heroku 的 UI。

www.heroku.com

部署

將這些變更安全地提交到程式碼並部署。

就這樣!在部署時,您的 .env.vault 檔案將被解密,其生產機密將作為環境變數注入,剛剛好。

yourapp.herokuapp.com

如果未設定 DOTENV_KEY (例如在本地機器上開發時),它將回退到標準的 dotenv 功能。