Skip to content

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

Notifications You must be signed in to change notification settings

Ykyki4/k8s-test-django

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Как запустить проект в kubernetes

Для начала, узнайте свой внешний айпи адрес. Windows Linux MacOs, далее в одном каталоге с docker-compose.yml создайте файл docker-compose.override.yaml с данным содержимым:

version: "3"

services:
  db:
    ports:
      - [ваш внешний айпи адрес]:[предпочитаемый порт]:5432

После этого запустит базу данных командой:

docker-compose up db

Следуя данному видео запустите кластер.

Далее создайте файл с конфигурацей в формате .yaml для запуска сайта:

apiVersion: v1
kind: ConfigMap
metadata:
  name: django-config-v1
  labels:
    app.kubernetes.io/name: django
    app.kubernetes.io/instance: django-config
    app.kubernetes.io/version: "1.0"
data:
  ALLOWED_HOSTS: star-burger.test
  SECRET_KEY: Описание переменной находится ниже
  DATABASE_URL: postgres://test_k8s:OwOtBep9Frut@айпи и порт на которых запущена база данных/test_k8s
  DEBUG: Описание переменной находится ниже, важно, чтобы переменная находилась в одинарных ковычках, вроде: 'False'

Запускаем ряд команд:

minikube addons enable ingress
kubectl apply -f путь к только что созданному конфигурационному файлу.
kubectl apply -f ./kubernetes/deployments/django-deployment.yaml
kubectl apply -f ./kubernetes/services/django-service.yaml

Если же вы запускаете сайт локально, добавьте ingress:

kubectl apply -f ./kubernetes/ingress/django-ingress.yaml

Добавьте данный текст в etc/hosts:

[вывод команды minikube ip] star-burger.test

После этого сайт будет доступен по адрессу star-burge.test

Если вы запускаете prod версию сайта, настройте нужный порт и тип сервиса внутри django-service.yaml

Также, вы можете добавить автоматическое удаление истекших джанго сессий:

kubectl apply -f ./kubernetes/cronjobs/django-clearsessions.yaml

Для джанго миграций, пропишите команду:

kubectl apply -f ./kubernetes/jobs/django-migrate.yaml

Для создания джанго суперюзера, используйте:

kubectl exec -it [имя пода с джанго] -- python3 manage.py createsuperuser

Если вам неудобно разворачивать базу данных локально, вы можете перейти на helm.

Гайд как установить helm.

Далее, нужно добавить postgres:

helm install postgres --set auth.username=[user name] --set auth.database=[database name] --set auth.password=[password] oci://registry-1.docker.io/bitnamicharts/postgresql

Чтобы подключиться к базе данных:

DATABASE_URL: postgres://[user name]:[password]@postgres-postgresql:5432/[database name]

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

Образ с 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. Другие СУБД сайт не поддерживает. Формат записи.

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 86.8%
  • Dockerfile 13.2%