はじめまして。
普段はWebサービスの開発とかしてます。
はじめに
彡(゚)(゚)「サービスを作って公開してみたいなあ〜」
彡(゚)(゚)「けど、レンタルサーバー借りるの手間だし...」
彡(゚)(゚)「サーバー代払いたくないなあ...」
こんな気持ちになったことありませんか?
きっとあるはずです。
そんなときはHeroku 無料プランを使いましょう。
本記事では、作ったアプリケーションをHerokuの無料プランで公開する方法について書きます。
▷ Heroku公式サイトはこちら
無料プランって何が出来るのん?
大体のことは出来ます。
サーバーにアプリケーションをデプロイして運用するくらいなら問題なく使えます。
Herokuの無料プランで気にすべき制約は以下の二つです。
- 無料 Dyno 時間(稼働時間)が 550 時間/月
- 30分アクセスが無いとアプリがスリープしてしまう
無料 Dyno 時間(稼働時間)が 550 時間/月
Herokuの無料プランはデフォルトのままだと月に550 時間分の Dyno 時間しか与えられません。
30 日 × 24 時間 = 720 時間 なので、1ヶ月フル稼働させようとすると無料プランでは足りません。
ただ、これはクレジットカードを持っていれば解決できます。
無料プランでもクレジットカードをアカウントに登録すると
450 時間/月 の 無料 Dyno 時間が加算され、合計 1,000 時間/月 まで使えるようになります。
30分アクセスが無いとアプリがスリープしてしまう
無料プランでは 30分アクセスが無いとアプリがスリープしてしまい、
次回アクセス時にアプリが立ち上がる時間分、レスポンスが遅く なってしまいます。
ただ、これは Heroku Scheduler で解決できます。
Heroku Scheduler とは、指定したコマンドの定期実行を可能にする機能です。
Linuxのcronのようなものですね。
Heroku Scheduler でアプリのURLに対してcurlコマンドを実行することで
アプリを落とすことなく稼働し続けることが出来ます。
▷ Heroku Scheduler の設定方法はこちらの記事にまとめました。
サーバーへのデプロイ方法
※ 当記事はDjangoプロジェクトのデプロイを前提にしています。
※ Railsプロジェクトの場合、Gemfile修正などの手順が必要になりますが、実行するHerokuコマンドは同じです。
1. 必要なライブラリのインストール
プロジェクトがHeroku上で稼働するために必要なライブラリをインストールします。
pip install gunicorn django-heroku
2. 実行環境ファイルの追加
プロジェクトの実行環境をHerokuに伝えるファイルをプロジェクトディレクトリ直下に作成します。
runtime.txt
Pythonバージョンを記載するファイルです。
python-3.6.6
Procfile
Herokuプロセスの起動コマンドを記載するファイルです。
<your-project-name>
は自身のプロジェクト名に読み替えて下さい。
web: gunicorn <your-project-name>.wsgi --log-file -
requirements.txt
依存パッケージのリストを記載します。
pip freeze
コマンドの出力結果をそのままファイルにしましょう。
pip freeze > requirements.txt
3. プロジェクトの設定ファイルの修正
settings.py
のDEBUG = Ture
の部分を本番運用向けに変更します。
DEBUG = False
4. Gitでコミット
Gitでローカルリポジトリの作成 & コミットを行います。
git init
git config user.name "Your Name"
git config user.email you@example.com
git add .
git commit -m "first commit"
5. Herokuコマンドでデプロイ
HerokuコマンドでHerokuにデプロイします。
heroku login
コマンド実行時にブラウザが立ち上がり、Herokuの認証を求められます。
ログインした後、ブラウザを落とさずにターミナルに戻ると後続の作業が行えます。
heroku login
heroku create <your-app-name>
git push heroku master
heroku ps:scale web=1
heroku run python manage.py migrate
さいごに
一人でも多くのエンジニアが自身のプロダクトを世界に公開出来ることを願っております。