Установка Django на Ubuntu: инструкция для чайников

Данная статья содержит пошаговую инструкцию по установки Django на Ubuntu для абсолютных новичков, для тех, кто только-только установил Убунту на свой первый VPS/VDS и думает: «А что, собственно, делать дальше?».

Установка Django на Ubuntu

Несмотря на то, что процесс установки Django на сервер можно уместить в несколько простейших консольных команд, автор статьи, вспоминая те сложности, когда он был зеленым новичком, решил обогатить статью второстепенной, на первый взгляд, информацией, которая должна помочь читателю пройти пусть от захода на свой сервер по SSH до доступности своего сайта по домену с HTTPS

Ниже мы рассмотрим несколько вопросов:

  1. Установка Django на Ubuntu через SSH
  2. Подключение домена к серверу и выпуск SSL-сертификата

Установка Django на Ubuntu через SSH

Когда вы создавали сервер в панели хостинга (предположим, что это был какой-нибудь Hetzner или Contabo), вам на почту должны были прийти данные доступа по SSH. И, если вы не сталкивались с таким ранее, у вас должен возникнуть логичный вопрос: «Как и через что можно попасть на свой сервер с помощью этих данных?».

В самом деле, существует множество SSH-клиентов, но мои фавориты это:

  • Putty
  • MobaXterm (Ей активно пользуюсь последние несколько лет и, в целом, бесплатная версия устраивает)

Итак, предположим, что вы скачали mobaxterm и хотите зайти на свой сервер через данную программу. Для этого вам потребуется сделать несколько простых шагов:

1. Открываете программу и нажимаете «New Session»:

новая сессия в моба

2. В открывшемся окне нужно будет вбить IP сервера + можно сразу указать имя пользователя (в 99% случаев это будет root, если на почту вам не пришло иное):

подключение к серверу по ssh

В появившемся попапе нажимаем «Accept»:

подключение к серверу по ssh промежуточный шаг

3. Далее нам потребуется ввести пароль.

Обратите внимание, что при вводе пароля по SSH, вы не будете видеть символы (и даже звездочки, шифрующие символы), поэтому лучше всего будет скопировать пароль и вставить его в консоль правой кнопкой мыши:

Ввод пароля по SSH

4. Если все прошло успешно, то вы увидите такое окно (мой сервер в процессе попросил сменить пароль, но это зависит от хостера):

Успешный вход по ssh

Что ж, поздравляю, мы находимся на сервере и теперь нам предстоит самое важное.

Установка фреймворка 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

В консоли вы увидите предложение выбрать домены для выпуска сертификата (можно оставить поле пустым, чтобы применилось ко всем доменам):

домены 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 при перезагрузке сервера

Для настройки автозапуска 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.