Django установка · 12 min read · Oct 14, 2025

Как установить фреймворк Django на Python на Ubuntu 22.04

Django — это фреймворк на Python, используемый для разработки динамических веб-сайтов и приложений. Он следует архитектуре MVC (Model-View-Controller). Использование Django ускоряет процесс разработки, так как большинство подлежащих задач обрабатываются им.

Этот учебник научит вас, как установить фреймворк Django на сервер Ubuntu 22.04. Вы также создадите демонстрационный проект и протестируете его.

Предварительные требования

  • Сервер с установленной Ubuntu 22.04.
  • Пользователь с правами sudo, не являющийся root.
  • Убедитесь, что все обновлено. $ sudo apt update $ sudo apt upgrade

Установка Django

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

Установка из репозиториев Ubuntu

Самый простой способ установить Django — использовать репозитории Ubuntu. Ubuntu 22.04 поставляется с Python 3.10. Вы можете проверить это с помощью следующей команды.

$ python3 -V
Python 3.10.4

Установите Django с помощью следующей команды.

$ sudo apt install python3-django

Запустите следующую команду, чтобы проверить успешную установку.

$ django-admin --version
3.2.12

Версия Django, поставляемая с Ubuntu, является текущей LTS-версией, которая поддерживается до 2024 года. Однако это не текущая версия. Если вы хотите установить недавний релиз, этот метод не для вас.

Установка с помощью pip

Это самый распространенный способ установки Django. Рекомендуемый способ — создать виртуальную среду Python. Это позволяет устанавливать пакеты Python, не затрагивая систему.

Установите pip и модуль venv. venv используется для создания виртуальных сред Python, а pip — для установки пакетов Python.

$ sudo apt install python3-pip python3-venv

Давайте создадим каталог для демонстрационного проекта.

$ mkdir ~/sampleproject
$ cd ~/sampleproject

Создайте виртуальную среду с помощью следующей команды. Замените sample_env на имя, которое вы хотите дать своей виртуальной среде.

$ python3 -m venv sample_env

Это установит портативную версию Python, pip в вашем каталоге проекта. Чтобы установить любые пакеты в проект, вы должны активировать среду с помощью следующей команды.

$ source sample_env/bin/activate

Ваш приглашение командной строки изменится, чтобы отразить виртуальную среду.

(sample_env) navjot@django:~/sampleproject$

Теперь, когда виртуальная среда активирована, используйте pip для установки Django. Запустите следующую команду для установки Django.

(sample_env) $ pip install django

Проверьте установку.

(sample_env) $ django-admin --version
4.0.5

В зависимости от требований вашего проекта вы можете установить другую версию Django следующим образом.

(sample_env) $ pip install django==3.2.1

Проверьте установку.

(sample_env) $ django-admin --version
3.2.1

Как вы можете видеть, этот метод устанавливает более новую версию Django, чем версия, полученная из репозитория Ubuntu.

Чтобы выйти из виртуальной среды, выполните следующую команду.

(sample_env) $ deactivate

Установка версии разработки

Вы также можете использовать pip для установки версии разработки Django. Для этого мы получим версию разработки из репозитория Django на Github.

Клонируйте репозиторий в каталог ~/django-dev с помощью следующей команды.

$ git clone https://github.com/django/django ~/django-dev

Перейдите в вновь созданный каталог.

$ cd ~/django-dev

Создайте виртуальную среду.

$ python3 -m venv dev_django_env

Активируйте среду.

$ source dev_django_env/bin/activate

Установите Django с помощью pip. Флаг -e устанавливает его в редактируемом режиме, что необходимо, если вы устанавливаете из системы управления версиями.

(dev_django_dev) $ pip install -e ~/django-dev

Проверьте установку.

(dev_django_dev) $ django-admin --version
4.2.dev20220628195651

Как вы можете видеть, версия здесь является последней версией разработки. Версия разработки Django не полезна для производственных сред.

Создание образца проекта

Давайте создадим образец проекта Django. Создайте каталог для образца проекта.

$ mkdir ~/dj-sample
$ cd ~/dj-sample

Создайте виртуальную среду Python.

$ python3 -m venv sample_proj

Активируйте среду.

