Поиск по сайту:

Как установить Django Framework на Debian 11


Это руководство существует для этих версий ОС

  • Debian 11 (Bullseye)
  • Debian 10 (Buster)

На этой странице

  1. Предпосылки
  2. Начало работы
  3. Установите сервер базы данных PostgreSQL.
  4. Создание виртуальной среды Python
  5. Установка и настройка Django
  6. Запустите сервер разработки Django
  7. Проверьте Django с помощью Gunicorn
  8. Создание служебного файла Systemd для Gunicorn
  9. Настройка Nginx в качестве обратного прокси-сервера для Django
  10. Заключение

Django — это бесплатная среда веб-разработки с открытым исходным кодом, написанная на Python. Он используется для разработки сложных и управляемых базами данных приложений Python. Он поставляется с набором скриптов Python для создания проектов Python. Его можно запустить в любой операционной системе, поддерживающей Python, включая Windows, macOS, Linux/Unix и Solaris. Это помогает разработчикам писать меньше кода и создавать новый веб-сайт за короткое время.

В этом руководстве я объясню, как настроить Django в виртуальной среде Python с использованием базы данных PostgreSQL в Debian 11. Затем мы установим и настроим Nginx в качестве обратного прокси-сервера для Django.

Предпосылки

  • Сервер под управлением Debian 11.
  • Действительное доменное имя, указанное с IP-адресом вашего сервера.
  • На сервере настроен пароль root.

Начиная

Перед запуском рекомендуется обновить системные пакеты до последней версии. Вы можете сделать это с помощью следующей команды:

apt-get update -y

После обновления всех пакетов установите другие инструменты Python и пакет Nginx с помощью следующей команды:

apt-get install python3-pip python3-dev libpq-dev curl nginx -y

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

Установите сервер базы данных PostgreSQL

Здесь мы будем использовать PostgreSQL в качестве базы данных. Итак, давайте установим его с помощью следующей команды:

apt-get install postgresql postgresql-contrib -y

После установки PostgreSQL подключитесь к оболочке PostgreSQL с помощью следующей команды:

su - postgres
psql

Затем создайте базу данных и пользователя для Django с помощью следующей команды:

CREATE DATABASE django;
CREATE USER django WITH PASSWORD 'password';

Затем предоставьте некоторые необходимые роли с помощью следующей команды:

ALTER ROLE django SET client_encoding TO 'utf8';
ALTER ROLE django SET default_transaction_isolation TO 'read committed';
ALTER ROLE django SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE django TO django;

Затем выйдите из оболочки PostgreSQL, используя следующую команду:

\q
exit

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

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

Далее вам нужно будет создать виртуальную среду Python для создания проекта Django.

Сначала обновите пакет PIP до последней версии, используя следующую команду:

pip3 install --upgrade pip

Затем проверьте версию PIP с помощью следующей команды:

pip --version

Пример вывода:

pip 21.2.4 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)

Затем установите пакет виртуальной среды с помощью следующей команды:

pip3 install virtualenv

Затем создайте каталог для проекта Django и создайте виртуальную среду Django:

mkdir ~/djangoapp
cd ~/djangoapp
virtualenv djangoenv

Затем активируйте виртуальную среду Django с помощью команды ниже:

source djangoenv/bin/activate

Затем установите Django, Gunicorn и другие пакеты, используя следующую команду:

pip install django gunicorn psycopg2-binary

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

Установить и настроить Джанго

Django предоставляет скрипт django-admin.py для создания проекта. Вы можете запустить следующую команду, чтобы создать проект Django:

django-admin.py startproject djangoapp ~/djangoapp

Далее вам нужно будет отредактировать settings.py и определить параметры вашей базы данных:

nano ~/djangoapp/djangoapp/settings.py

Измените следующую строку с вашим доменным именем:

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

Раскомментируйте серверную часть базы данных по умолчанию и добавьте параметры базы данных PostgreSQL:

#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': BASE_DIR / 'db.sqlite3',
#    }
#}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'django',
        'USER': 'django',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',

    }
}

Добавьте в конец файла следующие строки:

STATIC_URL = '/static/'
import os
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Сохраните и закройте файл, затем перенесите исходную схему базы данных в базу данных PostgreSQL:

./manage.py makemigrations
./manage.py migrate

Пример выводаL:

  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 с помощью следующей команды:

./manage.py createsuperuser

Установите имя пользователя и пароль администратора, как показано ниже:

Username (leave blank to use 'root'): dadmin
Email address: 
Password: 
Password (again): 
Superuser created successfully.

Затем соберите весь статический контент в каталог:

./manage.py collectstatic

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

