Skip to content
/ django-template Public template

Project template base on Django for all kind of microservices!

License

Notifications You must be signed in to change notification settings

bandirom/django-template

Repository files navigation

GitHub Codecov Documentation Status Docker Image CI

Django template in docker with docker-compose

Features of the template:

Project features:

  • Docker/Docker-compose environment
  • Environment variables
  • Separated settings for Dev and Prod django version
  • Docker configuration for nginx for 80 and/or 443 ports (dev/stage/prod) (Let's Encrypt certbot)
  • Celery worker
  • Redis service for caching using socket. Also message broker for queue
  • RabbitMQ configuration
  • ASGI support
  • Linters integration (flake8, black, isort)
  • Swagger in Django Admin Panel
  • Ready for deploy by one click
  • Separated configuration for dev and prod (requirements and settings)
  • CI/CD: GitHub Actions
  • Redefined default User model (main.models.py)
  • Mailpit, Jaeger, RabbitMQ integrations
  • Multi-stage build for prod versions
  • PostgreSql Backup

How to use:

Clone the repo or click "Use this template" button:

git clone https://github.com/bandirom/django-template.git ./project_name

Before running add your superuser email/password and project name in docker/prod/env/.data.env file

SUPERUSER_EMAIL=example@email.com
SUPERUSER_PASSWORD=secretp@ssword
PROJECT_TITLE=MyProject

Run the local develop server:

docker-compose up -d --build
docker-compose logs -f
Server will run on 8000 port. You can get access to server by browser http://localhost:8000

Run django commands through exec:

docker-compose exec web python manage.py makemigrations

docker-compose exec web python manage.py shell

Get access to the container

docker-compose exec web sh
For run mail smtp for local development you can use Mailpit service
  • Run Mailpit
docker-compose -f docker/modules/mailpit.yml up -d

Don't forget to set SMTP mail backend in settings

# docker/dev/env/.email.env
EMAIL_HOST=<mailpit_hostname>

Where <mailpit_hostname>:

  • host.docker.internal for Window and macOS
  • 172.17.0.1 for Linux OS

Production environment

If your server under LoadBalancer or nginx with SSL/TLS certificate you can run prod.yml configuration

docker-compose -f prod.yml up -d --build

For set https connection you should have a domain name

In prod.certbot.yml:

Change the envs: CERTBOT_EMAIL: your real email ENVSUBST_VARS: list of variables which set in nginx.conf files APP: value of the variable from list ENVSUBST_VARS

To set https for 2 and more nginx servers:

ENVSUBST_VARS: API
API: api.your-domain.com

Run command:

docker-compose -f prod.yml -f prod.certbot.yml up -d --build