Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
134
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Herokuのアプリケーションの停止 / 再開

はじめに

久しぶりに勉強がてら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側の管理画面をみると、こちらに相当します。

heroku-admin-screen.png

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

maintenance-mode.png

手っ取り早くだと、こちらのほうがいいかもしれません。

メンテナンスモードの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について調べてメモしておこうと思います。


  1. こちらも、また別途調べてメモしておきたいと思います。「ベーグル」と読むようです。( https://github.com/heroku/vegur

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
134
Help us understand the problem. What are the problem?