$ source sample_proj/bin/activate

Установите Django.

(sample_proj) $ pip install django

Чтобы создать проект, нам нужно использовать команду startproject. Эта команда создает другой каталог, который включает:

  • Скрипт управления, manage.py, используемый для администрирования задач, специфичных для Django.
  • Каталог с тем же именем, что и проект, который включает код проекта.

Мы создадим каталог проекта в нашем текущем рабочем каталоге. Для этого используйте символ точки (.) в конце следующей команды.

(sample_proj) $ django-admin startproject demoproject .

Далее нам нужно выполнить миграцию базы данных с помощью команды migrate. Миграции в Django переносят изменения, которые вы вносите в свои модели, в схему базы данных. По умолчанию Python использует базу данных SQLite.

(sample_proj) $ python manage.py migrate

Вы получите следующий вывод.

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

Далее создайте административного пользователя для доступа к административному интерфейсу Django.

(sample_proj) $ python manage.py createsuperuser

Вас попросят ввести имя пользователя, адрес электронной почты и пароль.

Username (leave blank to use 'navjot'):
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.

Тестирование сервера разработки

Пришло время протестировать приложение. Для этого вам нужно изменить директиву ALLOWED_HOSTS в настройках Django. Эта директива определяет список IP-адресов и доменных имен, которым предоставлен доступ к приложению Django.

Откройте файл настроек с помощью следующей команды.

(sample_proj) $ nano demoproject/settings.py

Найдите следующую запись.

ALLOWED_HOSTS = []

Введите IP-адрес вашего сервера в квадратные скобки. Каждая запись должна быть заключена в кавычки, а несколько записей нужно разделять запятыми. Ввод www.example.com будет совпадать точно. Однако .example.com будет совпадать с example.com и www.example.com, а также с любым другим поддоменом example.com. Поэтому рекомендуется использовать точку перед именем домена, чтобы совпадать с ним и его поддоменами.

ALLOWED_HOSTS = ['']

Мы использовали IP-адрес для совпадения с нашим сервером. Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Перед тем как протестировать сервер разработки, вам нужно настроить брандмауэр, чтобы разрешить работу Django. Django по умолчанию использует порт 8000. Откройте порт с помощью Uncomplicated Firewall (UFW).

(sample_proj) $ sudo ufw allow 8000

Запустите сервер разработки.

(sample_proj) $ python manage.py runserver 0.0.0.0:8000

Запустите URL http://:8000 в вашем браузере, и вы получите следующий экран.

Главная страница Django

Вы можете получить доступ к административному интерфейсу, перейдя по URL http://:8000/admin/, и вы увидите следующий экран входа.

Страница входа Django

Введите учетные данные, созданные ранее, чтобы войти в административную панель, показанную ниже.

Административная панель Django

После завершения демонстрационного проекта вы можете закрыть сервер, нажав Ctrl + C в вашем терминале.

Установка и тестирование Gunicorn

Запуск постоянного сервера Django с помощью nohup

До сих пор служба Django не является постоянной. Чтобы сделать службу постоянной, есть два метода. Первый метод включает использование утилиты nohup. nohup — это команда POSIX, что означает no hang up. Она используется для выполнения команд таким образом, чтобы они не останавливались даже при выходе пользователя.

Убедитесь, что вы вышли из сервера в терминале, нажав Ctrl + C.

Запустите следующую команду, чтобы запустить сервер разработки Django.

(sample_proj) $ nohup python manage.py runserver 0.0.0.0:8000 &

Теперь ваш сервер Django будет продолжать работать, пока вы не убьете его вручную. Команда даст вам идентификатор процесса и выведет другую команду.

[1] 42595
(sample_proj) $ nohup: ignoring input and appending output to 'nohup.out'
^C

Нажмите Ctrl + C, чтобы выйти. Оригинальный сервер Django продолжит работать. Вы можете проверить, открыв URL в вашем браузере.

Когда вы закончите, вам нужно убить процесс. Команда nohup дает вам один идентификатор процесса. Но на самом деле выполняются два процесса. Чтобы найти идентификаторы обоих процессов, выполните следующую команду.

