はじめに
久しぶりに勉強がてらHerokuコマンドを打っていたのですが、すっかり忘れてしまっている...。
ということで、今回は、本当に覚え書き程度になります。
Herokuのデータのバックアップやリストアについては、以下に書いていますので、よかったらご覧いただけると幸いです。
やりたいこと / やらないこと
表題の通りで、練習用に作ってHerokuにデプロイしたアプリケーションがあるのですが、こちらについて。
- そもそも動いてるんだっけ?
- Herokuのリポジトリには反映させておきたいけど、アプリケーションは停止しておきたい...
- 逆に、停止したアプリケーション再起動したいんだけど
日々ちゃんと確認していればいいのですが、Freeプランでお世話になっていると、うっかりと状況を忘れてしまうことが。
ということで、最低限の処理のためのコマンドをメモします。
状況を確認する
起動しているかどうかは、アプリケーションのURLにアクセスすればもちろん分かりますが、「そもそもどういうURLだったっけ?」という所から始めたりもしまして...。
まずはHerokuにログインして確認するのが確実です。
次に、コマンドラインから確かめてみる場合は、こんな感じです。
コマンド | 内容 | 備考 |
---|---|---|
heroku ps | アプリケーションのプロセスを確認、起動停止もこちらを利用 | |
heroku releases | リリース(デプロイ)の記録を表示 | |
heroku logs | アプリケーションのログを表示 | |
heroku container | 今回は扱いませんがDocker imageをpushできる..! | |
heroku config | 環境変数設定や、Basic認証をかけたい時に | |
heroku maintenance | 停止はしないけどメンテ画面にするとか |
heroku ps
まずは起動中の場合はこのような感じです。
toy_app $ heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping
=== web (Free): bin/rails server -p $PORT -e $RAILS_ENV (1)
web.1: up 2018/08/26 21:26:26 +0900 (~ 7m ago)
web用のプロセスが1つ起動していますね。
Heroku側の管理画面をみると、こちらに相当します。
curlを使ってヘッダをチェックしてみると、軽量Webサーバの Cowboy がリクエストを受け付けているのが分かります。
また、Via: 1.1 vegur とありますが、これはHerokuで提供しているHTTP Proxyのライブラリとのこと。1
toy_app $ curl -vvv -I https://my-test-herokuapp.example.jp/
--- [ 中略 」---
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
Server: Cowboy
Date: Sun, 26 Aug 2018 12:29:35 GMT
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
X-Runtime: 0.022990
Via: 1.1 vegur
* Connection #0 to https://my-test-herokuapp.example.jp/
left intact
heroku ps:scale
さて、次にプロセスを停止(アプリケーションを停止)させてみます。
上記のキャプチャの通り、Herokuの管理画面から停止ができます。
さらに、コマンドラインからは heroku ps:scale を使います。
toy_app $ heroku ps:scale web=0
Scaling dynos... done, now running web at 0:Free
停止できたかどうか、再度 heroku psコマンドを確認。
toy_app $ heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping
No dynos on ⬢ xxx-xxxx-26113
toy_app $ heroku logs
--- [ 中略 」---
2018-08-26T13:01:31.397608+00:00 heroku[web.1]: Idling
2018-08-26T13:01:31.398183+00:00 heroku[web.1]: State changed from up to down
2018-08-26T13:01:32.320168+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2018-08-26T13:01:32.349083+00:00 app[web.1]: - Gracefully stopping, waiting for requests to finish
2018-08-26T13:01:32.359140+00:00 app[web.1]: === puma shutdown: 2018-08-26 22:01:32 +0900 ===
2018-08-26T13:01:32.359190+00:00 app[web.1]: - Goodbye!
2018-08-26T13:01:32.359339+00:00 app[web.1]: Exiting
2018-08-26T13:01:32.493240+00:00 heroku[web.1]: Process exited with status 143
2018-08-26T13:07:50.975839+00:00 app[api]: Scaled to console@0:Free rake@0:Free web@0:Free worker@0:Free by user xxx@example.com
ログを確認すると、プロセスの停止が確認できます。
同様に、Herokuの管理画面からも、プロセスが停止していることが分かります。
停止した上でcurlで叩いてみる
アプリケーションを停止させた上で、curlで再度アクセスしてみます。
Status Code: 503が返ってきていますね。
< HTTP/1.1 503 Service Unavailable
HTTP/1.1 503 Service Unavailable
< Connection: keep-alive
Connection: keep-alive
< Server: Cowboy
Server: Cowboy
< Date: Sun, 26 Aug 2018 13:13:00 GMT
Date: Sun, 26 Aug 2018 13:13:00 GMT
< Content-Length: 506
Content-Length: 506
< Content-Type: text/html; charset=utf-8
Content-Type: text/html; charset=utf-8
< Cache-Control: no-cache, no-store
Cache-Control: no-cache, no-store
heroku ps:scaleで再起動
503ではありますが。アプリケーションを停止させることが出来ました。
では、次に再起動させてみます。
toy_app $ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free
toy_app $ heroku ps
=== web (Free): bin/rails server -p $PORT -e $RAILS_ENV (1)
web.1: up 2018/08/26 22:18:42 +0900 (~ 1m ago)
heroku psコマンドでの起動も確認出来ました。
停止させずにアクセスを制御しておくには?
さて、「アプリケーションをバツン」と切る以外でなにかアクセスを制限できないか...という辺りですが、他に使えるものを載せてみます。
heroku maintenance
Herokuにはメンテナンスに切り替える機能があります。
こちらも、コマンドラインから切り替えが可能です。
まずは、heroku maintenance:on で、メンテナンスモードにしてみます。
このあと、heroku psをしてみますと、プロセスは起動しています。
toy_app $ heroku maintenance:on
Enabling maintenance mode for ⬢ xxx-xxxx-26113... done
toy_app $ heroku ps
Free dyno hours quota remaining this month: 550h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping
=== web (Free): bin/rails server -p $PORT -e $RAILS_ENV (1)
web.1: up 2018/08/26 22:18:42 +0900 (~ 23m ago)
curlで確認してみます。
503が返ってきていますが、ブラウザから確認してみると、メンテナンス画面(という趣旨)のレスポンスが返ります。
< HTTP/1.1 503 Service Unavailable
HTTP/1.1 503 Service Unavailable
< Connection: keep-alive
Connection: keep-alive
< Server: Cowboy
Server: Cowboy
< Date: Sun, 26 Aug 2018 13:44:42 GMT
Date: Sun, 26 Aug 2018 13:44:42 GMT
< Content-Length: 511
Content-Length: 511
< Content-Type: text/html; charset=utf-8
Content-Type: text/html; charset=utf-8
< Cache-Control: no-cache, no-store
Cache-Control: no-cache, no-store
手っ取り早くだと、こちらのほうがいいかもしれません。
メンテナンスモードのoffは、heroku maintenance:off でOKです。
toy_app $ heroku maintenance:off
Disabling maintenance mode for ⬢ xxx-xxxx-26113... done
toy_app $ curl -I https://xxx-xxxx-26113.herokuapp.com/
HTTP/1.1 200 OK
--- [ 中略 ] ---
Server: Cowboy
Via: 1.1 vegur
Basic認証は?
さて、メンテナンスモードは簡単ですが、自分もアクセスできなくなります。
可能なら、なにか認証をかけておきたい...。
こういう場合は、Basic認証を使うと良いのですが、アプリケーション&アプリケーションサーバごとに方法がことなるようなので、省略いたします。
まとめ
以上、簡単ですが起動停止のコマンドについてのメモでした。
今回1年ぶりくらいにHerokuのCLIを眺めたのですが、heroku containerというコマンドに気が付いてビックリ。
Dockerを使ったアプリケーションの公開もできるのですね。
この次は、heroku containerやCowboy、vegurについて調べてメモしておこうと思います。
-
こちらも、また別途調べてメモしておきたいと思います。「ベーグル」と読むようです。( https://github.com/heroku/vegur ) ↩