Развертывание веб-приложения Django на Python с PostgreSQL в Azure: Полное руководство

Развертывание веб-приложений Django в облаке Azure с использованием PostgreSQL в качестве базы данных предоставляет масштабируемость, надежность и гибкость. Это руководство проведет вас через все этапы этого процесса, начиная с создания проекта Django и заканчивая настройкой CI/CD.

Обзор: Почему Azure и PostgreSQL для Django?

Azure предоставляет надежную инфраструктуру для размещения веб-приложений, а PostgreSQL – мощная и стабильная база данных с открытым исходным кодом. Совместное использование Azure и PostgreSQL обеспечивает следующие преимущества:

  • Масштабируемость: Azure позволяет легко масштабировать ваше приложение в зависимости от нагрузки.
  • Надежность: Azure обеспечивает высокую доступность и отказоустойчивость.
  • Управляемая база данных: Azure Database for PostgreSQL предоставляет управляемый сервис, упрощающий администрирование базы данных.
  • Интеграция: Azure App Service обеспечивает простую интеграцию с другими сервисами Azure.

Необходимые условия: Инструменты и учетные записи

Перед началом работы убедитесь, что у вас есть следующее:

  1. Учетная запись Azure: Необходима активная подписка Azure. Если у вас ее нет, можно создать бесплатную пробную версию.
  2. Python 3.8+: Установите Python 3.8 или более поздней версии на вашем компьютере.
  3. Pip: Менеджер пакетов Python, обычно поставляется вместе с Python.
  4. Git: Система контроля версий для управления кодом.
  5. Azure CLI: Интерфейс командной строки для управления ресурсами Azure.
  6. Azure DevOps (опционально): Для настройки CI/CD.

Создание базового Django проекта

Сначала создадим базовый Django проект. Откройте терминал и выполните следующие команды:

pip install django
django-admin startproject myproject
cd myproject
python manage.py startapp myapp

Теперь настроим myapp/views.py:

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    """Простое представление для отображения приветствия."""
    return HttpResponse("Привет, мир! Это мое первое Django приложение в Azure.")

В myproject/urls.py добавим URL для нашего представления:

from django.contrib import admin
from django.urls import include, path
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
]

Настройка PostgreSQL в Azure

Создание базы данных PostgreSQL в Azure

  1. Войдите в портал Azure.
  2. Найдите «Azure Database for PostgreSQL servers» и создайте новый ресурс.
  3. Выберите гибкий сервер (Flexible Server).
  4. Укажите имя сервера, имя администратора, пароль, регион и другие параметры.
  5. Создайте базу данных с именем mydatabase.

Настройка правил брандмауэра для доступа к базе данных

После создания сервера PostgreSQL необходимо настроить правила брандмауэра, чтобы разрешить доступ к нему из Azure App Service и вашего локального компьютера (для отладки).

  1. Перейдите к созданному серверу PostgreSQL в портале Azure.
  2. Выберите «Безопасность подключения» -> «Правила брандмауэра».
  3. Добавьте IP-адрес вашего локального компьютера и разрешите доступ сервисам Azure.

Настройка параметров Django для подключения к PostgreSQL

Установите пакет psycopg2 для работы с PostgreSQL в Django:

pip install psycopg2-binary

Обновите файл myproject/settings.py:

import os
import dj_database_url

DEBUG = os.environ.get('DEBUG', 'False') == 'True'

ALLOWED_HOSTS = ['*'] # Измените это в production

DATABASES = {
    'default': dj_database_url.config(
        default=os.environ.get('DATABASE_URL')
    )
}

# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

# Simplified static file serving.
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Установите whitenoise:

pip install whitenoise

В myproject/settings.py добавьте whitenoise.middleware.WhiteNoiseMiddleware в MIDDLEWARE:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Развертывание Django приложения в Azure App Service

Создание Azure App Service

  1. В портале Azure найдите «App Services» и создайте новый ресурс.
  2. Выберите имя, операционную систему (Linux), регион и план.
  3. Выберите план Premium или более высокий для лучшей производительности.

Настройка параметров приложения в Azure App Service

Перейдите в «Конфигурация» вашего App Service и добавьте следующие параметры:

  • DATABASE_URL: Строка подключения к PostgreSQL. Получите её на портале Azure в разделе «Строки подключения» вашего сервера PostgreSQL.
  • SECRET_KEY: Секретный ключ Django. Сгенерируйте его с помощью python -c 'import secrets; print(secrets.token_hex())'.
  • DEBUG: Установите значение False в production.
  • ALLOWED_HOSTS: Установите список допустимых хостов (например, your-app-name.azurewebsites.net).

Развертывание кода Django в Azure App Service с помощью Git или Azure DevOps

Развертывание с помощью Git:

  1. В App Service выберите «Центр развертывания» -> «Локальный Git».

  2. Настройте учетные данные развертывания.

  3. Добавьте удаленный репозиторий Git в ваш локальный репозиторий Django:

    git remote add azure <URL_из_Центра_развертывания>
    
  4. Запуште код в Azure:

    git push azure master
    

Развертывание с помощью Azure DevOps:

Создайте конвейер Azure DevOps, который автоматически собирает и развертывает ваш код в Azure App Service.

Настройка Gunicorn для обслуживания статических файлов

Создайте файл Procfile в корне вашего проекта Django:

web: gunicorn myproject.wsgi --log-file -

Закоммитьте Procfile и запуште изменения в Azure.

В myproject/settings.py добавьте:

import os

if not DEBUG:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Выполните сбор статики:

python manage.py collectstatic

Настройка CI/CD для Django приложения в Azure

Создание конвейера Azure DevOps для автоматического развертывания

  1. Создайте новый проект в Azure DevOps.
  2. Создайте новый конвейер (Pipeline).
  3. Выберите ваш репозиторий Git.
  4. Выберите шаблон «Azure App Service deployment».
  5. Укажите вашу подписку Azure и App Service.

Настройка автоматического тестирования и сборки

Добавьте шаги для запуска тестов Django в вашем конвейере. Например:

- script: |
    python manage.py test
  displayName: 'Run tests'

Автоматическое развертывание при изменениях в репозитории Git

Настройте триггеры в вашем конвейере, чтобы он запускался автоматически при каждом изменении в репозитории Git.

Мониторинг и отладка Django приложения в Azure

Использование Application Insights для мониторинга производительности

  1. В портале Azure найдите «Application Insights» и создайте новый ресурс.
  2. Подключите Application Insights к вашему App Service.
  3. Используйте Application Insights для мониторинга производительности приложения, количества запросов, времени ответа и других метрик.

Отладка приложения с использованием журналов Azure

Включите ведение журналов в вашем App Service. Просматривайте журналы в портале Azure или загружайте их для анализа.

Оптимизация производительности Django приложения в Azure

  • Используйте кэширование (например, Redis) для уменьшения нагрузки на базу данных.
  • Оптимизируйте запросы к базе данных.
  • Используйте CDN для обслуживания статических файлов.
  • Включите сжатие Gzip.
  • Рассмотрите возможность использования Azure Cache for Redis.

Добавить комментарий