(sample_proj) $ ps aux | grep manage.py
navjot     42650  3.6  1.8  47792 38168 pts/0    S    02:28   0:00 python manage.py runserver 0.0.0.0.:8000
navjot     42651  7.9  2.0 344904 41708 pts/0    Sl   02:28   0:00 /home/navjot/dj-sample/sample_proj/bin/python manage.py runserver 0.0.0.0:8000
navjot     42657  0.0  0.1   6612  2172 pts/0    S+   02:28   0:00 grep --color=auto manage.py

Как вы можете видеть, выполняются два процесса, один с идентификатором 42650 и другой с идентификатором 42651.

Запустите следующую команду, чтобы остановить сервер, используя идентификаторы процессов, которые вы получили выше.

(sample_proj) $ sudo kill -9 42650 42651

Установка Gunicorn

Второй метод для запуска постоянного сервера Django требует установки веб-серверов Gunicorn и Nginx. Gunicorn — это HTTP-сервер WSGI на Python. Он будет взаимодействовать с приложением Django, а затем Nginx будет действовать как обратный прокси для Gunicorn. Этот метод имеет дополнительное преимущество в виде обеспечения безопасности и производительности, которые предоставляет использование Nginx.

Установите Gunicorn.

(sample_proj) $ pip install gunicorn

Перед тем как продолжить, нам нужно протестировать способность Gunicorn обслуживать проект. Запустите следующую команду, чтобы запустить Gunicorn.

(sample_proj) $ gunicorn --bind 0.0.0.0:8000 demoproject.wsgi

Это запустит Gunicorn на том же интерфейсе, на котором работал Django. Чтобы проверить, откройте URL http://:8000 в вашем браузере, и вы получите ту же главную страницу Django. Это означает, что Gunicorn работает идеально.

Когда вы закончите тестирование, нажмите Ctrl + C в терминале, чтобы выйти из Gunicorn.

Деактивируйте виртуальную среду, чтобы вернуться к вашей обычной оболочке.

(sample_proj) $ deactivate

Создание сокета и файла службы для Gunicorn

Первый шаг — создать файл сокета Gunicorn. Сокет Gunicorn будет создан при загрузке и слушать подключения. Когда происходит подключение, systems автоматически запустит процесс Gunicorn для его обработки.

Создайте и откройте файл сокета Gunicorn для редактирования.

$ sudo nano /etc/systemd/system/gunicorn.socket

Вставьте следующий код в него.

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Далее создайте и откройте файл службы Gunicorn для редактирования.

$ sudo nano /etc/systemd/system/gunicorn.service

Вставьте следующий код в него.

[Unit]
Description=django gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=navjot
Group=nginx
WorkingDirectory=/home/navjot/dj-sample
ExecStart=/home/navjot/dj-sample/sample_proj/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          demoproject.wsgi:application

[Install]
WantedBy=multi-user.target

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено. Замените navjot на ваше имя пользователя в системе. Группа nginx позволит серверу Nginx взаимодействовать с Django.

Перезагрузите системный демон, чтобы обновить файлы systemd.

$ sudo systemctl daemon-reload

Включите и запустите файл сокета Gunicorn.

$ sudo systemctl start gunicorn.socket
$ sudo systemctl enable gunicorn.socket

Проверьте статус сокета Gunicorn.

$ sudo systemctl status gunicorn.socket

Вы получите аналогичный вывод.

? gunicorn.socket - gunicorn socket
     Loaded: loaded (/etc/systemd/system/gunicorn.socket; disabled; vendor preset: enabled)
     Active: active (listening) since Thu 2022-06-30 01:43:24 UTC; 20s ago
   Triggers: ? gunicorn.service
     Listen: /run/gunicorn.sock (Stream)
     CGroup: /system.slice/gunicorn.socket

Jun 30 01:43:24 django systemd[1]: Listening on gunicorn socket.

Служба Gunicorn все еще не работает, как вы можете проверить.

$ sudo systemctl status gunicorn.service
? gunicorn.service - django gunicorn daemon
     Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
TriggeredBy: ? gunicorn.socket

Чтобы протестировать механизм активации сокета, выполните следующую команду.

$ curl --unix-socket /run/gunicorn.sock localhost

