読者です 読者をやめる 読者になる 読者になる

Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Elastic Beanstalk にdjango+nginx+uWSGI でデプロイしたアプリのstaticfileなどの設定

概要

Elastic Beanstalk にdjango+nginx+uWSGI でデプロイしたアプリのstaticfileなどの設定をしてみた。

やってみたこと

  • staticfileを設定
  • Dockerfileに、migrate, collectstaticを加える

staticを設定(nginx,settings.py)

  • app/website/settings.py を編集
STATIC_URL = '/static/'
STATIC_ROOT = 'static'
  • nginxにstaticファイルのpathを設定する。

nginx-app.conf

    location /static {
        alias /home/docker/code/app/static;
    }
  • 一応python manage.py migrate, python manage.py collectstaticでテスト。。。うまく動いた!

Dockerfileに、migrate, collectstaticを加える。

まずは、migrateからやってみる。 ちゃんとコンテナ側で作られたか、確認するために、.ebignoreファイルを作って、app/db.sqlite3を加えておく。(場所は、Dockerfileとか、.elasticbeanstalkとかと同じフォルダでOK)

# Dockerfile
# migrateの指示
RUN python /home/docker/code/app/manage.py migrate

いざeb deploy。。。INFO: Environment update completed successfully. きた!

ただ、問題は、ちゃんとmigrateされてるかなんだよなぁ。やっぱこのあたりは、ホストPCのdockerで確認した方が良さそう。なので、ホストPCでもやってみる。(一旦、localのdb.sqlite3は削除しておこう。

$ docker build -t ebdjanginx5 .

オーー、無事migrateされた!

次は、Dockerfileにcollectstaticの指示を付け加えてみる。

# collectstaticの指示
RUN python /home/docker/code/app/manage.py collectstatic --noinput

再度localで挑戦。。。

$ docker build -t ebdjanginx7 .

挙動は予想どおりに動いてるぽいな。。。実際にrunして確認してみる。

$ docker run -d -p 8000:80 ebdjanginx7
$ docker exec -it コンテナ名 /bin/bash

app/staticをみてみる。。。空だなぁ。。。相対パスだとできないのかな。 コンテナのトップのstaticの方に来てるな。

bin   dev  home  lib64  mnt  proc  run   srv     sys  usr
boot  etc  lib   media  opt  root  sbin  static<-ここにファイルが集まってる  tmp  var

STATIC_ROOTを絶対パスに変えてみる。

# app/website/settings.py
STATIC_ROOT = '/home/docker/code/app/static'

再度トライしてみる。

$ docker build -t ebdjanginx9 .
$ docker run -d -p 8000:80 ebdjanginx9
$ docker exec -it f0d33c9cba63 /bin/bash

ちゃんとcollectstaticされてた!ただ、これはあくまでもlocal。

次はeb deployだ。。。これもできた〜!

次は、S3に接続させてみよう!(^ ^)/