1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DjangoWebアプリをAWS EC2で動作させる

Posted at

ローカルで開発した Django WebアプリをEC2で稼働できるようにするための手順。
事前にWebアプリはGitHubにアップロード済み。
静的ファイル収集とライブラリの出力もしておきます。

settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
python manage.py collectstatic

pip freeze > requirements.txt

EC2 の作成と設定

・ColoudFormation用のyamlファイルを作成してVPC, EC2Instance, InternetGateway, PublicSubnet, RouteTable, SecurityGroup を作成しておきます。
コンソールで作成してもOK お好きな方で。
(ここは各自設定が違うと思うので割愛)

・セキュリティグループにDjango用のポートを設定
カスタムTCP TCP 8000 Anywere-IPv4
image.png

EC2 へアクセス

・EC2の設定のためターミナルからアクセスします(VScode AWS-Cli を使用)。
パブリックIPの取得 -> ログイン

> aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress]" --output table
>>
------------------------------------------
|            DescribeInstances           |
+----------------------+-----------------+
|  i-***************** |  **.***.***.**  | <- $Public_IP
+----------------------+-----------------+

> ssh -i "セキュリティキーパス/ファイル名.pem" ec2-user@$PUBLIC_IP

   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'

Gitインストール -> Webアプリ Pull

sudo yum update -y
sudo yum install git -y

git clone <リポジトリのURL>.git

取り込まれたWebアプリのファイルが表示されればOKです

$ ls
CloudFormationTemplate.yaml  config          django_command.sh  manage.py          package.json    react_command.sh  templates
Lib                      connect_ec2.sh  ec2_command.sh     node_modules       pyvenv.cfg      requirements.txt  update_settings.py
Scripts                  db.sqlite3      equity_hub         package-lock.json  react-frontend  staticfiles       users

必要なライブラリインストール

事前にインストール済みのライブラリを requirements.txt に出力してWebアプリ内に保存していたのでまとめてインストール。
合わせてサーバー起動用のgunicorn, 静的コンテンツ公開用のwhitenoiseをインストール

pip install -r requirements.txt

pip install gunicorn

pip install whitenoise

実行確認

<webアプリディレクトリを私はconfig にしているので Webアプリ内で実行するときは
gunicorn config.wsgi:application --bind 0.0.0.0:8000 となります。

gunicorn <webアプリディレクトリ>.wsgi:application --bind 0.0.0.0:8000

おそらく Invalid HTTP_HOST header: が表示されたと思います。
settings.py 内の ALLOWED_HOSTS = [] 内にEC2のパブリックIPを指定しないといけません。

ALLOWED_HOSTS 設定

sudo nano settings.py

ALLOWED_HOSTS = ["**.***.***.**"] <- Public_IP

#入力後 CTRL + X, Y, ENTER

再度実行後[http://Public_IP:8000] にアクセス

image.png

ページが表示されればOKです。

終わりに

・これで起動が確認できましたが、気になる点が2つ。
1:毎回ターミナルでサーバーを起動しないとWebアプリを使用できない。
2:EC2を一度停止するとPublic_IPが変わってALLOWED_HOSTS の変更が必要になる。

次回はこの対応を考えてみようと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?