Cómo instalar Django Framework en Debian 11

Inicio de sesión en Django

Django es un marco de desarrollo web gratuito y de código abierto escrito en Python. Se utiliza para desarrollar aplicaciones de Python complejas y basadas en bases de datos. Viene con un conjunto de scripts de Python para crear proyectos de Python. Se puede ejecutar en cualquier sistema operativo que pueda ejecutar Python, incluidos Windows, macOS, Linux/Unix y Solaris. Ayuda a los desarrolladores a escribir menos código y crear un nuevo sitio web en poco tiempo.

En este tutorial, explicaré cómo configurar Django en el entorno virtual de Python usando la base de datos PostgreSQL en Debian 11. Luego instalaremos y configuraremos Nginx como un proxy inverso para Django.

requisitos previos

  • Un servidor que ejecuta Debian 11.
  • Un nombre de dominio v√°lido apuntado con la IP de su servidor.
  • Una contrase√Īa de root est√° configurada en el servidor.

Empezando

Antes de comenzar, es una buena idea actualizar los paquetes de su sistema a la √ļltima versi√≥n. Puedes hacerlo usando el siguiente comando:

apt-get update -y

Una vez que todos los paquetes estén actualizados, instale otras herramientas de Python y el paquete Nginx con el siguiente comando:

apt-get install python3-pip python3-dev libpq-dev curl nginx -y

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

Instalar servidor de base de datos PostgreSQL

Aquí, usaremos PostgreSQL como base de datos. Así que vamos a instalarlo usando el siguiente comando:

apt-get install postgresql postgresql-contrib -y

Una vez que PostgreSQL esté instalado, conéctese al shell de PostgreSQL con el siguiente comando:

su - postgres
psql

A continuación, cree una base de datos y un usuario para Django con el siguiente comando:

CREATE DATABASE django;
CREATE USER django WITH PASSWORD 'password';

A continuación, otorgue algunos roles requeridos con el siguiente comando:

ALTER ROLE django SET client_encoding TO 'utf8';
ALTER ROLE django SET default_transaction_isolation TO 'read committed';
ALTER ROLE django SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE django TO django;

Luego, salga del shell de PostgreSQL usando el siguiente comando:

\q
exit

En este punto, la base de datos PostgreSQL est√° lista para Django. Ahora puede continuar con el siguiente paso.

Crear un entorno virtual de Python

A continuación, deberá crear un entorno virtual de Python para crear un proyecto de Django.

Primero, actualice el paquete PIP a la √ļltima versi√≥n usando el siguiente comando:

pip3 install --upgrade pip

A continuación, verifique la versión de PIP con el siguiente comando:

pip --version

Salida de muestra:

pip 21.2.4 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)

A continuación, instale el paquete de entorno virtual con el siguiente comando:

pip3 install virtualenv

A continuación, cree un directorio para el proyecto Django y cree un entorno virtual Django:

mkdir ~/djangoapp
cd ~/djangoapp
virtualenv djangoenv

A continuación, active el entorno virtual de Django usando el siguiente comando:

source djangoenv/bin/activate

A continuación, instale Django, Gunicorn y otros paquetes con el siguiente comando:

pip install django gunicorn psycopg2-binary

En este punto, Django est√° instalado en el entorno virtual de Python. Ahora, puede continuar con el siguiente paso.

Instalar y configurar Django

Django proporciona un django-admin.py script para crear un proyecto. Puede ejecutar el siguiente comando para crear un proyecto Django:

django-admin.py startproject djangoapp ~/djangoapp

A continuación, deberá editar settings.py y definir la configuración de su base de datos:

nano ~/djangoapp/djangoapp/settings.py

Cambia la siguiente línea con tu nombre de dominio:

ALLOWED_HOSTS = ['django.example.com', 'localhost']

Descomente el backend de la base de datos predeterminado y agregue la configuración de la base de datos PostgreSQL:

#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': BASE_DIR / 'db.sqlite3',
#    }
#}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'django',
        'USER': 'django',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',

    }
}

Agregue las siguientes líneas al final del archivo:

STATIC_URL = '/static/'
import os
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Guarde y cierre el archivo, luego migre el esquema de la base de datos inicial a la base de datos PostgreSQL:

./manage.py makemigrations
./manage.py migrate

Salida de muestraL:

  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 auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

A continuación, cree una cuenta de superusuario para Django con el siguiente comando:

./manage.py createsuperuser

Configure su nombre de usuario y contrase√Īa de administrador como se muestra a continuaci√≥n:

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

A continuaci√≥n, re√ļna todo el contenido est√°tico en el directorio:

./manage.py collectstatic

Ejecute el servidor de desarrollo de Django

En este punto, Django est√° instalado y configurado. Ahora puede iniciar el servidor de desarrollo de Django usando el siguiente comando:

