GNU/Linux >> Tutoriales Linux >  >> Panels >> Panels

Cómo configurar Django con Postgres, Nginx y Gunicorn en Ubuntu 20.04

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.


Panels
  1. Cómo instalar phpMyAdmin con HHVM, Nginx y MariaDB en un Ubuntu 14.04 VPS

  2. Instale Django CMS en Ubuntu 12.04 con MariaDB, Gunicorn y Nginx

  3. Instale y configure NodeBB con Redis y Nginx en Ubuntu 12.04

  4. Cómo crear y eliminar usuarios en Ubuntu 16.04

  5. Cómo instalar PHP 7.4 con Nginx en Ubuntu 20.04

Cómo instalar Magento 2 con Nginx y Letsencrypt en Ubuntu 18.04

Cómo instalar Gitlab con PostgreSQL y Nginx en Ubuntu 15.04

Cómo instalar Drupal 8 con Nginx, PHP-FPM y SSL en Ubuntu 15.10

Cómo instalar Django con PostgreSQL y Nginx en Ubuntu 16.04

Cómo configurar el entorno de desarrollo de Django en Ubuntu 18.04

Configure Django con Postgres, Nginx y Gunicorn en Ubuntu 18.04