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に接続させてみよう!(^ ^)/