На этом этапе Django установлен и настроен. Теперь вы можете запустить сервер разработки Django с помощью следующей команды:

./manage.py runserver 0.0.0.0:8000

Если все в порядке, вы должны получить следующий вывод:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
August 27, 2021 - 10:02:05
Django version 3.2.6, using settings 'djangoapp.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Теперь откройте веб-браузер и войдите в свой проект Django, используя URL-адрес http://django.example.com:8000/admin/. Вы будете перенаправлены на страницу входа в Django:

Укажите имя пользователя и пароль администратора и нажмите «Войти». Вы должны увидеть панель инструментов Django на следующей странице:

Теперь вернитесь к своему терминалу и нажмите CTRL + C, чтобы остановить сервер разработки Django.

Проверьте Django с помощью Gunicorn

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

gunicorn --bind 0.0.0.0:8000 djangoapp.wsgi

Если все в порядке, вы должны получить следующий вывод:

[2021-08-27 10:04:22 +0000] [47383] [INFO] Starting gunicorn 20.1.0
[2021-08-27 10:04:22 +0000] [47383] [INFO] Listening at: http://0.0.0.0:8000 (47383)
[2021-08-27 10:04:22 +0000] [47383] [INFO] Using worker: sync
[2021-08-27 10:04:22 +0000] [47384] [INFO] Booting worker with pid: 47384

Нажмите CTRL + C, чтобы остановить сервер Gunicorn.

Затем деактивируйте из виртуальной среды Python с помощью следующей команды:

deactivate

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

Далее вам нужно будет создать служебный файл systemd, чтобы Gunicorn запускал и останавливал сервер приложений Django.

Вы можете создать Gunicorn с помощью следующей команды:

nano /etc/systemd/system/gunicorn.socket

Добавьте следующие строки:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

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

nano /etc/systemd/system/gunicorn.service

Добавьте следующие строки, соответствующие пути вашего проекта Django:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/root/djangoapp
ExecStart=/root/djangoapp/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock          djangoapp.wsgi:application

[Install]
WantedBy=multi-user.target

Сохраните и закройте файл, затем установите соответствующие права доступа к каталогу проекта Django:

chown -R www-data:root ~/djangoapp

Затем перезагрузите демон systemd с помощью следующей команды:

systemctl daemon-reload

Затем запустите службу Gunicorn и включите ее запуск при перезагрузке системы:

systemctl start gunicorn.socket
systemctl enable gunicorn.socket

Затем проверьте состояние Gunicorn, используя команду ниже:

systemctl status gunicorn.socket

Вы должны получить следующий результат:

? gunicorn.socket - gunicorn socket
     Loaded: loaded (/etc/systemd/system/gunicorn.socket; disabled; vendor preset: enabled)
     Active: active (listening) since Fri 2021-08-27 10:05:46 UTC; 6s ago
   Triggers: ? gunicorn.service
     Listen: /run/gunicorn.sock (Stream)
     CGroup: /system.slice/gunicorn.socket

Aug 27 10:05:46 debian11 systemd[1]: Listening on gunicorn socket.

Настройте Nginx в качестве обратного прокси для Django

Далее вам нужно будет настроить Nginx в качестве обратного прокси-сервера для обслуживания Django.

Для этого создайте файл конфигурации Nginx:

nano /etc/nginx/conf.d/django.conf

Добавьте следующие строки:

server {
     listen 80;
     server_name django.example.com;
    location = /favicon.ico { access_log off; log_not_found off; }


    location /static/ {
         root /root/djangoapp;
     }

    location / {
         include proxy_params;
         proxy_pass http://unix:/run/gunicorn.sock;
     }
}

Сохраните и закройте файл, затем проверьте Nginx на наличие ошибок конфигурации:

nginx -t
Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Наконец, перезапустите службу Nginx, чтобы применить изменения:

systemctl restart nginx

Чтобы проверить статус Nginx, запустите:

systemctl status nginx

Пример вывода:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-08-27 10:06:59 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 47494 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 47495 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 47496 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 2.5M
        CPU: 49ms
     CGroup: /system.slice/nginx.service
             ??47496 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??47497 nginx: worker process

Aug 27 10:06:59 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 27 10:06:59 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Aug 27 10:06:59 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.

Теперь вы можете получить доступ к приложению Django, используя URL-адрес http://django.example.com/admin. Вы также можете получить доступ к приложению Django, используя URL-адрес http://django.example.com/.

Заключение

Поздравляем! вы успешно установили приложение Django с Gunicorn и Nginx в качестве обратного прокси-сервера. Теперь вы можете приступить к развертыванию своего приложения Python с помощью платформы Django.