Развертывание Django-приложения на production-сервере – важный шаг в жизненном цикле любого веб-проекта. Ubuntu, благодаря своей стабильности и широкой поддержке, является популярным выбором для hosting. Данная статья предоставит вам практическое руководство по развертыванию Django-приложения на Ubuntu с использованием Apache и mod_wsgi.
Зачем использовать Apache и mod_wsgi?
Apache – это мощный и гибкий веб-сервер, способный обрабатывать большое количество запросов. modwsgi — это модуль Apache, позволяющий Django взаимодействовать с сервером. Он обеспечивает стабильное и эффективное выполнение Django-приложений, поскольку обрабатывает Python-код внутри процесса Apache. Использование связки Apache и modwsgi позволяет надежно обслуживать Django-приложения в production-среде.
Предварительные требования: что вам понадобится
- Виртуальная машина или сервер с установленной Ubuntu (рекомендуется версия 20.04 или новее).
- Доступ к командной строке сервера с правами sudo.
- Базовые знания Django и командной строки Linux.
Настройка сервера Ubuntu
Обновление списка пакетов и установка необходимых компонентов
Перед установкой любого программного обеспечения необходимо обновить список пакетов. Откройте терминал и выполните следующие команды:
sudo apt update
sudo apt upgrade
Установка Apache2
Установите Apache2, используя следующую команду:
sudo apt install apache2
После установки убедитесь, что Apache запущен и работает. Откройте веб-браузер и введите IP-адрес вашего сервера. Вы должны увидеть страницу приветствия Apache.
Установка Python, pip и virtualenv
Установите Python 3, pip (менеджер пакетов Python) и virtualenv (инструмент для создания изолированных окружений Python):
sudo apt install python3 python3-pip python3-venv
Создание виртуального окружения для Django-проекта
Перейдите в директорию, где вы хотите разместить ваш Django-проект, и создайте виртуальное окружение:
mkdir myproject
cd myproject
python3 -m venv venv
Активируйте виртуальное окружение:
source venv/bin/activate
После активации в начале строки терминала появится (venv)
. Это означает, что вы работаете внутри виртуального окружения.
Подготовка Django-приложения к развертыванию
Установка Django и зависимостей проекта в виртуальное окружение
Установите Django и все необходимые зависимости, перечисленные в requirements.txt
вашего проекта:
pip install django
pip install -r requirements.txt
Настройка Django для работы с Apache
В файле settings.py
вашего Django-проекта необходимо указать ALLOWED_HOSTS
. В production-среде это должен быть домен вашего сайта или IP-адрес сервера. Например:
# settings.py
ALLOWED_HOSTS = ['your_domain.com', 'server_ip_address']
Сбор статических файлов
Соберите все статические файлы вашего проекта в одну директорию. Это делается с помощью команды collectstatic
:
python manage.py collectstatic
Укажите путь к этой директории в settings.py
:
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Создание wsgi.py файла
Файл wsgi.py
находится в корневой директории вашего Django-проекта. Он служит точкой входа для mod_wsgi. Убедитесь, что он выглядит примерно так:
# wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()
Замените myproject
на название вашего проекта.
Редактирование settings.py
Убедитесь, что DEBUG = False
в settings.py
для production-среды. Также настройте SECRET_KEY
. Рекомендуется использовать случайную строку, сгенерированную, например, с помощью openssl rand -base64 64
.
Настройка Apache для работы с Django и mod_wsgi
Установка mod_wsgi
Установите модуль mod_wsgi для Apache:
sudo apt install libapache2-mod-wsgi-py3
Создание конфигурационного файла Apache для Django-приложения
Создайте новый конфигурационный файл для вашего Django-приложения в /etc/apache2/sites-available/
. Например, myproject.conf
:
sudo nano /etc/apache2/sites-available/myproject.conf
Настройка VirtualHost
Добавьте следующую конфигурацию в файл myproject.conf
:
<VirtualHost *:80>
ServerName your_domain.com
ServerAlias www.your_domain.com
DocumentRoot /var/www/html # You can change this
<Directory /var/www/html>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static /path/to/your/project/static
<Directory /path/to/your/project/static>
Require all granted
</Directory>
<Directory /path/to/your/project>
<Files wsgi.py>
<IfModule mod_wsgi.c>
Require all granted
</IfModule>
<IfModule !mod_wsgi.c>
Require all denied
</IfModule>
</Files>
</Directory>
WSGIDaemonProcess myproject python-home=/path/to/your/project/venv python-path=/path/to/your/project
WSGIProcessGroup myproject
WSGIScriptAlias / /path/to/your/project/wsgi.py
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Замените:
your_domain.com
на ваш домен./var/www/html
на желаемый DocumentRoot (обычно используется для статических файлов)./path/to/your/project
на абсолютный путь к вашему Django-проекту./path/to/your/project/venv
на путь к вашему виртуальному окружению.
Активация сайта и перезапуск Apache
Активируйте сайт и перезапустите Apache:
sudo a2ensite myproject.conf
sudo a2dissite 000-default.conf # Disable default site if you don't need it
sudo systemctl restart apache2
Настройка прав доступа к файлам проекта
Изменение владельца файлов проекта
Чтобы Apache мог читать и обслуживать файлы вашего проекта, необходимо изменить владельца файлов на пользователя www-data
:
sudo chown -R www-data:www-data /path/to/your/project
Назначение прав на директории
Убедитесь, что у пользователя www-data
есть права на чтение и выполнение директорий и прав на чтение файлов.
Устранение неполадок и распространенные ошибки
Ошибка 500 Internal Server Error
Эта ошибка часто указывает на проблемы в вашем Django-коде или конфигурации Apache. Проверьте логи Apache (/var/log/apache2/error.log
) для получения более подробной информации.
Проблемы со статическими файлами
Если статические файлы не отображаются, убедитесь, что вы правильно настроили STATIC_ROOT
и STATIC_URL
в settings.py
, выполнили команду collectstatic
и правильно настроили Alias в конфигурации Apache.
Неправильная конфигурация VirtualHost
Проверьте синтаксис файла конфигурации VirtualHost. Ошибки в синтаксисе могут привести к тому, что Apache не сможет запустить сайт.
Проверка логов Apache
Логи Apache – ваш лучший друг при отладке проблем. Они содержат информацию об ошибках, предупреждениях и других событиях, которые могут помочь вам определить причину проблемы.
Оптимизация производительности Django-приложения на Apache
Использование кэширования
Включите кэширование в Django для уменьшения нагрузки на базу данных и ускорения ответа сервера. Django поддерживает различные бэкенды кэширования, такие как Redis, Memcached и локальный кэш.
Настройка Gunicorn в связке с Nginx (краткое описание)
Для более высокой производительности и масштабируемости рассмотрите возможность использования Gunicorn в качестве WSGI-сервера и Nginx в качестве обратного прокси. Nginx может обрабатывать статические файлы и распределять нагрузку между несколькими экземплярами Gunicorn.
Заключение
Развертывание Django-приложения на Ubuntu с использованием Apache и mod_wsgi – это надежный и проверенный способ размещения ваших проектов в production-среде. Следуя этому руководству, вы сможете успешно развернуть свое приложение и обеспечить его стабильную работу.
Полезные ссылки и дальнейшие шаги
- Документация Django: Deployment
- Документация mod_wsgi
- DigitalOcean: How To Serve Django Applications with Apache and mod_wsgi on Ubuntu 20.04
Дальнейшие шаги включают в себя настройку мониторинга, автоматизацию развертывания с помощью инструментов CI/CD, а также оптимизацию производительности приложения и базы данных.