Cómo instalar Django Python Framework en CentOS 8

Aplicación Django

Django es un marco web gratuito, de código abierto y de alto nivel que se utiliza para desarrollar aplicaciones web de Python. Viene con un conjunto de herramientas que lo ayudan a crear aplicaciones web seguras y escalables. Su objetivo principal es facilitar la creación de aplicaciones complejas y cuida la estructura interna.

En este tutorial, aprenderemos cómo instalar Django y configurar Nginx como proxy inverso para Django en CentOS 8.

requisitos previos

  • Un servidor que ejecuta CentOS 8.
  • Una contrase√Īa de root est√° configurada en su servidor.

Instalar los paquetes necesarios

Django es un marco basado en Python, por lo que deber√° instalar Python y PIP en su sistema. Puede instalarlos ejecutando el siguiente comando:

dnf install python36 python3-pip -y

Una vez que ambos paquetes estén instalados, puede continuar con el siguiente paso.

Instalar Django

Puede instalar Django con el comando PIP como se muestra a continuación:

pip3 install Django

Después de instalar Django, puede verificar la versión de Django con el siguiente comando:

django-admin --version

Debería ver la versión de Django en el siguiente resultado:

3.0.3

Crear un proyecto Django

En este punto, Django está instalado. Ahora es el momento de crear una nueva aplicación Django.

Puede crear una nueva aplicación Django usando el comando django-admin dentro del directorio /opt como se muestra a continuación:

cd /opt
django-admin startproject djangoproject

Una vez que se haya creado el proyecto django, cambie el directorio a djangoproject y migre los cambios con el siguiente comando:

cd djangoproject
python3 manage.py migrate

Deberías obtener el siguiente resultado:

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

A continuación, deberá crear una cuenta de usuario administrador para administrar el proyecto Django. Puedes crearlo con el siguiente comando:

python3 manage.py createsuperuser

Se le pedir√° que proporcione su nombre de usuario, correo electr√≥nico y contrase√Īa. Puede proporcionarlos seg√ļn su elecci√≥n, como se muestra a continuaci√≥n:

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

Una vez que haya terminado, puede continuar con el siguiente paso.

Iniciar la aplicación Django

De forma predeterminada, no se puede acceder a la aplicación Django desde los hosts remotos. Por lo tanto, deberá permitir Django para hosts externos. Puedes hacerlo agregando la IP de tu servidor en settings.py:

nano /opt/djangoproject/djangoproject/settings.py

Cambia la siguiente línea:

ALLOWED_HOSTS = ['your-server-ip']

Guarde y cierre el archivo. Luego, inicie la aplicación Django con el siguiente comando:

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

Debería ver el siguiente resultado:

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. 

En este punto, la aplicación Django ahora se inicia y se ejecuta en el puerto 8000. Ahora puede continuar con el siguiente paso.

Configurar SELinux y Firewall

A continuación, deberá permitir el puerto 8000 y 80 a través de firewalld. Puede permitirlos con el siguiente comando:

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

A continuación, configure SELinux con el siguiente comando:

setsebool httpd_can_network_connect on -P

Una vez que haya terminado, puede continuar con el siguiente paso.

Acceder a la aplicación Django

Puede acceder a la aplicación Django visitando la URL http://your-server-ip:8000. Deberías ver la siguiente página:

Aplicación Django

También puede acceder a la interfaz de administración de Django usando la URL http://your-server-ip:8000/admin. Debería ver la siguiente página: Anuncio

Inicio de sesión de administrador de Django

Proporcione su nombre de usuario y contrase√Īa de administrador y haga clic en el Tronco en bot√≥n. Deber√≠as ver la siguiente p√°gina:

Panel de administración de Django

Instalar Nginx y Gunicorn

En esta sección, instalaremos Gunicorn para crear y administrar el servicio Django y Nginx para servir la aplicación Django.

Primero, instale Nginx con el siguiente comando:

dnf install nginx -y

Luego, instale Gunicorn usando el comando PIP como se muestra a continuación:

pip3 install gunicorn

Una vez que ambos paquetes estén instalados, inicie el servicio Nginx y habilítelo para que se inicie después de reiniciar el sistema con el siguiente comando:

systemctl start nginx
systemctl enable nginx

A continuación, cambie la propiedad del directorio /opt/djangoproject a Nginx como se muestra a continuación:

chown -R nginx:nginx /opt/djangoproject

Crear un archivo de servicio de Systemd para Django

A continuación, cree un archivo de servicio systemd para administrar el servicio Django con el siguiente comando:

nano /etc/systemd/system/django.service

Agregue las siguientes líneas:

[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

Guarde y cierre el archivo, luego vuelva a cargar el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicie el servicio Django y habilítelo para que se inicie después de reiniciar el sistema con el siguiente comando:

systemctl start django
systemctl enable django

Ahora puede verificar el estado del servicio Django con el siguiente comando:

systemctl status django

Debería ver el siguiente resultado:

? 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

Configurar Nginx para Django

A continuación, deberá configurar Nginx como un proxy inverso para Django. Para hacerlo, cree un nuevo archivo de configuración de Nginx con el siguiente comando:

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

Agregue las siguientes líneas:

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;
    }
}

Guarde y cierre el archivo cuando haya terminado. Luego, pruebe el nginx para detectar cualquier error de sintaxis con el siguiente comando:

nginx -t

Si todo está bien, debería obtener el siguiente resultado:

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

A continuación, reinicie el servicio Nginx para implementar los cambios:

systemctl start nginx

También puede verificar el Nginx con el siguiente comando:

systemctl status nginx

Deberías obtener el siguiente resultado:

? 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.

Ahora puede acceder a su aplicación Django usando la URL http://your-server-ip.

Conclusión

En esta guía, aprendimos cómo instalar Django en CentOS 8. También aprendimos cómo usar Gunicorn para crear y administrar el servicio Django y configurar Nginx como un proxy inverso para servir la aplicación Django.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *