Как развернуть Django проект на AWS EC2 с использованием Nginx и Gunicorn: Полное руководство

Краткое описание Django, AWS EC2, Nginx и Gunicorn

  • Django – это высокоуровневый Python веб-фреймворк, который поощряет быструю разработку и чистый, прагматичный дизайн. Он берет на себя большую часть хлопот, позволяя вам сосредоточиться на написании вашего приложения, не изобретая велосипед.
  • AWS EC2 (Amazon Elastic Compute Cloud) – это сервис виртуальных серверов в облаке Amazon Web Services. Он предоставляет масштабируемые вычислительные ресурсы в облаке.
  • Nginx – это высокопроизводительный веб-сервер и обратный прокси-сервер. Часто используется для обслуживания статического контента и проксирования запросов к динамическим приложениям.
  • Gunicorn (Green Unicorn) – WSGI HTTP-сервер для Python. Он используется для запуска Django приложений.

Зачем использовать AWS EC2 для Django проектов

AWS EC2 предоставляет масштабируемую и надежную инфраструктуру для размещения Django-проектов. Преимущества включают:

  • Масштабируемость: Легко увеличивайте или уменьшайте вычислительные ресурсы в зависимости от нагрузки.
  • Надежность: AWS обеспечивает высокую доступность и отказоустойчивость.
  • Контроль: Полный контроль над операционной системой и программным обеспечением.
  • Экономичность: Оплата только за фактически потребленные ресурсы.

Предварительные требования: учетная запись AWS, установленный Python и Django

Прежде чем приступить, убедитесь, что у вас есть:

  1. Активная учетная запись AWS.
  2. Установленный Python (3.6 или выше) и pip на вашем локальном компьютере.
  3. Установленный Django.

Настройка AWS EC2 Instance

Создание и настройка EC2 instance (выбор AMI, типа инстанса, security groups)

  1. Войдите в консоль AWS и перейдите в сервис EC2.
  2. Нажмите «Launch Instance».
  3. Выберите AMI (Amazon Machine Image), например, Ubuntu Server 20.04 LTS. Этот образ содержит базовую операционную систему. Рассмотрите использование оптимизированных AMI для Django.
  4. Выберите тип инстанса, например, t2.micro (бесплатно в течение первого года). Тип инстанса влияет на производительность и стоимость.
  5. Настройте Security Groups, чтобы разрешить входящий трафик по портам 22 (SSH), 80 (HTTP) и 443 (HTTPS). Security Groups действуют как виртуальные брандмауэры.
  6. Создайте новую пару ключей (key pair) или используйте существующую. Эта пара ключей понадобится для подключения к инстансу через SSH. Обязательно сохраните приватный ключ (.pem файл) в безопасном месте.
  7. Запустите инстанс.

Подключение к EC2 instance через SSH

Используйте SSH для подключения к вашему инстансу. Откройте терминал и выполните команду:

ssh -i "/path/to/your/key.pem" ubuntu@<public_ip_address>

Замените /path/to/your/key.pem на путь к вашему приватному ключу, а <public_ip_address> на публичный IP-адрес вашего инстанса.

Обновление пакетов и установка необходимых зависимостей (Python, pip, virtualenv)

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

sudo apt update
sudo apt upgrade
sudo apt install python3-pip python3-dev nginx

Установите virtualenv для создания изолированных окружений Python:

sudo pip3 install virtualenv

Развертывание Django проекта

Клонирование Django проекта из репозитория (Git)

Перейдите в желаемую директорию (например, /home/ubuntu/) и клонируйте ваш Django проект из репозитория Git:

cd /home/ubuntu/
git clone <your_git_repository_url>
cd <your_project_name>

Настройка virtualenv и установка зависимостей проекта (requirements.txt)

Создайте виртуальное окружение:

virtualenv venv

Активируйте виртуальное окружение:

source venv/bin/activate

Установите зависимости проекта из файла requirements.txt:

pip install -r requirements.txt

Настройка Django проекта для работы с Production (settings.py): ALLOWED_HOSTS, DEBUG

Отредактируйте файл settings.py вашего Django проекта. Важно настроить ALLOWED_HOSTS и DEBUG для production окружения.

# settings.py

DEBUG = False  # Никогда не включайте DEBUG в production!

