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してみる。。。できた!