Giter Site home page Giter Site logo

romanvolodin / dvmn_k8s_test_django Goto Github PK

View Code? Open in Web Editor NEW

This project forked from devmanorg/k8s-test-django

0.0 1.0 0.0 19 KB

Докеризированный сайт на Django для экспериментов с Kubernetes.

Python 86.75% Dockerfile 13.25%

dvmn_k8s_test_django's Introduction

Django site

Докеризированный сайт на Django для экспериментов с Kubernetes.

Внутри конейнера Django запускается с помощью Nginx Unit, не путать с Nginx. Сервер Nginx Unit выполняет сразу две функции: как веб-сервер он раздаёт файлы статики и медиа, а в роли сервера-приложений он запускает Python и Django. Таким образом Nginx Unit заменяет собой связку из двух сервисов Nginx и Gunicorn/uWSGI. Подробнее про Nginx Unit.

Как запустить dev-версию

Запустите базу данных и сайт:

$ docker-compose up

В новом терминале не выключая сайт запустите команды для настройки базы данных:

$ docker-compose run web ./manage.py migrate  # создаём/обновляем таблицы в БД
$ docker-compose run web ./manage.py createsuperuser

Для тонкой настройки Docker Compose используйте переменные окружения. Их названия отличаются от тех, что задаёт docker-образа, сделано это чтобы избежать конфликта имён. Внутри docker-compose.yaml настраиваются сразу несколько образов, у каждого свои переменные окружения, и поэтому их названия могут случайно пересечься. Чтобы не было конфликтов к названиям переменных окружения добавлены префиксы по названию сервиса. Список доступных переменных можно найти внутри файла docker-compose.yml.

Переменные окружения

Образ с Django считывает настройки из переменных окружения:

SECRET_KEY -- обязательная секретная настройка Django. Это соль для генерации хэшей. Значение может быть любым, важно лишь, чтобы оно никому не было известно. Документация Django.

DEBUG -- настройка Django для включения отладочного режима. Принимает значения TRUE или FALSE. Документация Django.

ALLOWED_HOSTS -- настройка Django со списком разрешённых адресов. Если запрос прилетит на другой адрес, то сайт ответит ошибкой 400. Можно перечислить несколько адресов через запятую, например 127.0.0.1,192.168.0.1,site.test. Документация Django.

DATABASE_URL -- адрес для подключения к базе данных PostgreSQL. Другие СУБД сайт не поддерживает. Формат записи.

Файл конфигурации для Kubernetes

Заполните переменные окружения разделе data файла кофигурации kubernetes/django-app-config.yml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: django-app-config
data:
  ALLOWED_HOSTS: 127.0.0.1, localhost, 123.456.78.9
  DATABASE_URL: postgres://username:password@host:5432/dbname
  DEBUG: 'false'
  SECRET_KEY: secret

Создайте ConfigMap из этого файла:

kubectl apply --filename kubernetes/django-app-config.yml

Запустите дейплой:

kubectl apply --filename kubernetes/django-app-deployment.yml

Изменение конфига

После изменения yml-конфига надо накатить изменения и перезапустить деплоймент:

kubectl apply --filename kubernetes/django-app-config.yml
kubectl rollout restart deployment

Настройка Ingress

В /etc/host добавляем строчку:

123.456.78.9 star-burger.test

Где 123.456.78.9 - ip-адрес кластера.

Для minikube нужно установить аддон:

minikube addons enable ingress

Запускаем манифест:

kubectl apply -f kubernetes/ingress.yml

Настройка удаления сессий

Время и промежуток, через который будут удаляться пользовательские сессии Джанго, можно задать в файле django-clear-sessions-cronjob.yml. Строчка

schedule: "0 0 1 * *"

означает, что команда будет выполняться в 00:00 первого числа каждого месяца. Можно настроить по желанию. Удобно воспользоваться сайтом crontab.guru, чтобы наглядно настраивать время и промежуток выполнения.

После настройки времени надо запустить команду в работу:

kubectl apply --filename kubernetes/django-clear-sessions-cronjob.yml

Для проверки можно запустить CronJob (т.е. создать Job) руками в дашборде (в меню кронджоба выбираем Trigger) или командой:

kubectl create job --from=cronjob/django-clearsessions-cronjob test-clearsession-job

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.