Django es un marco web de alto nivel gratuito y de código abierto que se utiliza para desarrollar aplicaciones web de Python. Django 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 mantener la estructura interna.
En este tutorial, aprenderemos cómo instalar Django y configurar Nginx como proxy inverso para Django en Rocky Linux 8 y CentOS 8.
Condición previa
- Servidor con sistema operativo CentOS 8.
- Inicie sesión como root o usuario con privilegios sudo
Instalar paquetes requeridos
Django es un marco basado en Python, por lo que debe instalar Python y PIP en su sistema. Para poder instalarlo, ejecute el siguiente comando:
dnf install python36 python3-pip -y
Una vez que ambos paquetes estén instalados, continúe con el siguiente paso.
Instalar Django en Rocky Linux 8
Puede instalar Django con el comando PIP como se muestra a continuación:
pip3 install Django
Después de instalar Django, verifique la versión de Django con el siguiente comando:
django-admin --version
Verá la versión de Django en el siguiente resultado:
3.0.3
al momento de escribir este artículo, la versión de Django es la versión 3.0.3
Crea un proyecto Django
En este punto, Django se ha instalado con éxito. Ahora es el momento de crear una aplicación Django.
Puede crear aplicaciones Django usando el comando django-admin en el directorio /opt
como se muestra a continuación:
cd /opt
django-admin startproject djangoproject
Una vez que se crea el proyecto django, cambie el directorio a djangoproject
y migre los cambios con el siguiente comando:
cd djangoproject
python3 manage.py migrate
Obtendrá 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, debe crear una cuenta de usuario administrador para administrar su proyecto Django con el siguiente comando:
python3 manage.py createsuperuser
Se le pedirá que proporcione su nombre de usuario, correo electrónico y contraseña. Puede proporcionarlo 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 hecho esto, puede pasar al siguiente paso.
Inicie la aplicación Django
De forma predeterminada, solo se puede acceder a las aplicaciones de Django desde localhost, para que Django se conecte a Internet, debe permitir Django para hosts externos. Puede hacerlo agregando la IP de su servidor en IP settings.py:
nano /opt/djangoproject/djangoproject/settings.py
Cambie la siguiente línea:
ALLOWED_HOSTS = ['ip_server_Anda']
Guarde y cierre el archivo. Luego, ejecute la aplicación Django con el siguiente comando:
cd /opt/djangoproject
python3 manage.py runserver 0.0.0.0:8000
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 está funcionando en el puerto 8000. Ahora puede pasar al siguiente paso.
Configurar SELinux y Firewall en Rocky Linux 8
A continuación, debe permitir los puertos 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 hecho esto, puede pasar al siguiente paso.
Acceder a las aplicaciones de Django
Puede acceder a la aplicación Django visitando la URL http://your-server-ip:8000. Verá la siguiente página:
También puede acceder a la interfaz de administración de Django usando la URL http://server-ip:8000/admin. 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 en . Verá la siguiente página:
Instalar Nginx y Gunicorn en Rocky Linux 8
En esta sección, instalaremos Gunicorn para crear y administrar servicios Django y Nginx para servir aplicaciones 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 servicio de sistema de archivos para Django
A continuación, cree un archivo de servicio systemd para administrar los servicios de Django con el siguiente comando:
nano /etc/systemd/system/django.service
Agregue la siguiente línea:
[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
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 UTC; 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, configure 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 la siguiente línea:
server { listen 80; server_name your-server-ip location =https://cdn.linuxid.net/favicon.ico?x87109 { 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 nginx en busca de errores de sintaxis con el siguiente comando:
nginx -t
Si no hay errores, aparecerá 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 Nginx con el siguiente comando:
systemctl status nginx
Obtendrá 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 las aplicaciones de Django utilizando la URL http://server_IP_address.
Conclusión
En esta guía, aprendimos a instalar Django en Rocky Linux 8 y CentOS 8. También aprendimos a usar Gunicorn para crear y administrar servicios Django y configurar Nginx como un proxy inverso para servir aplicaciones Django.