Introducción
Django es un marco web gratuito, de código abierto y de alto nivel que se utiliza para desarrollar aplicaciones web Python. Viene con un conjunto de herramientas que le permite crear aplicaciones web seguras y escalables. Su principal objetivo es facilitar la creación de aplicaciones complejas y cuidar la estructura interna.
En este tutorial aprenderemos cómo instalar Django y configurar Nginx como un proxy inverso para Django en CentOS 8.
Prerrequisitos
- Un servidor que ejecuta CentOS 8.
- Un usuario no root con privilegios sudo.
Si desea instalar Django Python Framework en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectando al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Instalar Python y PIP
Django es un marco basado en Python, por lo que deberá instalar Python y PIP en su sistema. También instalaremos el editor de texto nano-terminal para facilitar la edición de archivos; de lo contrario, puede usar vi instalado por defecto en su sistema. Puede instalarlos ejecutando el siguiente comando:
sudo dnf install nano python36 python3-pip -y
Una vez instalados ambos paquetes, puede continuar con el siguiente paso.
Instalar Django
Puede instalar Django con el comando PIP como se muestra a continuación:
sudo 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.4
Crea un proyecto de 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 django-admin
en el /opt
como se muestra a continuación:
cd /opt
django-admin startproject djangoproject
Una vez creado el proyecto django, cambie el directorio a djangoproject y migre los cambios con los siguientes comandos:
cd djangoproject
sudo python3 manage.py migrate
Debería recibir un mensaje de salida similar al siguiente:
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 la gestión de proyectos de Django. Puedes crearlo con el siguiente comando:
sudo python3 manage.py createsuperuser
Se le pedirá que proporcione su nombre de usuario, correo electrónico y contraseña. Puede suministrarlos según su elección como se muestra a continuación:
Username (leave blank to use 'root'): noviello
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.
Cuando termine, puede continuar con el siguiente paso.
Inicie la aplicación Django
De forma predeterminada, no se puede acceder a la aplicación Django desde hosts remotos. Por lo tanto, deberá permitir Django para hosts externos. Puede hacer esto agregando la IP de su servidor o el nombre de dominio en el archivo settings.py
sudo nano /opt/djangoproject/djangoproject/settings.py
Cambie la siguiente línea:
ALLOWED_HOSTS = ['tuo_dominio_o_Ip']
Guarde y cierre el archivo. Luego, inicie la aplicación Django con los siguientes comandos:
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 25, 2020 - 22:37:03
Django version 3.0.4, using settings 'djangoproject.settings'
Starting development server at http://0.0.0.0:8000/Quit the server with CONTROL-C.
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 (opcional)
A continuación, si tiene el firewall CentOs activo, deberá permitir los puertos 8000
y 80
través de firewalld. Puede permitirlos con los siguientes comandos:
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
Luego, configure SELinux con el siguiente comando:
sudo setsebool httpd_can_network_connect on -P
Cuando termine, puede continuar con el siguiente paso.
Inicie sesión en la aplicación Django
Puede acceder a la aplicación Django visitando la URL https://tuo_dominio_o_ip:8000
. Debería ver la siguiente página:
También puede iniciar sesión en la interfaz de administración de Django usando la URL https://tuo_dominio_o_ip:8000/admin
. Debería ver la siguiente página:
Proporcione el nombre de usuario y la contraseña del administrador y haga clic en el botón Iniciar sesión.
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:
sudo dnf install nginx -y
Luego, instale Gunicorn usando el comando PIP como se muestra a continuación:
sudo 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:
sudo systemctl start
sudo systemctl enable nginx
A continuación, cambie la propiedad del /opt/djangoproject
a Nginx como se muestra a continuación:
sudo chown -R nginx:nginx /opt/djangoproject
Crea un archivo de servicio Systemd para Django
A continuación, cree un archivo de servicio systemd para la gestión de servicios de Django con el siguiente comando:
sudo nano /etc/systemd/system/django.service
Agrega 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:
sudo systemctl daemon-reload
Luego, inicie el servicio Django y habilítelo para que se inicie después de reiniciar el sistema con el siguiente comando:
sudo systemctl start django
sudo systemctl enable django
Ahora puede verificar el estado del servicio Django con el siguiente comando:
sudo systemctl status django
Debería ver el siguiente resultado:
● django.service - django daemon
Loaded: loaded (/etc/systemd/system/django.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-03-25 23:49:52 CET; 13s ago
Main PID: 4196 (gunicorn)
Tasks: 4 (limit: 12251)
Memory: 92.6M
CGroup: /system.slice/django.service
├─4196 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application
├─4199 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application
├─4200 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application
└─4202 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application
Configurar Nginx para Django
A continuación, deberá configurar Nginx como un proxy inverso para Django. Para hacer esto, cree un nuevo archivo de configuración de Nginx con el siguiente comando:
sudo nano /etc/nginx/conf.d/django.conf
Agrega las siguientes líneas:
server {
listen 80;
server_name tuo_dominio_o_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 termine. Por lo tanto, pruebe nginx en busca de errores de sintaxis con el siguiente comando:
sudo nginx -t
Con suerte, 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
Luego, reinicie el servicio Nginx para implementar los cambios:
sudo systemctl start nginx
También puede verificar Nginx con el siguiente comando:
sudo systemctl status nginx
Debería obtener el siguiente resultado:
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-03-25 23:53:07 CET; 9s ago
Process: 4295 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 4293 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 4292 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 4297 (nginx)
Tasks: 2 (limit: 12251)
Memory: 3.9M
CGroup: /system.slice/nginx.service
├─4297 nginx: master process /usr/sbin/nginx
└─4298 nginx: worker process
Ahora puede acceder a su aplicación Django usando la URL http://tuo_dominio_o_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.