Djangoroidの奮闘記

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

Docker Composeを使った、Nginx+uWSGI+Djangoのデプロイ 追記

概要

Docker Composeを使った、Nginx+uWSGI+Django+Postgreのデプロイ の追記、migrateとか、createsuperuserとかを追加してみる。

やってみたこと

  • docker-compose.ymlのcommandをDockerfileの方に組み込む
  • uwsgi.shにmigrate コマンドを追加する。
  • uwsgi.shに、createsuperuserを追加する。

docker-compose.ymlのcommandをDockerfileの方に組み込む

  • Dockerrun.aws.jsonには、commad指定ができないので、多分、imageの方にCMDで組み込んでおく必要がある。なので、docker-compose.ymlから、commandを削除して、imageの方に組み込んでおく。
uwsgi:
  image: dockerhub/uwsgi-django:latest
-command: ./uwsgi.sh # <-ここを削除
  volumes:
    - /static

nginx:
  image: dockerhub/nginx-django:latest
  links:
    - uwsgi
  volumes_from:
    - uwsgi
  ports:
    - "0.0.0.0:80:80"
  • uwsgi-djangoのimageをbuildするDockerfileの最後に以下のコマンドを追加しておく。
FROM python:2.7
RUN groupadd -r uwsgi && useradd -r -g uwsgi uwsgi
COPY /myapp/requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
COPY /myapp /app
RUN chown -R uwsgi /app
COPY uwsgi.sh /uwsgi.sh
RUN chmod +x /uwsgi.sh
+ CMD ./uwsgi.sh

これでdocker-compose.ymlからcommandがなくなっても、image側で、commandを実行できる。 ちなみに、RUN chmod +x /uwsgi.shは、uwsgi.shを実行可能なシェルファイルにするという意味なようで、かなり重要な指示ぽい。

uwsgi.shにmigrate コマンドを追加する。

#!/bin/sh
chown uwsgi /static
chown uwsgi /media
+ su -m uwsgi -c "python /app/manage.py migrate"
su -m uwsgi -c "python /app/manage.py collectstatic --noinput"
su -m uwsgi -c "/usr/local/bin/uwsgi --socket :5000 --wsgi-file /app/myapp/wsgi.py --master --processes 4 --threads 2 --chdir /app"

uwsgi.shに、createsuperuserを追加する。

createsuperuserは、user名、passなどの値を入力する必要があるため、createsuというコマンドをdjangoの方で作成しておく

createsuコマンドを作成する。

以下の記事に従って作成。

pythonskywalker.hatenablog.com

uwsgi.sh に追記する。

#!/bin/sh
chown uwsgi /static
chown uwsgi /media
su -m uwsgi -c "python /app/manage.py migrate"
su -m uwsgi -c "python /app/manage.py collectstatic --noinput"
+ su -m uwsgi -c "python /app/manage.py createsu"
su -m uwsgi -c "/usr/local/bin/uwsgi --socket :5000 --wsgi-file /app/myapp/wsgi.py --master --processes 4 --threads 2 --chdir /app"

docker-compose upしてみる。。。できた!

課題など

  • createsuは、2回目以降のmigrateでerrorは出ないか。
  • image:latestは、すでにlocalにimageがダウンロードされている場合は、上書きされないのか。例えば、nginx-django:latestというイメージがあって、github経由で、imageが再buildされた時に、docker imageをlocalにpullしてくると、差分を反映したimageになるのか?