Cómo instalar Django Python Framework en CentOS 8
Django es un marco web gratuito, de código abierto y de alto nivel utilizado para desarrollar aplicaciones web en Python. Viene con un conjunto de herramientas que te ayudan a construir aplicaciones web seguras y escalables. Su principal objetivo es facilitar la creación de aplicaciones complejas y se encarga de la estructura interna.
En este tutorial, aprenderemos a instalar Django y a configurar Nginx como proxy inverso para Django en CentOS 8.
Requisitos previos
- Un servidor con CentOS 8.
- Una contraseña de root configurada en tu servidor.
Instalar los paquetes necesarios
Django es un framework basado en Python, por lo que necesitarás instalar Python y PIP en tu sistema. Puedes instalarlos ejecutando el siguiente comando:
dnf install python36 python3-pip -y
Una vez instalados ambos paquetes, puedes pasar al siguiente paso.
Instalar Django
Puedes instalar Django con el comando PIP como se muestra a continuación:
pip3 install Django
Después de instalar Django, puedes comprobar la versión de Django con el siguiente comando:
django-admin --version
Deberías ver la versión de Django en la siguiente salida:
3.0.3
Crear un proyecto Django
En este punto, Django está instalado. Ahora, es el momento de crear una nueva aplicación Django.
Puedes crear una nueva aplicación Django utilizando el comando django-admin dentro del directorio /opt, como se muestra a continuación:
cd /opt
django-admin startproject djangoproject
Una vez creado el proyecto django, cambia el directorio a djangoproject y migra los cambios con el siguiente comando:
cd djangoproject
python3 manage.py migrate
Deberías obtener la siguiente salida:
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, tendrás que crear una cuenta de usuario administrador para gestionar el proyecto Django. Puedes crearla con el siguiente comando:
python3 manage.py createsuperuser
Se te pedirá que proporciones tu nombre de usuario, correo electrónico y contraseña. Puedes proporcionarlos según tu 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 hayas terminado, puedes pasar al siguiente paso.
Iniciar la aplicación Django
Por defecto, no se puede acceder a la aplicación Django desde los hosts remotos. Así que tendrás que permitir Django para los hosts externos. Puedes hacerlo añadiendo la IP de tu servidor en settings.py:
nano /opt/djangoproject/djangoproject/settings.py
Cambia la siguiente línea:
ALLOWED_HOSTS = ['your-server-ip']
Guarda y cierra el archivo. A continuación, inicia la aplicación Django con el siguiente comando:
cd /opt/djangoproject
python3 manage.py runserver 0.0.0.0:8000
Deberías ver la siguiente salida:
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 ya está iniciada y se ejecuta en el puerto 8000. Ahora puedes pasar al siguiente paso.
Configurar SELinux y el cortafuegos
A continuación, tendrás que permitir el puerto 8000 y 80 a través de firewalld. Puedes 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, configura SELinux con el siguiente comando:
setsebool httpd_can_network_connect on -P
Una vez que hayas terminado, puedes pasar al siguiente paso.
Acceder a la aplicación Django
Puedes acceder a la aplicación Django visitando la URL http://your-server-ip:8000. Deberías ver la siguiente página:
También puedes acceder a la interfaz de administración de Django utilizando la URL http://your-server-ip:8000/admin. Deberías ver la siguiente página:
Proporciona tu nombre de usuario y contraseña de administrador y haz clic en el botón Iniciar sesión. Deberías ver la siguiente página:
Instalar Nginx y Gunicorn
En esta sección, instalaremos Gunicorn para crear y gestionar el servicio Django, y Nginx para servir la aplicación Django.
Primero, instala Nginx con el siguiente comando:
dnf install nginx -y
A continuación, instala Gunicorn con el comando PIP como se muestra a continuación:
pip3 install gunicorn
Una vez instalados ambos paquetes, inicia el servicio Nginx y permite que se inicie tras el reinicio del sistema con el siguiente comando:
systemctl start nginx
systemctl enable nginx
A continuación, cambia la propiedad del directorio /opt/djangoproject a Nginx como se muestra a continuación:
chown -R nginx:nginx /opt/djangoproject
Crea un archivo de servicio Systemd para Django
A continuación, crea un archivo de servicio systemd para gestionar el servicio Django con el siguiente comando:
nano /etc/systemd/system/django.service
Añade 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
Guarda y cierra el archivo y luego recarga el demonio systemd con el siguiente comando:
systemctl daemon-reload
A continuación, inicia el servicio Django y permite que se inicie tras el reinicio del sistema con el siguiente comando:
systemctl start django
systemctl enable django
Ahora puedes comprobar el estado del servicio Django con el siguiente comando:
systemctl status django
Deberías ver la siguiente salida:
? 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, tendrás que configurar Nginx como proxy inverso para Django. Para ello, crea un nuevo archivo de configuración de Nginx con el siguiente comando
nano /etc/nginx/conf.d/django.conf
Añade 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; } }
Guarda y cierra el archivo cuando hayas terminado. A continuación, comprueba que el nginx no tiene ningún error de sintaxis con el siguiente comando
nginx -t
Si todo está bien, deberías obtener la siguiente salida:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
A continuación, reinicia el servicio Nginx para aplicar los cambios:
systemctl start nginx
También puedes verificar el Nginx con el siguiente comando:
systemctl status nginx
Deberías obtener la siguiente salida:
? 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 puedes acceder a tu aplicación Django utilizando la URL http://your-server-ip.
Conclusión
En esta guía hemos aprendido a instalar Django en CentOS 8. También hemos aprendido a utilizar Gunicorn para crear y gestionar el servicio Django y a configurar Nginx como proxy inverso para servir la aplicación Django.