Рубрики
Без рубрики

Настройка приложения Django с базой данных Postgres и проверкой здоровья

Вторая часть учебника по разработке заявления Django, поддерживаемого Postgres на местных Кубейнетах. Теги с Python, Kubernetes, учебником.

Автор оригинала: 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”