Автор оригинала: Kimmo Sääskilahti.
Как развивать Kubernetes-местные приложения с Skapsold (4 частью серии)
В Часть 1 Из этой серии мы установили все инструменты, необходимые для разработки нашего приложения Django на местных Kubernetes с Skapshold Отказ В этой части мы создадим приложение Django. В следующей части мы наконец-то доберемся до удовольствия: определяющие манифесты Kubernetes и файл конфигурации Skafsold.
Поскольку этот учебник не о Джангу, но о Skapsold и Kubernetes, я буду двигаться быстро в этой части. Если у вас есть какие-либо вопросы, пожалуйста, добавьте их в комментарии, и я сделаю все возможное, чтобы ответить! Как и прежде, вы можете найти весь код в Сопровождая репозиторий GitHub Отказ
Создание проекта Django
Мы создадим проект Django по имени магазин
в SRC/Store
с startproject
командование Django-admin
:
# In the root of repository $ cd src $ mkdir store $ cd store $ django-admin startproject store .
Добавьте следующее в требования .txt
:
# src/store/requirements.txt django gunicorn psycopg2
Здесь боевик
используется для обслуживания приложения и psycopg2
это драйвер Postgres.
Теперь давайте создадим приложение, которое мы будем использовать для проверки состояния:
# Inside src/store $ python manage.py startapp status
Это создает Статус/
папка в SRC/Store
Отказ Добавьте следующее в магазин/URLS.PY
:
# src/store/store/urls.py from django.urls import path, include urlpatterns = [path("status/", include("status.urls"))]
Это будет Boostrap Статус
приложение к Статус/
конечная точка.
Определите вид в корне Статус/
дорожка:
# src/store/status/urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name="index"), ]
В Статус/Просмотр .py
Добавьте представление, которое возвращает 200 для успешного подключения к базе данных и 500 иначе:
# src/store/status/views.py from django.db import connection from django.http import JsonResponse def index(request): try: with connection.cursor() as cursor: cursor.execute("SELECT 1") return JsonResponse({ "message": "OK"}, status=200) except Exception as ex: return JsonResponse({ "error": str(ex) }, status=500)
Мы проверяем, может ли Cursor баз данных выполнить Выберите 1
Заявление и верните ошибку для любого исключения.
С этим мы создали приложение Django с Статус/
Конечная точка, которая проверяет соединение с базой данных. Теперь нам все еще нужно настроить Postgres Отказ
Настройка Postgres
Чтобы настроить Postgres, изменить SRC/Store/settings.py
следующее:
# src/store/settings.py import os # Keep everything else as-is POSTGRES_CONFIG = { "username": os.environ.get("POSTGRES_USER", "postgres"), "db_name": os.environ.get("POSTGRES_DB", "store"), "host": os.environ.get("POSTGRES_HOST", "127.0.0.1"), "password": os.environ.get("POSTGRES_PASSWORD", ""), "port": os.environ.get("POSTGRES_PORT", 5432), } DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": POSTGRES_CONFIG["db_name"], "USER": POSTGRES_CONFIG["username"], "PASSWORD": POSTGRES_CONFIG["password"], "HOST": POSTGRES_CONFIG["host"], "PORT": POSTGRES_CONFIG["port"], } }
Здесь мы прочитаем настройки Postgres из переменных среды и установите значения по умолчанию Sane.
Dockerfile
Чтобы развернуть приложение в Kubernetes, нам нужно создать Dockerfile
:
# src/store/Dockerfile FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /store WORKDIR /store COPY . /store/ RUN pip install -r requirements.txt CMD ["gunicorn", "store.wsgi"]
Мы используем боевик
Для обслуживания приложения, начиная с магазин/wsgi.py
Создано Django-Admin StartProject
команда.
Nginx.
В любой производственной среде нам нужно запускать Django за обратным прокси или вход, поэтому мы создадим nginx прокси. Добавьте следующее в Dockerfile.nginx.
:
# src/store/Dockerfile.nginx FROM nginx:1.16.1 COPY nginx.conf /etc/nginx/nginx.conf
Добавьте следующую настройку из Gunicorn Documentation к nginx.conf
:
# src/store/nginx.conf # https://docs.gunicorn.org/en/latest/deploy.html#nginx-configuration user nobody nogroup; # 'user nobody nobody;' for systems with 'nobody' as a group instead error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; # increase if you have lots of clients accept_mutex off; # set to 'on' if nginx worker_processes > 1 } http { upstream store { server localhost:8000; } server { listen 8080; location / { proxy_pass http://store; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; } } }
Здесь мы просто сложный код прокси пересылать запросы на localhost: 8000
, где наше приложение Django будет работать. В использовании производства мы бы прочитали адрес из переменных среды при развертывании времени.
Заключение
Это завершает часть 2 нашего учебника для местного развития на Skapsold. В следующей части мы получим возможность развертывания нашего приложения и базы данных на Minikube с Skapsold. Тогда увидимся!
Как развивать Kubernetes-местные приложения с Skapsold (4 частью серии)
Оригинал: “https://dev.to/ksaaskil/setting-up-django-app-with-postgres-database-and-health-check-2cpd”