ALLOWED_HOSTS = ['your_domain.com', 'www.your_domain.com', '<public_ip_address>'] # Разрешенные хосты

Замените your_domain.com и www.your_domain.com на ваш домен, а <public_ip_address> на публичный IP-адрес вашего инстанса.

Миграция базы данных (если используется)

Выполните миграции базы данных:

python manage.py migrate

Настройка Gunicorn

Установка Gunicorn

Установите Gunicorn в ваше виртуальное окружение:

pip install gunicorn

Настройка Gunicorn для запуска Django проекта (systemd service)

Создайте файл сервиса systemd для Gunicorn (например, gunicorn.service):

sudo nano /etc/systemd/system/gunicorn.service

Добавьте следующее содержимое, адаптировав пути и имя проекта:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/<your_project_name>
ExecStart=/home/ubuntu/<your_project_name>/venv/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/<your_project_name>/myproject.sock myproject.wsgi:application

[Install]
WantedBy=multi-user.target

Замените <your_project_name> на имя вашего проекта и myproject на имя вашего Django проекта.

Проверка работоспособности Gunicorn

Запустите и включите сервис Gunicorn:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

Проверьте статус сервиса:

sudo systemctl status gunicorn

Настройка Nginx

Установка Nginx

Если Nginx еще не установлен, установите его:

sudo apt install nginx

Настройка Nginx для проксирования запросов к Gunicorn (server block configuration)

Создайте новый файл конфигурации сервера Nginx (например, myproject):

sudo nano /etc/nginx/sites-available/myproject

Добавьте следующее содержимое, адаптировав пути и имя проекта:

server {
    listen 80;
    server_name your_domain.com www.your_domain.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ubuntu/<your_project_name>;
    }

    location /media/ {
        root /home/ubuntu/<your_project_name>;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/home/ubuntu/<your_project_name>/myproject.sock;
    }
}

Замените your_domain.com и www.your_domain.com на ваш домен, а <your_project_name> на имя вашего проекта.

Настройка статических файлов (static files) и медиафайлов (media files)

Убедитесь, что вы настроили статические и медиафайлы в вашем Django проекте. В settings.py:

# settings.py

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Соберите статические файлы:

python manage.py collectstatic

Перезапуск Nginx и проверка работоспособности

Создайте символическую ссылку на файл конфигурации в директории sites-enabled:

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

Удалите файл конфигурации по умолчанию:

sudo rm /etc/nginx/sites-enabled/default

Перезапустите Nginx:

sudo systemctl restart nginx

Проверьте статус Nginx:

sudo systemctl status nginx

Откройте ваш сайт в браузере. Если все настроено правильно, вы увидите ваш Django проект.

Настройка HTTPS (SSL/TLS)

Получение SSL сертификата (Let’s Encrypt)

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

sudo apt install certbot python3-certbot-nginx

Получите SSL сертификат:

sudo certbot --nginx -d your_domain.com -d www.your_domain.com

Замените your_domain.com и www.your_domain.com на ваш домен.

Настройка Nginx для использования SSL сертификата (server block configuration)

Certbot автоматически настроит ваш файл конфигурации Nginx. Проверьте конфигурационный файл на наличие необходимых директив ssl.

Перенаправление HTTP на HTTPS

Certbot также автоматически добавит перенаправление HTTP на HTTPS.

Заключение

Поздравления! Django проект развернут на AWS EC2 с использованием Nginx и Gunicorn

Вы успешно развернули Django проект на AWS EC2, используя Nginx и Gunicorn! Теперь ваш сайт доступен по протоколу HTTPS.

Дальнейшие шаги: мониторинг, логирование, автоматизация развертывания

  • Мониторинг: Используйте AWS CloudWatch или другие инструменты мониторинга для отслеживания производительности и доступности вашего приложения.
  • Логирование: Настройте логирование для отслеживания ошибок и анализа поведения пользователей. Рассмотрите использование Sentry или ELK Stack.
  • Автоматизация развертывания: Используйте инструменты автоматизации развертывания, такие как Ansible, Docker и CI/CD, для упрощения и ускорения процесса развертывания.
  • Оптимизация базы данных: Оптимизируйте запросы и настройте кэширование, если наблюдаются проблемы с производительностью.

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