./manage.py runserver 0.0.0.0:8000

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

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

System check identified no issues (0 silenced).
August 27, 2021 - 10:02:05
Django version 3.2.6, using settings 'djangoapp.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Ahora, abra su navegador web y acceda a su proyecto Django usando la URL http://django.ejemplo.com:8000/admin/. Será redirigido a la página de inicio de sesión de Django:

Inicio de sesión en Django

Proporcione su nombre de usuario y contrase√Īa de administrador y haga clic en el Acceso. Deber√≠a ver el panel de control de Django en la siguiente p√°gina: Anuncio

Panel de administración de Django

Ahora, regresa a tu terminal y presiona CTRL + C para detener el servidor de desarrollo de Django.

Verificar Django con Gunicorn

A continuación, también deberá probar si Gunicorn puede servir a Django o no. Puede iniciar Django usando el servidor Gunicorn con el siguiente comando:

gunicorn --bind 0.0.0.0:8000 djangoapp.wsgi

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

[2021-08-27 10:04:22 +0000] [47383] [INFO] Starting gunicorn 20.1.0
[2021-08-27 10:04:22 +0000] [47383] [INFO] Listening at: http://0.0.0.0:8000 (47383)
[2021-08-27 10:04:22 +0000] [47383] [INFO] Using worker: sync
[2021-08-27 10:04:22 +0000] [47384] [INFO] Booting worker with pid: 47384

Presione CTRL + C para detener el servidor Gunicorn.

A continuación, desactívelo desde el entorno virtual de Python con el siguiente comando:

deactivate

Crear un archivo de servicio de Systemd para Gunicorn

A continuación, deberá crear un archivo de servicio systemd para que Gunicorn inicie y detenga el servidor de aplicaciones Django.

Puedes crear un Gunicorn con el siguiente comando:

nano /etc/systemd/system/gunicorn.socket

Agregue las siguientes líneas:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

Guarde y cierre el archivo y luego cree un archivo de servicio para Gunicorn:

nano /etc/systemd/system/gunicorn.service

Agregue las siguientes líneas que coincidan con la ruta de su proyecto Django:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/root/djangoapp
ExecStart=/root/djangoapp/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock          djangoapp.wsgi:application

[Install]
WantedBy=multi-user.target

Guarde y cierre el archivo, luego establezca el permiso adecuado para el directorio del proyecto Django:

chown -R www-data:root ~/djangoapp

A continuación, vuelva a cargar el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicie el servicio Gunicorn y habilítelo para que se inicie al reiniciar el sistema:

systemctl start gunicorn.socket
systemctl enable gunicorn.socket

A continuación, verifique el estado del Gunicorn usando el siguiente comando:

systemctl status gunicorn.socket

Deberías obtener el siguiente resultado:

? gunicorn.socket - gunicorn socket
     Loaded: loaded (/etc/systemd/system/gunicorn.socket; disabled; vendor preset: enabled)
     Active: active (listening) since Fri 2021-08-27 10:05:46 UTC; 6s ago
   Triggers: ? gunicorn.service
     Listen: /run/gunicorn.sock (Stream)
     CGroup: /system.slice/gunicorn.socket

Aug 27 10:05:46 debian11 systemd[1]: Listening on gunicorn socket.

Configurar Nginx como proxy inverso para Django

A continuación, deberá configurar Nginx como un proxy inverso para servir a Django.

Para hacerlo, cree un archivo de configuración de Nginx:

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

Agregue las siguientes líneas:

server {
     listen 80;
     server_name django.example.com;
    location = /favicon.ico { access_log off; log_not_found off; }


    location /static/ {
         root /root/djangoapp;
     }

    location / {
         include proxy_params;
         proxy_pass http://unix:/run/gunicorn.sock;
     }
}

Guarde y cierre el archivo, luego verifique el Nginx para cualquier error de configuración:

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

Finalmente, reinicie el servicio Nginx para aplicar los cambios:

systemctl restart nginx

Para verificar el estado de Nginx, ejecute:

systemctl status nginx

Salida de muestra:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-08-27 10:06:59 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 47494 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 47495 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 47496 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 2.5M
        CPU: 49ms
     CGroup: /system.slice/nginx.service
             ??47496 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??47497 nginx: worker process

Aug 27 10:06:59 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 27 10:06:59 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Aug 27 10:06:59 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.

Ahora, puede acceder a la aplicación Django usando la URL http://django.ejemplo.com/admin. También puede acceder a la aplicación Django usando la URL http://django.ejemplo.com/.

Aplicación Django

Conclusión

¡Felicidades! Ha instalado con éxito una aplicación Django con Gunicorn y Nginx como proxy inverso. Ahora puede comenzar a implementar su aplicación Python utilizando el marco Django.

Deja una respuesta

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