docker-nginx-postgres-django-example
docker-nginx-postgres-django-example copied to clipboard
Example using Docker, Django, multiple Postgres databases, NginX, Gunicorn, pipenv, GitLab CI and tox.
Example using Docker, Django, multiple Postgres databases, NginX, Gunicorn, pipenv, GitLab CI and tox
This is a Docker setup for a web application based on Django.
- The Django application is served by Gunicorn (WSGI application).
- We use NginX as reverse proxy and static files server. Static and media files are persistently stored in volumes.
- Multiple Postgres databases can be used. Data are persistently stored in volumes.
-
Python dependencies are managed through pipenv, with
Pipfile
andPipfile.lock
. - Support for multiple environment settings (variable
DJANGO_SETTINGS_MODULE
is passed to thedjangoapp
service). - Tests are run using tox, pytest, and other tools such as safety, bandit, isort and prospector.
- Continuous Integration is configured for GitLab with
.gitlab-ci.yml
. CI follows a Build-Test-Release flow. WARNING: this part is not fully functional yet.
Also a Makefile is available for convenience. You might need to use sudo make
instead of just make
because docker
and docker-compose
commands often needs
admin privilege.
Requirements
You need to install Docker and Docker-Compose.
Build
docker-compose build
or make build
.
Migrate databases
docker-compose run --rm djangoapp hello/manage.py migrate
or make migrate
.
Collect static files
docker-compose run --rm djangoapp hello/manage.py collectstatic --no-input'
or make collectstatic
.
Run
docker-compose up
or make run
.
Tests
-
make checksafety
-
make checkstyle
-
make test
-
make coverage
Related blog post
Docker Compose with NginX, Django, Gunicorn and multiple Postgres databases
License
Software licensed under the ISC license.