はい、うまくいきます。Heroku には一時的な書き込み可能なファイルシステムがあり、dyno からデータを書き込むことができます。ただし、dyno を再起動するか、新しい dyno を開始すると、データは失われます (一時的なものであるため)。ただし、引っ張ると同時に押す場合は問題ありません。
問題になる可能性があることの 1 つは、アクセス許可の設定です。dyno がプライベート リポジトリにアクセスできるようにする場合は、Heroku でプライベート キーまたはユーザー名とパスワードを設定する必要があります。
1 つの方法は、GitHub デプロイ キーを使用することです。Heroku アプリで使用するデプロイ キーをセットアップheroku config:set PRIVATE_KEY=ABCD123...
し、秘密鍵などを設定します。デプロイ キーは、デプロイ先のサーバーにも存在する必要があります。これは、Heroku アカウントまたは~/.ssh/authorized_keys
サーバー上にある可能性があります。
次に、このキーを実行中の Hubot インスタンスに取得する方法が 2 つあります。
~/.ssh/id_rsa を初期化子で作成する
アプリを実行する前に、初期化子またはその他の起動スクリプトを使用してからデータを$PRIVATE_KEY
入れます。~/.ssh/id_rsa
これはおそらく、カスタムの Hubot プラグインを使用して実行できます。その方法を検討します。
カスタム ビルドパックを使用してビルド時に ~/.ssh/id_rsa を作成する
より高度なセットアップの場合、カスタム ビルドパックを使用して、 user-env-compile機能、マルチ ビルドパック ビルドパック、およびインライン ビルドパックを使用したコンパイル中にキーを ssh ディレクトリにコピーできます。
user-env-compile を有効にします。
heroku labs:enable user-env-compile
multi buildpack を使用するようにアプリを構成します。
heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
インライン ビルドパックと元のビルドパックを に追加します.buildpacks
。
cat > .buildpacks << BUILDPACKS
https://github.com/kr/heroku-buildpack-inline.git
https://github.com/heroku/heroku-buildpack-nodejs.git
BUILDPACK
最後に、カスタム ビルドパックのスクリプトを作成します。
ビン/リリースでは、
echo '--- {}'
ビン内/検出
echo 'custom'
ビン/コンパイルで
mkdir ~/.ssh
chmod 700 ~/.ssh/
cat > ~/.ssh/id_rsa << KEY
-----BEGIN RSA PRIVATE KEY-----
$PRIVATE_KEY
-----END RSA PRIVATE KEY-----
KEY
chmod 400 ~/.ssh/id_rsa
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
これで、アプリが Heroku にプッシュされると、マルチ ビルドパックがインライン ビルドパックを実行するようになります。インライン ビルドパックは、カスタム ビルドパックを から実行しますbin/{compile,detect,release}
。このカスタム ビルドパックは、$PRIVATE_KEY
環境変数をコピーし~/.ssh/id_rsa
て公開鍵を生成します。$PRIVATE_KEY
user-env-compile 機能がオンになっているため、使用できます。最後に、マルチ ビルドパックが元の Node.js ビルドパックを実行し、すべてがスムーズに実行されるはずです。
注意事項
この buildpack メソッドを使用し、秘密鍵を で更新している場合heroku config:set PRIVATE_KEY=mynewkey
、アプリは再起動されますが、再構築されません。次のように、空のコミットをプッシュする必要があります。
git commit -m "Rebuild private key." --allow-empty && git push heroku master
または、Heroku がキーを自動的に再構築するための次のデプロイまで待ちます。