AWS EC2 で Django で作った Web アプリを動作させる ~動作確認編~

Python

前回の続きです。

AWS EC2 に SSH を使ってローカルからファイルをコピーする
前回の続きです。今回は、SSH で ローカルにある Django のプロジェクトファイルを、EC2 へアップロード(コピー)することを目標とします。SCP クライアントの用意EC2 上で動作している ubuntu は、SSH のサー...

今回は、EC2 上にて、 Django で作った Python の Web アプリを動作させます。
そして、外部からグローバルに EC2 にアクセスし、Web アプリに接続できることを確認します。

Django 等動作させるための DB 準備

Pillow のインストール

画像を扱うために Pillow をインストールします。(以前「Django でモデルをマイグレートする」でもやりましたが、DBで画像ファイルを扱う際に必要となるライブラリです)

(py36) ubuntu@xxxx:~$ pip install pillow

設定ファイルの修正

以下を実行し、設定ファイル(settings.py)を修正しにいきます。

(py36) ubuntu@xxxx:~$ cd myfirstapp/myfirstapp
# vi で開く
(py36) ubuntu@xxxx:~/myfirstapp/myfirstapp$ vi settings.py

vi では、{i} で修正モードに入ります。
また、{alt} + {v} でペーストできます。

ホスト情報に EC2 を追加

Django を EC2 上で実行するようにするため、動作ホス上に EC2 の情報を追加する必要があります。

ここでの IP アドレスは、EC2 のインスタンスのIPアドレスになります。(「AWS EC2 に SSH を使ってローカルからファイルをコピーする」でやった SSH 接続先と同じ)

以下のように修正します。

- ALLOWED_HOSTS = []
+ ↓EC2 のインスタンスのIPアドレス
+ ALLOWED_HOSTS = ['XXX.XXX.XXX.XXX']

データベースの設定に PostgreSQL を追加

上記と同様に、settings.py を以下のように修正します。

DATABASES = {
    'default': {
-       'ENGINE': 'django.db.backends.sqlite3',
+       # python で PostgreSQL が使えるようにする
+       'ENGINE': 'django.db.backends.postgresql_psycopg2',
-        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
+       # 以前作成したデータベース名
+       'NAME': 'myfirstapp',
+       # 以前作成したユーザー名およびパスワード
+       'USER': 'myusername',
+       'PASSWORD': '1234',
+       'HOST': 'localhost',
+       'PORT': ''
    }
}

備考: vi で保存

{esc} を押して、 :wq で上書き保存して vi を閉じることができます。

マイグレーション準備確認

以下を実行し、エラーが出ないことを確認します。エラーが出なければ、とりあえずマイグレーション設定は問題ないはずです。

(py36) ubuntu@xxxx:~/myfirstapp$ python3 manage.py makemigrations
No changes detected

※私の場合、ユーザー名のパスワード認証でハマりました。結局理由はわからず、ユーザーを作り直したのですが、ハマったときのユーザー名には大文字が入っていたので、もしかしたら大文字を使用したのが良くなかったのかもしれません
まったくの憶測ですが、一応備忘録として残しておきます。

マイグレーション実行

以下のコマンドにて、マイグレーションを実行します。

(py36) ubuntu@xxxx:~/myfirstapp$ python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, posts, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying posts.0001_initial... OK
  Applying sessions.0001_initial... OK

EC2 にて Django 用のポートを開放する

Django の Web アプリでは、デフォルトでポート8000番を使用します。
EC2 では、ポート8000番は閉じられていますので、そちらを開放します。

EC2 の画面にて、使用しているインスタンスの「セキュリティグループ」のリンクを選択します。

そして、「インバウンド」タグから編集します。

「カスタムTCP」を選び、ポート8000を利用できるようにします。

EC2 で動作させた Web アプリに、外部からアクセスする

いよいよ、EC2 で Web アプリを動作させて、外部からアクセスします。

以下のように Django の Web アプリを起動します。

# 上記で開放したポート8000番を指定
(py36) ubuntu@xxxx:~/myfirstapp$ python3 manage.py runserver 0.0.0.0:8000

この状態で、ブラウザから http://'インスタンスのIPアドレス':8000/posts にアクセスします。

正しくポート開放できていると、以下のようにページが表示されました!

地味ですが、個人的にはかなり凄い!!
こんなサクッとできるなんて驚きです。

コメント

タイトルとURLをコピーしました