Введение
Цель руководства
Цель данного руководства – предоставить пошаговую инструкцию по настройке Django-приложения на сервере Ubuntu с использованием MySQL в качестве базы данных, Gunicorn в качестве WSGI-сервера и Nginx в качестве обратного прокси-сервера. Руководство предназначено для разработчиков, имеющих базовые знания о Django и Linux.
Предварительные требования
- Виртуальный сервер Ubuntu (рекомендуется версия 20.04 или выше).
- Доступ к серверу по SSH.
- Базовые знания командной строки Linux.
Обзор технологий (Django, MySQL, Nginx, Gunicorn)
- Django: Высокоуровневый Python веб-фреймворк, предназначенный для быстрой разработки безопасных и масштабируемых веб-приложений.
- MySQL: Популярная система управления реляционными базами данных.
- Nginx: Высокопроизводительный веб-сервер и обратный прокси-сервер.
- Gunicorn: WSGI HTTP-сервер для развертывания Python веб-приложений.
Настройка сервера Ubuntu
Обновление пакетов
Прежде чем начать, обновите список пакетов и сами пакеты:
sudo apt update
sudo apt upgrade
Установка Python и pip
Установите Python 3 и pip:
sudo apt install python3 python3-pip
Установка и настройка MySQL
Установите MySQL server:
sudo apt install mysql-server
После установки необходимо настроить MySQL. Запустите скрипт безопасной настройки:
sudo mysql_secure_installation
Следуйте инструкциям на экране, чтобы установить пароль для пользователя root, удалить анонимных пользователей, запретить удаленный вход для пользователя root и удалить тестовую базу данных.
Настройка Django
Создание виртуального окружения Python
Создайте виртуальное окружение для Django-проекта:
python3 -m venv venv
Активируйте виртуальное окружение:
source venv/bin/activate
Установка Django и MySQLclient
Установите Django и MySQLclient (необходим для подключения Django к MySQL):
pip install django mysqlclient
Создание Django-проекта
Создайте новый Django-проект:
django-admin startproject myproject
cd myproject
Настройка подключения к базе данных MySQL
Отредактируйте файл myproject/settings.py
, чтобы настроить подключение к базе данных MySQL:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '3306',
}
}
Замените mydatabase
, myuser
и mypassword
на реальные значения.
Пример: Допустим, мы анализируем данные о кликах по контекстной рекламе. NAME
может быть 'clicks_db'
, USER
— 'analytics_user'
, PASSWORD
— безопасный пароль.
Миграция базы данных
Выполните миграцию базы данных:
python manage.py makemigrations
python manage.py migrate
Создание суперпользователя
Создайте суперпользователя для доступа к административной панели Django:
python manage.py createsuperuser
Тестирование Django development server
Запустите development server:
python manage.py runserver 0.0.0.0:8000
Откройте в браузере http://your_server_ip:8000/
чтобы убедиться, что Django работает. Не забудьте настроить правила брандмауэра, если необходимо.
Настройка Gunicorn
Установка Gunicorn
Установите Gunicorn:
pip install gunicorn
Тестирование Gunicorn
Запустите Gunicorn для проверки:
gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
Создание systemd unit-файла для Gunicorn
Создайте файл /etc/systemd/system/gunicorn.service
:
[Unit]
Description=Gunicorn daemon for myproject
After=network.target
[Service]
User=youruser
Group=www-data
WorkingDirectory=/path/to/your/project
ExecStart=/path/to/your/project/venv/bin/gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
[Install]
WantedBy=multi-user.target
Замените youruser
, /path/to/your/project
на соответствующие значения. Обратите внимание, что User
должен иметь права на чтение и запись в директорию проекта.
Запуск и активация Gunicorn
Запустите и активируйте Gunicorn:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
Проверьте статус Gunicorn:
sudo systemctl status gunicorn
Настройка Nginx
Установка Nginx
Установите Nginx:
sudo apt install nginx
Настройка Nginx как обратного прокси для Gunicorn
Создание конфигурационного файла Nginx для Django-проекта
Удалите стандартный конфигурационный файл Nginx:
sudo rm /etc/nginx/sites-enabled/default
Создайте новый конфигурационный файл /etc/nginx/sites-available/myproject
:
server {
listen 80;
server_name yourdomain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /path/to/your/project/staticfiles;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Замените yourdomain.com
и /path/to/your/project
на соответствующие значения.
Пример: Если мы разрабатываем систему для автоматизации контекстной рекламы, /static/
может содержать JavaScript файлы для отображения графиков и отчетов.
Активация конфигурации Nginx
Создайте символическую ссылку на конфигурационный файл в директории sites-enabled
:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
Проверьте конфигурацию Nginx на наличие ошибок:
sudo nginx -t
Перезапустите Nginx:
sudo systemctl restart nginx
Настройка брандмауэра (UFW)
Разрешите трафик для Nginx:
sudo ufw allow 'Nginx Full'
Настройка статических файлов
Настройка Django для работы со статическими файлами
В файле myproject/settings.py
добавьте:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
Сбор статических файлов
Соберите статические файлы:
python manage.py collectstatic
Настройка Nginx для обслуживания статических файлов
Убедитесь, что в конфигурационном файле Nginx (/etc/nginx/sites-available/myproject
) правильно указан путь к статическим файлам:
location /static/ {
root /path/to/your/project/staticfiles;
}
Настройка HTTPS (SSL) с помощью Let’s Encrypt
Установка Certbot
Установите Certbot:
sudo apt install certbot python3-certbot-nginx
Получение SSL-сертификата
Получите SSL-сертификат для вашего домена:
sudo certbot --nginx -d yourdomain.com
Следуйте инструкциям на экране. Certbot автоматически настроит Nginx для использования HTTPS.
Автоматическая переадресация HTTP на HTTPS
Certbot предложит автоматически перенаправлять весь HTTP-трафик на HTTPS. Рекомендуется согласиться на это.
Решение проблем
Общие ошибки и способы их устранения
- Ошибка 502 Bad Gateway: Проверьте, запущен ли Gunicorn и правильно ли настроен Nginx.
- Ошибка при подключении к базе данных: Убедитесь, что параметры подключения к базе данных в
settings.py
указаны верно. - Статические файлы не отображаются: Проверьте
STATIC_URL
,STATIC_ROOT
вsettings.py
и конфигурацию Nginx.
Проверка логов Nginx и Gunicorn
Логи Nginx находятся в /var/log/nginx/error.log
и /var/log/nginx/access.log
. Логи Gunicorn можно найти с помощью sudo journalctl -u gunicorn
.
Заключение
Краткое повторение пройденных шагов
В этом руководстве мы прошли через следующие шаги:
- Настройка сервера Ubuntu (обновление пакетов, установка Python, pip, MySQL).
- Настройка Django (создание проекта, настройка базы данных, миграция, создание суперпользователя).
- Настройка Gunicorn (установка, тестирование, создание systemd unit-файла).
- Настройка Nginx (установка, конфигурация обратного прокси, активация).
- Настройка статических файлов.
- Настройка HTTPS с помощью Let’s Encrypt.
Дальнейшие шаги (оптимизация, мониторинг)
- Оптимизация базы данных: Индексы, кеширование запросов.
- Мониторинг сервера: Использование инструментов мониторинга (например, Grafana, Prometheus) для отслеживания нагрузки на сервер, использования памяти и диска.
- Кеширование: Настройка кеширования на уровне Nginx или Django для повышения производительности.
- CI/CD: Настройка автоматического развертывания приложения при внесении изменений в репозиторий.