Вы получите HTML-вывод главной страницы Django в вашем терминале. Это также запускает Gunicorn для обслуживания приложения. Проверьте статус службы снова, и вы увидите, что она теперь работает.

$ sudo systemctl status gunicorn.service
? gunicorn.service - django gunicorn daemon
     Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-30 01:45:09 UTC; 12s ago
TriggeredBy: ? gunicorn.socket
   Main PID: 42365 (gunicorn)
      Tasks: 4 (limit: 2241)
     Memory: 91.7M
        CPU: 1.128s
     CGroup: /system.slice/gunicorn.service
             ??42365 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application
             ??42366 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application
             ??42367 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application
             ??42368 /home/navjot/dj-sample/sample_proj/bin/python3 /home/navjot/dj-sample/sample_proj/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock demoproject.wsgi:application

Jun 30 01:45:09 django systemd[1]: Started django gunicorn daemon.
Jun 30 01:45:09 django gunicorn[42365]: [2022-06-30 01:45:09 +0000] [42365] [INFO] Starting gunicorn 20.1.0
Jun 30 01:45:09 django gunicorn[42365]: [2022-06-30 01:45:09 +0000] [42365] [INFO] Listening at: unix:/run/gunicorn.sock (42365)
Jun 30 01:45:09 django gunicorn[42365]: [2022-06-30 01:45:09 +0000] [42365] [INFO] Using worker: sync
Jun 30 01:45:09 django gunicorn[42366]: [2022-06-30 01:45:09 +0000] [42366] [INFO] Booting worker with pid: 42366
.......

Установка Nginx

Последний шаг — установить и настроить Nginx. Ubuntu 22.04 поставляется со старой версией Nginx. Вам нужно загрузить официальный репозиторий Nginx, чтобы установить последнюю версию.

Импортируйте ключ подписи Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Добавьте репозиторий для стабильной версии Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Обновите системные репозитории.

$ sudo apt update

Установите Nginx.

$ sudo apt install nginx

Проверьте установку.

$ nginx -v
nginx version: nginx/1.22.0

Настройка Nginx

Создайте и откройте файл /etc/nginx/conf.d/django-gunicorn.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/django-gunicorn.conf

Вставьте следующий код в него.

server {
    listen 80;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/navjot/dj-sample;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

Замените корневое местоположение в приведенном выше файле на каталог на вашем сервере.

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Проверьте вашу конфигурацию Nginx.

$ sudo nginx -t

Если вы не видите ошибок, значит, вы готовы к работе.

Вам также нужно будет добавить имя домена в директиву ALLOWED_HOSTS. Откройте файл settings.py.

$ nano ~/dj-sample/demoproject/settings.py

Измените значение переменной ALLOWED_HOSTS.

ALLOWED_HOSTS = ['','django.example.com']

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.

Перезапустите сокет и службу Gunicorn.

$ sudo systemctl restart gunicorn.socket
$ sudo systemctl restart gunicorn.service

Запустите сервер Nginx.

$ sudo systemctl start nginx

Откройте HTTP-порт. Вы также можете удалить порт 8000, если больше не собираетесь его использовать.

$ sudo ufw delete allow 8000
$ sudo ufw allow http

Проверьте, открыв URL http://django.example.com, и главная страница Django загрузится.

Установка SSL

До сих пор ваше приложение Django обслуживается через незашифрованное HTTP-соединение. Настоятельно рекомендуется защитить его с помощью SSL-сертификата. Для этого используйте инструмент Certbot с помощью инструмента Snapd. Он уже установлен в системе Ubuntu 22.04.

Установите основной репозиторий Snapd.

$ sudo snap install core

Установите Certbot.

$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Сгенерируйте сертификат. Следующая команда также автоматически настроит Nginx.

$ sudo certbot --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d django.example.com

Сначала откройте порт HTTPS.

$ sudo ufw allow https

Посетите URL https://django.example.com в вашем браузере, чтобы подтвердить.

Заключение

На этом наш учебник завершен, в котором вы узнали, как установить Django, Gunicorn и Nginx на сервер Ubuntu 22.04. Вы также установили SSL-сертификат для повышения безопасности вашего проекта Django. Если у вас есть вопросы, оставляйте их в комментариях ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.