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

Как установить Django Python Framework на CentOS 8


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

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

Django — это бесплатная высокоуровневая веб-инфраструктура с открытым исходным кодом, используемая для разработки веб-приложений Python. Он поставляется с набором инструментов, которые помогут вам создавать безопасные и масштабируемые веб-приложения. Его основная цель — упростить создание сложных приложений и заботиться о внутренней структуре.

В этом руководстве мы узнаем, как установить Django и настроить Nginx в качестве обратного прокси-сервера для Django в CentOS 8.

Предпосылки

  • Сервер под управлением CentOS 8.
  • На вашем сервере настроен пароль root.

Установите необходимые пакеты

Django — это фреймворк на основе Python, поэтому вам потребуется установить Python и PIP в вашей системе. Вы можете установить их, выполнив следующую команду:

dnf install python36 python3-pip -y

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

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

Вы можете установить Django с помощью команды PIP, как показано ниже:

pip3 install Django

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

django-admin --version

Вы должны увидеть версию Django в следующем выводе:

3.0.3

Создать проект Джанго

На данный момент Django установлен. Теперь пришло время создать новое приложение Django.

Вы можете создать новое приложение Django с помощью команды django-admin внутри каталога /opt, как показано ниже:

cd /opt
django-admin startproject djangoproject

После создания проекта django измените каталог на djangoproject и перенесите изменения с помощью следующей команды:

cd djangoproject
python3 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 sessions.0001_initial... OK

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

python3 manage.py createsuperuser

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

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

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

Запустить приложение Джанго

По умолчанию к приложению Django нельзя получить доступ с удаленных хостов. Поэтому вам нужно будет разрешить Django для внешних хостов. Вы можете сделать это, добавив IP-адрес вашего сервера в settings.py:

nano /opt/djangoproject/djangoproject/settings.py

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

ALLOWED_HOSTS = ['your-server-ip']

Сохраните и закройте файл. Затем запустите приложение Django с помощью следующей команды:

cd /opt/djangoproject
python3 manage.py runserver 0.0.0.0:8000

Вы должны увидеть следующий вывод:

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

System check identified no issues (0 silenced).
March 03, 2020 - 02:31:19
Django version 3.0.3, using settings 'djangoproject.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Django application is now started and runs on port 8000. 

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

Настройте SELinux и брандмауэр

Далее вам нужно будет разрешить порты 8000 и 80 через firewalld. Вы можете разрешить их с помощью следующей команды:

firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

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

setsebool httpd_can_network_connect on -P

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

Доступ к приложению Django

Вы можете получить доступ к приложению Django, посетив URL-адрес http://your-server-ip:8000. Вы должны увидеть следующую страницу:

Вы также можете получить доступ к административному интерфейсу Django, используя URL-адрес http://your-server-ip:8000/admin. Вы должны увидеть следующую страницу:

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

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

В этом разделе мы установим Gunicorn для создания и управления сервисом Django и Nginx для обслуживания приложения Django.

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

dnf install nginx -y

Затем установите Gunicorn с помощью команды PIP, как показано ниже:

pip3 install gunicorn

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

systemctl start nginx
systemctl enable nginx

Затем измените владельца каталога /opt/djangoproject на Nginx, как показано ниже:

chown -R nginx:nginx /opt/djangoproject

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

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

nano /etc/systemd/system/django.service

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

[Unit]
Description=django daemon
After=network.target

[Service]
User=nginx
Group=nginx
WorkingDirectory=/opt/djangoproject
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application

[Install]
WantedBy=multi-user.target

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

systemctl daemon-reload

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

systemctl start django
systemctl enable django

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

systemctl status django

Вы должны увидеть следующий вывод:

? django.service - django daemon
   Loaded: loaded (/etc/systemd/system/django.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-02 22:27:51 EST; 3min 32s ago
 Main PID: 960 (django)
    Tasks: 4 (limit: 25028)
   Memory: 95.2M
   CGroup: /system.slice/django.service
           ??960 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??964 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??965 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??966 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>

Mar 02 22:27:51 centos8 systemd[1]: Started django daemon.
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Starting django 20.0.4
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Listening at: unix:/opt/djangoproject/djangoproject.sock (960)
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Using worker: sync
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [964] [INFO] Booting worker with pid: 964
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [965] [INFO] Booting worker with pid: 965
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [966] [INFO] Booting worker with pid: 966
h pid: 966

Настроить Nginx для Django

Далее вам нужно будет настроить Nginx в качестве обратного прокси для Django. Для этого создайте новый файл конфигурации Nginx с помощью следующей команды:

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

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

server {
    listen 80;
    server_name your-server-ip

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /opt/djangoproject;
    }

    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:/opt/djangoproject/djangoproject.sock;
    }
}

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

nginx -t

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

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

Затем перезапустите службу Nginx, чтобы изменения вступили в силу:

systemctl start nginx

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

systemctl status nginx

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

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-02 22:28:13 EST; 4min 14s ago
  Process: 984 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 982 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 980 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 985 (nginx)
    Tasks: 3 (limit: 25028)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??985 nginx: master process /usr/sbin/nginx
           ??986 nginx: worker process
           ??987 nginx: worker process

Mar 02 22:28:12 centos8 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 02 22:28:12 centos8 nginx[982]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Mar 02 22:28:12 centos8 nginx[982]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Mar 02 22:28:13 centos8 systemd[1]: Started The nginx HTTP and reverse proxy server.

Теперь вы можете получить доступ к своему приложению Django, используя URL-адрес http://your-server-ip.

Заключение

В этом руководстве мы узнали, как установить Django на CentOS 8. Мы также узнали, как использовать Gunicorn для создания службы Django и управления ею, а также настроить Nginx в качестве обратного прокси-сервера для обслуживания приложения Django.