Данная статья содержит пошаговую инструкцию по установки Django на Ubuntu для абсолютных новичков, для тех, кто только-только установил Убунту на свой первый VPS/VDS и думает: «А что, собственно, делать дальше?».
Несмотря на то, что процесс установки Django на сервер можно уместить в несколько простейших консольных команд, автор статьи, вспоминая те сложности, когда он был зеленым новичком, решил обогатить статью второстепенной, на первый взгляд, информацией, которая должна помочь читателю пройти пусть от захода на свой сервер по SSH до доступности своего сайта по домену с HTTPS
Ниже мы рассмотрим несколько вопросов:
- Установка Django на Ubuntu через SSH
- Подключение домена к серверу и выпуск SSL-сертификата
Установка Django на Ubuntu через SSH
Когда вы создавали сервер в панели хостинга (предположим, что это был какой-нибудь Hetzner или Contabo), вам на почту должны были прийти данные доступа по SSH. И, если вы не сталкивались с таким ранее, у вас должен возникнуть логичный вопрос: «Как и через что можно попасть на свой сервер с помощью этих данных?».
В самом деле, существует множество SSH-клиентов, но мои фавориты это:
- Putty
- MobaXterm (Ей активно пользуюсь последние несколько лет и, в целом, бесплатная версия устраивает)
Итак, предположим, что вы скачали mobaxterm и хотите зайти на свой сервер через данную программу. Для этого вам потребуется сделать несколько простых шагов:
1. Открываете программу и нажимаете «New Session»:
2. В открывшемся окне нужно будет вбить IP сервера + можно сразу указать имя пользователя (в 99% случаев это будет root, если на почту вам не пришло иное):
В появившемся попапе нажимаем «Accept»:
3. Далее нам потребуется ввести пароль.
Обратите внимание, что при вводе пароля по SSH, вы не будете видеть символы (и даже звездочки, шифрующие символы), поэтому лучше всего будет скопировать пароль и вставить его в консоль правой кнопкой мыши:
4. Если все прошло успешно, то вы увидите такое окно (мой сервер в процессе попросил сменить пароль, но это зависит от хостера):
Что ж, поздравляю, мы находимся на сервере и теперь нам предстоит самое важное.
Установка фреймворка Django на Ubuntu
Звучит это сложнее, чем есть на самом деле. Для установки Джанго нам потребуется последовательно ввести в консоль несколько простых команд.
1. Для начала обновим пакеты через команду
sudo apt update && sudo apt upgrade -y
2. Установим питон
sudo apt install python3 python3-pip -y
Также установим пакет для создания виртуальных сред:
pip3 install virtualenv
3. Создадим виртуальное окружение
virtualenv venv
source venv/bin/activate
4. Установим Django
pip install django
Вероятно, что в процессе нужно будет нажать «Y», чтобы подтвердить процесс установки
5. Проверим успешность установки
django-admin --version
Ответом будет что-то вроде:
3.2.12
Развертывание проекта
6. Создаем новый проект Django
django-admin startproject myproject
cd myproject
7. Установим Gunicorn
pip install gunicorn
Проверим, есть ли такие строки в файле myproject/wsgi.py (возможно, что будут уже прописаны):
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Настройка Nginx для Django
Теперь настроим nginx для нашего сервера:
8. Установим nginx на сервер
sudo apt install nginx -y
9. Создадим конфигурационный файл для нашего домена (доменов)
Создаем файл с именем нашего домена (например test.com) в папке /etc/nginx/sites-available/ и наполняем его следующим содержимым:
server {
listen 80;
server_name test.com www.test.com;
location / {
proxy_pass http://localhost:8000; # Адрес, где работает Gunicorn
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Внимание: В строке server_name поменяйте test.com на ваше доменное имя.
10. Активируем конфигурацию сервера
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
11. Проверяем конфигурацию и перезапускаем nginx
sudo nginx -t
sudo systemctl restart nginx
Выпуск SSL-сертификата для сайта на Django
Теперь перед нами стоит задача сделать так, чтобы сайт был доступен по протоколу https. Для этого, мы воспользуемся Certbot, который значительно облегчит процесс выпуска и настройки сертификата.
12. Установка Certbot
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get install certbot python-certbot-nginx
Если в процессе возникли какие-то проблемы, или же не удается выполнить команды из шага 13, то лучше провести установку через snapd:
sudo snap install core
sudo snap refresh core
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
13. Выпускаем SSL-сертификат через certbot
sudo certbot --nginx
В консоли вы увидите предложение выбрать домены для выпуска сертификата (можно оставить поле пустым, чтобы применилось ко всем доменам):
И перезапускаем nginx:
sudo service nginx restart
14. Перевыпуск SSL-сертификата
С учетом того, что сертификаты Let’s Encrypt выпускаются на 90 дней, лучше сразу автоматизировать перевыпуск сертификата с помощью команды:
sudo certbot renew --dry-run
15. Запуск проекта
Запустим наш проект с помощью команды:
gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
Теперь, наконец-то, Django установлен на сервер и по доменному имени вы увидите тестовую заглушку:
Поздравляю, Django установлен корректно. Однако, осталось сделать так, чтобы проект запускался каждый раз с рестартом сервера. Это можно сделать с помощью небольшого набора команд.
Автозапуск проекта на Django при перезагрузке сервера
Для настройки автозапуска Django на нашем сервере, мы будем использовать стандартный сервис systemd.
1. Создаем конфигурационный файл для нашего сервиса
sudo nano /etc/systemd/system/myproject.service
2. Добавляем в него необходимые настройки
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/path/to/your/project
ExecStart=/path/to/your/virtualenv/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 myproject.wsgi:application
[Install]
WantedBy=multi-user.target
Обратите внимание, что нужно будет изменить значение User и WorkingDirectory в соответствии с настройками вашего проекта.
3. Перезапускаем и включаем systemd
sudo systemctl daemon-reload
sudo systemctl start myproject
sudo systemctl enable myproject
Также можно проверить его статус:
sudo systemctl status myproject
Теперь при перезагрузке вашего сервера, не придется каждый раз прописывать команду для запуска Django.