Django установка · 16 min read · Oct 13, 2025
Как установить Django с Postgres, Nginx и Gunicorn на Rocky Linux 9

Django — это фреймворк Python, используемый для разработки динамических веб-сайтов и приложений. Он следует архитектуре MVC (Model-View-Controller). Использование Django ускоряет процесс разработки приложений, так как большинство базовых задач обрабатываются им.
В этом руководстве вы узнаете, как установить фреймворк Django на сервер Rocky Linux 9. Вы также создадите демонстрационный проект и протестируете его.
Предварительные требования
Сервер с установленным Rocky Linux 9.
Пользователь без прав root с привилегиями sudo.
Полностью квалифицированное доменное имя (FQDN), указывающее на ваш сервер. Для наших целей мы будем использовать
django.example.comв качестве доменного имени.Убедитесь, что все обновлено.
$ sudo dnf updateУстановите основные утилиты. Некоторые из них могут быть уже установлены.
$ sudo dnf install wget curl nano unzip yum-utils -ySELinux отключен.
Шаг 1 - Настройка брандмауэра
Первый шаг — настроить брандмауэр. Rocky Linux использует брандмауэр Firewalld. Проверьте статус брандмауэра.
$ sudo firewall-cmd --state
running
Брандмауэр работает с различными зонами, и публичная зона является той, которую мы будем использовать по умолчанию. Перечислите все службы и порты, активные на брандмауэре.
$ sudo firewall-cmd --permanent --list-services
Он должен показать следующий вывод.
cockpit dhcpv6-client ssh
Django нуждается в портах HTTP и HTTPS для работы. Откройте их.
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent
Перезагрузите брандмауэр, чтобы применить изменения.
$ sudo firewall-cmd --reload
Шаг 2 - Установка PostgreSQL и утилит
Rocky Linux 9 поставляется со старой версией PostgreSQL. Мы установим Postgres 14 для нашего руководства.
Установите RPM-репозиторий для PostgreSQL.
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Установите сервер PostgreSQL 14.
$ sudo dnf install -y postgresql14-server postgresql14-contrib postgresql14-devel python3-psycopg2
Инициализируйте базу данных.
$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
Включите и запустите службу PostgreSQL.
$ sudo systemctl enable postgresql-14 --now
Проверьте статус службы.
$ sudo systemctl status postgresql-14
? postgresql-14.service - PostgreSQL 14 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2022-09-12 01:17:24 UTC; 2s ago
Docs: https://www.postgresql.org/docs/14/static/
Process: 87995 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 88000 (postmaster)
Tasks: 8 (limit: 5915)
Memory: 16.5M
CPU: 60ms
CGroup: /system.slice/postgresql-14.service
??88000 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/
??88001 "postgres: logger "
??88003 "postgres: checkpointer "
??88004 "postgres: background writer "
??88005 "postgres: walwriter "
??88006 "postgres: autovacuum launcher "
??88007 "postgres: stats collector "
??88008 "postgres: logical replication launcher "
Sep 12 01:17:24 board.example.com systemd[1]: Starting PostgreSQL 14 database server...
Давайте установим некоторые дополнительные утилиты, которые нам понадобятся для работы Django.
$ sudo dnf install -y python3 python3-devel python3-pip gcc
Чтобы устранить любые будущие ошибки, связанные с тем, что pg_config не найден, вам нужно добавить путь к папке bin PostgreSQL. Откройте файл .bashrc для редактирования.
$ nano ~/.bashrc
Добавьте следующую строку в конец файла.
export PATH=$PATH:/usr/pgsql-14/bin
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.
Шаг 3 - Настройка PostgreSQL
Войдите в оболочку PostgreSQL.
$ sudo -i -u postgres psql
Создайте новую базу данных для Django.
postgres=# CREATE DATABASE djangoapp;
Создайте нового пользователя базы данных с надежным паролем.
postgres=# CREATE USER djangouser WITH ENCRYPTED PASSWORD 'dbpassword';
Предоставьте права пользователю на использование базы данных.
postgres=# GRANT ALL PRIVILEGES ON DATABASE djangoapp TO djangouser;
Выйдите из оболочки Postgres.
postgres=# \q
Шаг 4 - Установка Django
Существует несколько способов установки Django. Какой из них лучше всего подходит для вас, зависит от того, как вы хотите настроить свою среду разработки и от ваших потребностей. Каждый метод имеет свои плюсы и минусы. Давайте рассмотрим все эти методы.
Установка с помощью pip
Это самый распространенный способ установки Django. Рекомендуемый способ сделать это — создать виртуальную среду Python. Это позволяет вам устанавливать пакеты Python, не затрагивая систему.
Давайте создадим каталог демонстрационного проекта.
$ 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.1.2
В зависимости от требований вашего проекта, вы можете установить другую версию Django следующим образом.
(sample_env) $ pip install django==3.2.1
Проверьте установку.
(sample_env) $ django-admin --version
3.2.1
Как вы можете видеть, этот метод устанавливает более новую версию Django, чем версия, полученная из репозитория Rocky Linux.
Чтобы выйти из виртуальной среды, выполните следующую команду.
(sample_env) $ deactivate
Установка версии разработки
Вы также можете использовать pip для установки версии разработки Django. Для этого мы получим версию разработки из репозитория Github Django.
Клонируйте репозиторий в каталог ~/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.dev20221012095013
Как вы можете видеть, версия здесь является последней версией разработки. Версия разработки Django не полезна для производственных сред.
Шаг 5 - Создание образца проекта
Давайте создадим образец проекта Django. Создайте каталог для образца проекта.
$ mkdir ~/dj-sample
$ cd ~/dj-sample
Создайте виртуальную среду Python.
$ python3 -m venv sample_proj
Активируйте среду.
$ source sample_proj/bin/activate
Установите пакет Wheel.
(sample_proj) $ pip install wheel
Установите Django и необходимые пакеты.
(sample_proj) $ pip install django psycopg2 psycopg2-binary
Чтобы создать проект, нам нужно использовать команду startproject. Эта команда создает другой каталог, который включает:
- Скрипт управления,
manage.py, используемый для администрирования задач, специфичных для Django. - Каталог с тем же именем, что и проект, который включает код проекта.
Мы создадим каталог проекта в нашем текущем рабочем каталоге. Для этого используйте символ точки (.) в конце следующей команды.
(sample_proj) $ django-admin startproject demoproject .
Django использует переменную SECRET_KEY для обеспечения криптографической подписи. Он генерирует значение по умолчанию во время установки. Вам следует заменить его на безопасное значение. Выполните следующую команду, чтобы сгенерировать ключ и скопировать его для дальнейшего использования.
(sample_proj) $ python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
Вы получите следующий вывод с ключом.
wm#dzb^ymuo3s3tza=f5cx^kan!$4sch1!b-q=v%)=d0pb(jqf
Первый шаг — настроить параметры проекта. Откройте файл настроек для редактирования.
(sample_proj) $ nano demoproject/settings.py
Замените текущее значение переменной SECRET_KEY на сгенерированный вами ключ.
SECRET_KEY = 's)3m=4s&!a=p#brttcqu@1s$8(z6e+u8(^tkpw28qyj0t#8ku2'
Измените параметры для раздела DATABASES следующим образом.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'DATABASE_DB',
'USER': 'DATABASE_USER',
'PASSWORD': 'DATABASE_PASSWORD',
'HOST': 'DATABASE_HOST',
'PORT': 'DATABASE_PORT',
},
}
Затем перейдите в конец файла и добавьте настройку для расположения статических файлов. Это важно для работы Nginx и обработки запросов на эти файлы. Добавьте следующую строку выше переменной STATIC_URL.
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
Поскольку переменная STATIC_ROOT использует модуль os, нам нужно импортировать его, так как он не импортируется по умолчанию. Добавьте следующую строку выше строки from pathlib import Path.
import os
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.
Проверьте настройки базы данных.
(sample_proj) $ python manage.py check --database default
Вы должны получить следующий вывод.
System check identified no issues (0 silenced).
Далее нам нужно выполнить миграцию базы данных с помощью команды migrate. Миграции в Django переносят изменения, которые вы вносите в свои модели, в схему базы данных.
(sample_proj) $ python manage.py makemigrations
(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.
Скопируйте статические файлы в статический каталог. Введите yes, когда будет предложено.
(sample_proj) $ python manage.py collectstatic
130 static files copied to '/home/navjot/dj-sample/static'.
Шаг 6 - Тестирование сервера разработки
Пришло время протестировать приложение. Для этого вам нужно изменить директиву 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 firewall-cmd --add-port=8000/tcp --permanent
(sample_proj) $ sudo firewall-cmd --reload
Запустите сервер разработки.
(sample_proj) $ python manage.py runserver 0.0.0.0:8000
Запустите URL http:// в вашем браузере, и вы увидите следующий экран.

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

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

Когда вы закончите с вашим демонстрационным проектом, вы можете закрыть сервер, нажав Ctrl + C в вашем терминале.
Шаг 7 - Установка и тестирование 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 153474 1.6 3.9 46264 39016 pts/0 S 04:15 0:00 python manage.py runserver 0.0.0.0:8000
navjot 153475 3.0 4.4 196060 43500 pts/0 Sl 04:15 0:00 /home/navjot/dj-sample/sample_proj/bin/python manage.py runserver 0.0.0.0:8000
navjot 153483 0.0 0.2 6420 2248 pts/0 S+ 04:15 0:00 grep --color=auto manage.py
Как вы можете видеть, выполняются два процесса, один с идентификатором 153474 и другой с идентификатором 153475.
Выполните следующую команду, чтобы остановить сервер, используя идентификаторы процессов, которые вы получили выше.
(sample_proj) $ sudo kill -9 153474 153475
Установка Gunicorn
Второй метод для запуска постоянного сервера Django требует установки Gunicorn и веб-серверов Nginx. Gunicorn — это Python WSGI HTTP сервер. Он будет взаимодействовать с приложением Django, а затем Nginx будет действовать как обратный прокси для Gunicorn. Этот метод имеет дополнительное преимущество в обеспечении безопасности и производительности, которые предоставляет использование Nginx.
Установите Gunicorn.
(sample_proj) $ pip install gunicorn
Перед тем как продолжить, нам нужно протестировать способность Gunicorn обслуживать проект. Выполните следующую команду, чтобы запустить Gunicorn.
(sample_proj) $ gunicorn --bind 0.0.0.0:8000 demoproject.wsgi:application
Это запустит Gunicorn на том же интерфейсе, на котором работал Django. Чтобы проверить, откройте URL http:// в вашем браузере, и вы увидите ту же домашнюю страницу Django. Это означает, что Gunicorn работает идеально.
Когда вы закончите тестирование, нажмите Ctrl + C в терминале, чтобы выйти из Gunicorn.
Деактивируйте виртуальную среду, чтобы вернуться к вашей обычной оболочке.
(sample_proj) $ deactivate
Шаг 8 - Создание сокета и файла службы для Gunicorn
Первый шаг — создать файл сокета Gunicorn. Сокет Gunicorn будет создан при загрузке и слушать подключения. Когда происходит подключение, systemd автоматически запустит процесс 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 \
-t 3000 \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
demoproject.wsgi:application -w 2
[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; enabled; vendor preset: disabled)
Active: active (listening) since Thu 2022-10-13 04:19:28 UTC; 14s ago
Until: Thu 2022-10-13 04:19:28 UTC; 14s ago
Triggers: ? gunicorn.service
Listen: /run/gunicorn.sock (Stream)
CGroup: /system.slice/gunicorn.socket
Oct 13 04:19:28 django.nspeaks.xyz 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: disabled)
Active: active (running) since Thu 2022-10-13 06:13:55 UTC; 1min 34s ago
TriggeredBy: ? gunicorn.socket
Main PID: 157742 (gunicorn)
Tasks: 4 (limit: 5915)
Memory: 96.2M
CPU: 1.198s
CGroup: /system.slice/gunicorn.service
??157742 /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 -w 2
??157746 /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 -w 2
??157747 /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 -w 2
??157748 /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 -w 2
.......
Шаг 9 - Установка Nginx
Последний шаг — установить и настроить Nginx. Rocky Linux поставляется со старой версией Nginx. Вам нужно загрузить официальный репозиторий Nginx, чтобы установить последнюю версию.
Создайте и откройте файл /etc/yum.repos.d/nginx.repo для создания официального репозитория Nginx.
$ sudo nano /etc/yum.repos.d/nginx.repo
Вставьте следующий код в него.
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено.
Установите сервер Nginx.
$ sudo dnf install nginx -y
Проверьте установку.
$ nginx -v
nginx version: nginx/1.22.1
Включите и запустите сервер Nginx.
$ sudo systemctl enable nginx --now
Проверьте статус сервера.
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2022-10-13 06:17:24 UTC; 1s ago
Docs: http://nginx.org/en/docs/
Process: 157900 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 157901 (nginx)
Tasks: 2 (limit: 5915)
Memory: 1.9M
CPU: 18ms
CGroup: /system.slice/nginx.service
??157901 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??157902 "nginx: worker process"
Oct 13 06:17:24 django.example.com systemd[1]: Starting nginx - high performance web server...
Шаг 10 - Установка SSL
До сих пор ваше приложение Django обслуживается через незашифрованное HTTP-соединение. Настоятельно рекомендуется защитить его с помощью SSL-сертификата. Для этого используйте инструмент Certbot с помощью инструмента Snapd. Он требует репозиторий EPEL для работы.
$ sudo dnf install epel-release
Мы будем использовать Snapd для установки Certbot. Установите Snapd.
$ sudo dnf install snapd
Включите и запустите службу Snap.
$ sudo systemctl enable snapd.socket --now
Создайте необходимые ссылки для работы Snapd.
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Установите основной репозиторий Snapd.
$ sudo snap install core
$ sudo snap refresh core
Установите Certbot.
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Сгенерируйте сертификат. Следующая команда также автоматически настроит Nginx.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d django.example.com
Вышеуказанная команда загрузит сертификат в каталог /etc/letsencrypt/live/django.example.com на вашем сервере.
Сгенерируйте сертификат Diffie-Hellman group.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Чтобы проверить, работает ли автоматическое обновление SSL, выполните пробный запуск процесса.
$ sudo certbot renew --dry-run
Если вы не видите ошибок, значит, все готово. Ваш сертификат будет автоматически обновляться.
Шаг 11 - Настройка Nginx
Создайте и откройте файл /etc/nginx/conf.d/django-gunicorn.conf для редактирования.
$ sudo nano /etc/nginx/conf.d/django-gunicorn.conf
Вставьте следующий код в него.
# enforce HTTPS
server {
listen 80 default_server;
server_name django.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name django.example.com;
access_log /var/log/nginx/django.access.log;
error_log /var/log/nginx/django.error.log;
http2_push_preload on; # Enable HTTP/2 Server Push
ssl_certificate /etc/letsencrypt/live/django.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/django.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/django.example.com/chain.pem;
ssl_session_timeout 1d;
# Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
ssl_protocols TLSv1.2 TLSv1.3;
# Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
# prevent replay attacks.
#
# @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
ssl_early_data on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
add_header X-Early-Data $tls1_3_early_data;
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;
}
}
# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
"~." $ssl_early_data;
default "";
}
Замените корневое расположение в вышеуказанном файле на каталог на вашем сервере.
Сохраните файл, нажав 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 reload nginx
Откройте HTTP-порт. Вы также можете удалить порт 8000, если больше не собираетесь его использовать.
$ sudo firewall-cmd --remove-port=8000/tcp --permanent
$ sudo firewall-cmd --reload
Проверьте, открыв URL http://django.example.com, и домашняя страница Django загрузится.
Заключение
Это завершает наше руководство, в котором вы узнали, как установить Django вместе с Gunicorn и Nginx на сервер Rocky Linux 9. Вы также установили SSL-сертификат для повышения безопасности вашего проекта Django. Если у вас есть вопросы, оставляйте их в комментариях ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.