Giter VIP home page Giter VIP logo

django-docker-ssl's Introduction

Credits

ruddra: github.com/ruddra/docker-django

staticfloat: github.com/staticfloat/docker-nginx-certbot

This project was based on these two projects above. Special thanks for ruddra and staticfloat!

Goal:

This project main goal is to provide a way to deploy django applications by using docker along with nginx, gunicorn and letsencrypt. Celery is also included (using redis) but you don't have to use it.

Development

You can clone this repo and start your project from scratch using this project. All your django apps (with the command: python manage.py startapp) go in the 'src' folder (if you are using pycharm: - right click in src folder > mark directory as > sources root). Make sure to register your apps in src > core > settings

You will need to run the postgres daemon to use django in development, but if you want to use the postgres docker container, start it with make postgres-start and change POSTGRES_HOST to 127.0.0.1 in postgres envfile. Then you will be able to connect development django server to the posgres container by typing make postgre-ip and copying the resulting ip address to your development django env variables.

In development mode, you will not be able to run nginx, unless you have all your modem ports forwarded.

To test your apps, you will have to use the default django development server (python manage.py runserver).

Don't forget to install requirements while testing.

Configuration

Configuration files are inside .envs folder. By default, dev.env files are loaded for each container. Config options are self explanatory, but there are some important things to mention:

  • DB config in django envs folder must be the same as it is in the postgres config.
  • Do not choose the username 'postgres' for the postgres config.
  • DJANGO_ALLOWED_HOSTS should contain '.example.com' to accept all hosts from nginx.
  • EMAIL config must be set only if you will be using send_email in your project.
  • SENTRY_DSN is optional and will only track errors in django container
  • important: NGINX_HOST must just include your base domain. If you have www.example.com it must be set as example.com . This is because when certbot generates the certificates, it will use your base domain to generate a certificate valid for your www domain and non www domain.
  • If you want to create more subdomains, you will have to change the file in config>nginx>default.template and pass the correct env variables plus adding the correct directives. Also, add your subdomain to the certbot command.
  • IS_STAGING must be set to 1 if you want to test your project, to avoid rate limiting from letsencrypt. In production, change it to 0

Production

Once you have your project done, it's time to go into production mode!

1 - Send your project to your server (Debian servers are preferred, for now), without virtualenv files.

2 - Once it is there, get inside your project and install deps for docker with ./debian_install.sh

3 - Reboot your machine with sudo reboot now

4 - Now, inside your project folder, build your containers by typing make build

5 - Once it is finished, put it online with make up

It is a good practice, on the first run, to check for any errors.. To do so, start your project with make up-non-daemon

If you see no errors, it is probably safe to start it normally with make up

Commands

To run these commands, go inside your project app, where the Makefile is

  1. make up to build the project and starting containers.
  2. make build to build the project.
  3. make start to start containers if project has been up already.
  4. make stop to stop containers.
  5. make shell-web to shell access web container.
  6. make shell-db to shell access db container.
  7. make shell-nginx to shell access nginx container.
  8. make logs-web to log access web container.
  9. make logs-db to log access db container.
  10. make logs-nginx to log access nginx container.
  11. make collectstatic to put static files in static directory.
  12. make log-web to log access web container.
  13. make log-db to log access db container.
  14. make log-nginx to log access nginx container.
  15. make restart to restart containers.
  16. make prune to delete everything, including volumes warning
  17. make postgres-ip to return postgres container ip, in case you want to use it

django-docker-ssl's People

Contributors

37dev avatar cr4zyd3v avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.