Как установить Django на Debian Lenny (Apache2/mod_python)
Версия 1.0
Автор: Falko Timme
Следите за мной в Twitter
1 Установка MySQL
Django поддерживает несколько бэкендов баз данных (PostgreSQL, MySQL, SQLite и др.). Если планируете использовать MySQL, установите его следующей командой:
aptitude install mysql-server mysql-clientВ процессе установки вам будет предложено задать пароль root для MySQL:
New password for the MySQL “root” user: <– yourrootsqlpassword
Repeat password for the MySQL “root” user: <– yourrootsqlpassword
По умолчанию MySQL в Debian часто слушает только localhost. Если вы хотите, чтобы MySQL был доступен с других интерфейсов, отредактируйте /etc/mysql/my.cnf и закомментируйте строку bind-address = 127.0.0.1:
vi /etc/mysql/my.cnf| [...] # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1 [...] |
Затем перезапустите MySQL:
/etc/init.d/mysql restartПроверьте, что сетевой доступ включён:
netstat -tap | grep mysqlОжидаемый пример вывода:
server1:~# netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 3403/mysqld
server1:~#Важно: Открытие доступа MySQL на всех интерфейсах увеличивает поверхность атаки. Делайте это только при необходимости и настройте firewall/правила доступа.
2 Установка Apache и mod_python
Если Apache2 и libapache2-mod-python ещё не установлены, выполните:
aptitude install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-pythonЗамечание: libapache2-mod-python работает в сочетании с модулем prefork. Для современных развертываний рекомендуется рассмотреть mod_wsgi или использование WSGI-сервера (gunicorn/uwsgi) за обратным прокси (nginx), см. раздел «Альтернативные варианты».
3 Установка Django
Для установки Django и Python-биндингов для MySQL выполните:
aptitude install python-django python-mysqldbЭто установит системный пакет Django, совместимый с Debian Lenny.
4 Настройка Apache
В этом руководстве я использую /var/www как document root виртуального хоста, а файл конфигурации — /etc/apache2/sites-available/default. Отредактируйте пути под ваши условия.
Перед настройкой Apache создайте проект Django (например, mysite) вне document root по соображениям безопасности (например, /home/mycode):
mkdir /home/mycode
cd /home/mycode
/usr/share/python-support/python-django/django/bin/django-admin.py startproject mysiteЭто создаст директорию /home/mycode/mysite с базовыми файлами Django.
Теперь откройте конфигурацию виртуального хоста (в примере — /etc/apache2/sites-available/default) и вставьте внутри контейнера
vi /etc/apache2/sites-available/default| [...] |
Пояснения:
- Путь в первой строке (
) — это URL, по которому будет доступен проект (например, http://www.example.com/mysite). Изменяйте по необходимости. - SetEnv DJANGO_SETTINGS_MODULE указывает модулю Django, где брать настройки проекта. Подставьте ваш модуль.
- PythonPath должен содержать путь к каталогу, где находится ваш проект (в примере /home/mycode).
Затем перезапустите Apache:
/etc/init.d/apache2 restartОткройте в браузере http://www.example.com/mysite. Если всё настроено корректно, вы увидите стартовую страницу Django.

Это подтверждение успешной установки Django. Для разработки читайте документацию: http://www.djangoproject.com/documentation/.
5 Подключение к MySQL из проекта Django
Чтобы использовать MySQL в проекте Django, создайте базу данных (например, mysite) и пользователя (mysiteadmin):
mysql -u root -pВ консоли MySQL выполните:
CREATE DATABASE mysite;
GRANT ALL ON mysite.* TO 'mysiteadmin'@'localhost' IDENTIFIED BY 'mysiteadmin_password';
GRANT ALL ON mysite.* TO 'mysiteadmin'@'localhost.localdomain' IDENTIFIED BY 'mysiteadmin_password';
quit;Затем откройте settings.py в каталоге проекта (например, /home/mycode/mysite) и измените настройки БД:
vi /home/mycode/mysite/settings.py| [...] DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = 'mysite' # Or path to database file if using sqlite3. DATABASE_USER = 'mysiteadmin' # Not used with sqlite3. DATABASE_PASSWORD = 'mysiteadmin_password' # Not used with sqlite3. DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3. DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3. [...] |
После этого можно применять миграции и создавать суперпользователя (в старых версиях Django команды могут отличаться; смотрите документацию вашей версии).
6 Полезные ссылки
- Django: http://www.djangoproject.com/
- Python: http://www.python.org/
- Debian: http://www.debian.org/
Отладка и распространённые ошибки
- Ошибка импорта модулей Python в Apache: убедитесь, что PythonPath включает путь к проекту и виртуальное окружение (если используется).
- 500 Internal Server Error: смотрите логи Apache (/var/log/apache2/error.log), включите PythonDebug On временно для подробного трассинга.
- Подключение к MySQL: проверьте права пользователя и host (localhost vs IP).
- Версии пакетов: системный пакет python-django в Debian Lenny может быть старым; для новых проектов рассмотрите установку Django через virtualenv/pip.
Альтернативные варианты и рекомендации
- Использовать mod_wsgi вместо mod_python. mod_python устарел и ограничен; mod_wsgi даёт более надёжную интеграцию WSGI-приложений и обычно предпочтительнее.
- Запуск приложения через WSGI-сервер (gunicorn/uwsgi) и использование nginx/Apache в роли обратного прокси. Это обеспечивает лучшую производительность и масштабируемость.
- Применять virtualenv для изоляции зависимостей и установки более новых версий Django через pip.
Когда описанный метод может не подойти:
- Если нужен современный стек (Python 3, новые версии Django), пакетный менеджер Debian Lenny может быть слишком старым.
- Если требуется высокая нагрузка и многопроцессная модель — рассмотрите комбинированный подход с nginx + gunicorn.
Контрольный список перед запуском в продуктиве
- Проверить корректность настроек DATABASE_* в settings.py.
- Убедиться, что Apache настроен для правильного пользователя и прав доступа к файлам проекта.
- Отключить PythonDebug в продуктиве (PythonDebug Off).
- Ограничить доступ к MySQL по IP и настроить firewall.
- Настроить резервное копирование базы данных.
- Настроить логирование и ротацию логов Apache.
Критерии приёмки
- При обращении к URL /mysite приложение возвращает HTML-страницу без ошибок сервера.
- Приложение успешно подключается к созданной базе mysite под учётной записью mysiteadmin.
- Логи Apache не содержат необработанных исключений Django при простых запросах.
Глоссарий (в одну строку)
- Django — высокоуровневый фреймворк для веб-приложений на Python.
- mod_python — модуль Apache для запуска Python-программ (устаревший в пользу mod_wsgi).
- WSGI — интерфейс между веб-сервером и Python-приложением.
- virtualenv — инструмент для изоляции Python-зависимостей.
Безопасность и соответствие требованиям приватности
- Пароли и секреты не храните в репозитории; используйте переменные окружения или защищённые конфигурации.
- Если проект обрабатывает персональные данные граждан ЕС, рассмотрите требования GDPR: минимизация данных, права субъектов, шифрование при передаче и хранении.
- Обновляйте пакеты безопасности и применяйте обновления ОС.
Быстрый план развёртывания (мини-методология)
- Подготовка сервера: обновление системы, firewall, создание учётной записи администратора.
- Установка MySQL и настройка доступа.
- Установка Apache и модулей.
- Создание виртуального окружения (рекомендуется) и установка Django.
- Создание проекта и базовой страницы, настройка Apache.
- Тестирование локально и в тестовой среде.
- Перенос в продуктив и мониторинг.
Краткое резюме
Django можно быстро развернуть на Debian Lenny с помощью системных пакетов и mod_python, однако для современных проектов рекомендуется использовать virtualenv, модуль mod_wsgi или WSGI-серверы (gunicorn/uwsgi) за обратным прокси. В руководстве приведены команды установки, пример конфигурации Apache и шаги для подключения MySQL.
Похожие материалы
Как сбросить репозиторий Git: stash, reset, clean
YouTube Music на Windows — PWA и десктопные клиенты
Family Pairing в TikTok — как включить контроль
Apple Pay не работает — как быстро исправить
Проверка и очистка использования диска Docker