Django es un marco web de código abierto escrito en Python. Es un marco web popular todo en uno y una de las mejores opciones para muchos desarrolladores. Django ofrece muchas ventajas, como la arquitectura MVT (Plantilla de vista de modelo), el panel de administración automático y el potente soporte de base de datos ORM (Mapeo relacional de objetos). También ofrece increíbles herramientas de depuración para desarrolladores. En este tutorial, le mostraremos cómo instalar Django con PostgreSQL como almacenamiento de base de datos en lugar de SQLite predeterminado, Nginx como proxy inverso y Gunicorn como servidor de aplicaciones en Ubuntu 20.04.
Requisitos
- Un VPS con Ubuntu 20.04
- Acceso SSH con privilegios de root
Paso 1. Iniciar sesión en el servidor
Primero, inicie sesión en su servidor Ubuntu 20.04 a través de SSH como usuario raíz:
ssh root@IP_Address -p Port_number
Deberá reemplazar 'IP_Address' y 'Port_number' con la dirección IP y el número de puerto SSH respectivos de su servidor. Además, reemplace "root" con el nombre de usuario de la cuenta de administrador si es necesario.
Antes de comenzar, debe asegurarse de que todos los paquetes del sistema operativo Ubuntu instalados en el servidor estén actualizados. Puede hacerlo ejecutando los siguientes comandos:
# apt update -y # apt upgrade -y
Paso 2. Crear un usuario del sistema
Una vez que haya iniciado sesión en Ubuntu 20.04 como raíz, crearemos un nuevo usuario del sistema y le otorgaremos privilegios de sudo. También utilizaremos este usuario para completar esta instalación. En este tutorial, crearemos un nuevo usuario del sistema llamado "maestro", puede elegir cualquier nombre de usuario que desee.
# adduser master
Una vez creado, ejecutemos este comando para agregar el nuevo usuario al grupo sudo. En Ubuntu, los usuarios que son miembros del grupo sudo pueden ejecutar comandos sudo.
# usermod -aG sudo master
También agregaremos el usuario maestro a nuestro grupo www-data
# usermod -aG www-data master
Ahora, podemos iniciar sesión como el nuevo usuario 'maestro'
# su - master
Paso 3. Instalar paquetes
Para comenzar esto, instalaremos todos los paquetes necesarios del repositorio. Para instalar Nginx, PostgreSQL, Python desde el repositorio, podemos ejecutar este comando:
$ sudo apt install postgresql postgresql-contrib python3-pip python3-dev libpq-dev nginx -y
Paso 4. Agregue la base de datos y el usuario de la base de datos
Durante la instalación de PostgreSQL, se creó un usuario del sistema denominado postgres como usuario administrativo predeterminado. Necesitamos usar este usuario para iniciar sesión en el shell de PostgreSQL y realizar tareas administrativas.
$ sudo -u postgres psql
Se le pedirá su contraseña "maestra" y el shell sería así:
postgres=#
Mientras esté en el shell de PostgreSQL, ejecute los siguientes comandos:
postgres=# CREATE USER djangouser WITH PASSWORD 'm0d1fyth15';
postgres=# CREATE DATABASE djangodb;
A continuación, también debemos cambiar la codificación a UTF-8, la zona horaria y el esquema de la base de datos default_transaction_isolation.
postgres=# ALTER ROLE djangouser SET client_encoding TO 'utf8';
postgres=# ALTER ROLE djangouser SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE djangouser SET timezone TO 'UTC';
La última parte, otorgamos los privilegios a la nueva base de datos y luego salimos del shell de PostgreSQL.
postgres=# GRANT ALL PRIVILEGES ON DATABASE djangodb TO djangouser;
postgres=# \q
Paso 5. Crear un entorno virtual de Python
Django se puede instalar de varias maneras, en este artículo le mostraremos cómo instalarlo en un entorno virtual de python.
$ sudo -H pip3 install --upgrade pip
$ sudo -H pip3 install virtualenv
Una vez completado, creemos un nuevo directorio para la instalación de django y luego ingresemos al nuevo directorio
$ mkdir django && cd $_
Después de ingresar al directorio 'django', podemos ejecutar este comando para crear un nuevo entorno virtual.
$ virtualenv djangoenv
Como se ve en la imagen, el nuevo entorno virtual se crea en el directorio 'djangoenv'. Para instalar Django, Gunicorn y Psycopg2 en el entorno virtual, primero tenemos que activarlo.
$ source djangoenv/bin/activate
Al ejecutar el comando anterior, su shell se verá así:
(djangoenv) master@ubuntu20:~/django$
Mientras esté en el shell, ejecute este comando para instalar django.
(djangoenv) master@ubuntu20:~/django$ pip install django gunicorn psycopg2
Una vez completado, debería ver un resultado como este:
Installing collected packages: sqlparse, backports.zoneinfo, asgiref, psycopg2, gunicorn, django
Successfully installed asgiref-3.4.1 backports.zoneinfo-0.2.1 django-4.0 gunicorn-20.1.0 psycopg2-2.9.2 sqlparse-0.4.2
Todos los componentes necesarios para iniciar un proyecto django deben instalarse en el entorno virtual.
Paso 6. Crear proyecto Django
En el paso anterior, creamos un directorio ~/django
o en este caso /home/master/django
. Crearemos un proyecto django en este directorio, podemos ejecutar este comando para instalar el proyecto django en ~/django
. El comando debe ejecutarse mientras estamos en el entorno virtual.
(djangoenv) master@ubuntu20:~/django$ django-admin startproject djangoproject ~/django
El comando anterior instalará el proyecto django en ~/django/djangoproject
. Si enumera el directorio, verá manage.py
, djangoenv
y djangoproject
en tu ~/django
.
Ahora, dado que queremos usar PostgreSQL como almacenamiento de la base de datos, debemos modificar la configuración.
$ nano ~/django/djangoproject/settings.py
Agregue esta línea en la parte superior de su configuración.py
import os
Y reemplace la información de la base de datos existente con lo siguiente.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'djangodb', 'USER': 'djangouser', 'PASSWORD': 'm0d1fyth15', 'HOST': 'localhost', 'PORT': '', } }
Asegúrese de que el nombre de usuario y la contraseña de la base de datos coincidan con los que creamos en el paso anterior. Todavía en el mismo archivo settings.py, busque ALLOWED_HOSTS y luego puede agregar la dirección IP de su servidor, nombres de dominio, nombres de subdominio. Las entradas deben estar separadas por una coma y listadas entre comillas.
ALLOWED_HOSTS = ['123.123.123.123', 'domain.com', 'sub.domain.com']
A continuación, busque la configuración de archivos estáticos de Django. Los cambios son necesarios para que sus archivos estáticos de Django sean accesibles a través de nginx y para evitar que nginx devuelva mensajes de error 404. Agregue esta línea después de STATIC_URL ='/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
No olvide guardar los cambios y luego salir.
A continuación, es hora de migrar el esquema de base de datos inicial a nuestra base de datos PostgreSQL, ejecutemos estos comandos.
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py makemigrations
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py migrate
Luego, crea un superusuario.
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py createsuperuser
Se le pedirá que cree un nombre de usuario, proporcione una dirección de correo electrónico y la contraseña del nombre de usuario. Le gustaría guardar la información sobre este usuario administrativo y contraseña porque los usará para iniciar sesión en el backend de Django.
Para el último, ejecute el siguiente comando para recopilar archivos estáticos.
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py collectstatic
Deberá confirmar la acción respondiendo con sí, luego verá este resultado después de confirmar:
128 static files copied to '/home/master/django/static'
Desactive el entorno virtual para salir.
(djangoenv) master@ubuntu20:~/django$ deactivate
Paso 7. Crear archivo Systemd Gunicorn
Para administrar el servicio Gunicorn, crearemos un archivo de unidad systemd en /etc/systemd/system/gunicorn.service.
$ sudo nano /etc/systemd/system/gunicorn.service
Pegue estas líneas
[Unit] Description=gunicorn daemon After=network.target [Service] User=master Group=www-data WorkingDirectory=/home/master/django ExecStart=/home/master/django/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/master/django/djangoproject.sock djangoproject.wsgi:application [Install] WantedBy=multi-user.target
Guarde el archivo y luego salga. Luego recarga systemd e inicia gunicorn.
$ sudo systemctl daemon-reload
$ sudo systemctl start gunicorn
Para verificar si gunicorn se está ejecutando o no, ejecute este comando:
$ sudo systemctl status gunicorn
Paso 8. Configurar Nginx
Gunicorn se está ejecutando y ahora estamos listos para configurar nginx para que actúe como un proxy inverso para nuestro proyecto Django. Vamos a crear un bloque de servidor nginx para Django y eliminar el bloque de servidor predeterminado de nginx.
$ sudo rm /etc/nginx/sites-enabled/default $ sudo nano /etc/nginx/conf.d/django.conf
Pegue estas líneas en /etc/nginx/conf.d/django.conf
server { listen 80; server_name 123.123.123.123; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { alias /home/master/django/static/; } location /.well-known { alias /home/master/django/; } location / { include proxy_params; proxy_pass http://unix:/home/master/django/djangoproject.sock; } }
Antes de guardar los archivos, asegúrese de reemplazar 123.123.123.123
con la dirección IP real de su servidor y la ruta del socket es correcta. Luego, verifique si hay algún error y reinicie nginx para recargar la nueva configuración.
$ sudo nginx -t $ sudo systemctl restart nginx
En este punto, debería poder acceder a su proyecto Django en http://YOUR_SERVER_IP_ADDRESS
y la URL administrativa en http://YOUR_SERVER_IP_ADDRESS/admin
utilizando su navegador web favorito.
Paso 9. Instalar certificado SSL
Este paso es opcional pero muy recomendable completarlo. En la era moderna, los sitios web deberían ejecutarse en HTTPS en lugar de HTTP. Este paso lo guiará a través de la instalación de SSL desde Let's Encrypt.
$ sudo apt install certbot python3-certbot-nginx -y
Una vez instalado, edite el bloque del servidor del sitio web de Django y reemplace server_name con su dominio o subdominio real apuntando a la dirección IP de su servidor. Asegúrese de que el registro DNS del dominio o subdominio ya apunte a su servidor antes de emitir el certificado SSL.
Abra /etc/nginx/conf.d/django.conf
y editar esta parte
server { listen 80; server_name 123.123.123.123;
a
server { listen 80; server_name yourdomain.com;
Asegúrate de reemplazar yourdomain.com
con su nombre de dominio real. Guarde el archivo, luego salga y vuelva a cargar Nginx.
$ sudo systemctl reload nginx
Ahora, estamos listos para instalar el certificado SSL, ejecute este comando:
$ sudo certbot
Deberá proporcionar su dirección de correo electrónico, aceptar los TOS de Let's Encrypt y si desea compartir su dirección de correo electrónico con Electronic Frontier Foundation o no. Luego, debe elegir para qué nombres desea activar HTTPS. Elija su sitio web de Django escribiendo el número y presionando ENTER. Let's encrypt instalará el certificado y le preguntará si desea configurar la redirección de HTTP a HTTPS o no, puede elegir redirigir y luego certbot creará la redirección y recargará Nginx si todo está bien.
Ahora, debería poder acceder a su sitio web de Django en modo HTTPS en https://yourdomain.com
.
Eso es todo, has aprendido a configurar Django con PostgreSQL, Nginx y Gunicorn.
Por supuesto, no es necesario que configure Django con PostgreSQL, Nginx y Gunicorn en Ubuntu 20.04 si utiliza uno de nuestros servicios de alojamiento VPS de Django, en cuyo caso simplemente puede solicitar a nuestros administradores expertos de Linux que configuren Django con PostgreSQL. , Nginx y Gunicorn en Ubuntu 20.04 VPS para usted. Están disponibles las 24 horas del día, los 7 días de la semana y atenderán su solicitud de inmediato.
PD. Si le gustó esta publicación sobre cómo configurar Django con PostgreSQL, Nginx y Gunicorn en Ubuntu 20.04, compártala con sus amigos en las redes sociales usando los botones a continuación o simplemente deje una respuesta en las secciones de comentarios. Gracias.