LoginSignup
6
6

More than 5 years have passed since last update.

EC2でコンテナ使ってdjangoを使ったwebサイトを作ってみる

Posted at

やったこと

AWSのサービスをまだ全然理解できてない(特にコンテナ周り)のでまずはEC2にインスタンス立ててその中にdjangoで作ったwebサーバーを入れたコンテナを立ててアクセスする。という流れをやってみました。djangoを使ったwebページはすでに作成していることを前提に話を進めていきます。

開発環境

  • python3.6.5
  • django 2.0.6
  • docker 18.03.1-ce

インスタンスを立てる

AWSコンソールからインスタンスを作成します。今回はAmazon Linux 2t2.microを使用しました。
また、今回はdjangoのアプリのリポジトリをあらかじめcode commitに作成したのでインスタンスにcode commitの権限を付与したロールを設定します。djangoを使って8000ポートからアクセスするようにするのでセキュリティグループのルールに8000 tcp 0.0.0.0/0を設定します。

必要なものをインスタンスにインストールする

$ yum update
$ yum install -y docker
$ yum install git

先ほども書いたように今回はdjangoで作成したwebページをcode commitにあげているのでgitもインストールします。

$ git config --global credential.helper '!aws --region ap-northeast-1 codecommit credential-helper $@'
$ git config --global credential.UseHttpPath true

codecommitからクローンできるように設定をします。この設定に関してはこの記事を参考にさせていただきました。

イメージの作成

開発環境が整ったらイメージの作成をします。
今回はcode commitからコードを取ってきているのでdjangoの使い方等は割愛します。
今回Dockerfileは以下のようになっています。

FROM ubuntu:17.10

RUN mkdir -p /root/firm/ \
  && mkdir -p /root/firm/django_app \
  && mkdir -p /root/.aws

COPY vis_ml /root/firm/django_app/
COPY aws /root/.aws/

RUN apt update \
  && apt install apt-utils -y \
  && apt install python3 -y \
  && apt install python3-pip -y \
  && pip3 install -r /root/firm/django_app/requests.txt \
  && pip3 install awscli

EXPOSE 8000

CMD ["python3", "/root/firm/django_app/manage.py", "runserver", "0.0.0.0:8000"]

以下を実行してイメージの作成を行います

$ docker build -t django_app .

無事にイメージを作ることができました。

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
django_app          latest              234567890123        About an hour ago   1.58GB
ubuntu              17.10               123456789012        3 weeks ago         100MB

コンテナの起動

以下のコマンドを実行してコンテナを起動します。今回は8000番ポートをdjangoのwebページに使用しているので8000を開けるようにします。

$ docker run -p 8000:8000 -d django_app:latest 

これでできた!と思って http://パブリックDNS:8000 にアクセスすると

DisallowedHost at Invalid HTTP_HOST header: ‘hoge:8000’. You may need to add ‘hoge’ to ALLOWED_HOSTS.

と怒られてしまいました。
調べてみると、djangoのフォルダにある setting.pyの中にあるALLOWED_HOSTS = []の部分にインスタンスのパブリックIPとDNSを入力してあげたら良さそう。
これを設定してイメージを作り直し、コンテナを起動して再度http://パブリックDNS:8000 にアクセスするとHello, world. You're at the polls index.と無事に応答がありました!

最後に

意外と簡単にインスタンスにコンテナを立ててwebサーバーにする。という部分はできました。まだ全然勉強できてないけどECSとかfargateとか使ったらもっと楽にできるのかなぁと…その辺はもっと勉強します。

6
6
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
6
6