"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Implementar Django en producción.

Implementar Django en producción.

Publicado el 2024-11-07
Navegar:921

Recientemente implementé mi propia aplicación Django en producción. El sitio web se llama videiro.com y fue desarrollado en django HTML/CSS/JS Tailwind.

Configuración

Estoy usando un servidor Debian 12 que expondrá mi aplicación a través de túneles de Cloudflare. Todos los archivos estáticos se entregan a través de nginx y gunicorn ejecuta el proyecto Django.

En esta guía te mostraré cómo configuro esto.

Preparando el proyecto Django

Lo primero que tendrás que hacer es abrir el settings.py y cambiar lo siguiente

Debug = False
ALLOWED_HOSTS = ['yourdomain.tld']
CSRF_COOKIE_SECURE = True
CSRF_TRUSTED_ORIGINS = [
    'yourdomain.tld',
]

También debes cambiar SECRET_KEY a una cadena larga y aleatoria, que nunca debes compartir con nadie.

Después de eso, crea un nuevo archivo llamado .gitignore y pega lo siguiente:

db.sqlite3
*.pyc

Esto asegurará que la base de datos no se cargue en nuestro servidor y que tampoco se carguen archivos pyc.

Ahora puedes subir tu proyecto a un nuevo repositorio de github (o repositorio de gitea). Si no desea que todos tengan acceso a su código fuente, asegúrese de configurar el repositorio como privado.

Si quieres asegurarte de que tu código fuente permanezca privado, te recomiendo que configures una instancia de gitea autohospedada, lee Selfhost tu propia instancia de gitea: alternativa liviana y autohospedada a github, para aprender cómo hacerlo.

git init
git branch -M main
git add .
git commit -m "initial commit"
git remote add origin https://...
git push -u origin main

Ahora que lo hemos hecho, debes iniciar sesión en tu servidor

Configuración del servidor

Antes de configurar cualquier cosa, asegúrese de no permitir ningún inicio de sesión ssh con contraseña. Siga Cómo proteger ssh con autenticación basada en claves para proteger su servidor de ese tipo de ataques.

Inicia sesión en tu servidor

ssh [email protected]

Asegúrate de que tus paquetes tengan datos actualizados

sudo apt update && sudo apt upgrade

Ahora instale python, pip, git y nginx

sudo apt install python3 python3-pip git nginx

Ahora clona tu proyecto en tu directorio de inicio.

git clone https://...
cd my-project

Una vez que estés dentro, instala lo siguiente:

pip install django django-crispy-forms whitenoise

Ahora intenta ejecutar el proyecto:

python3 manage.py runserver

si recibe un error que indica que falta un paquete, instálelo y vuelva a ejecutarlo.

Configurando gunicorn

Ahora configuraremos gunicorn

Primero instálalo

pip install gunicorn

Ahora crea un nuevo archivo llamado gunicorn.service con tu editor de texto favorito:

sudo vim /etc/systemd/system/gunicorn.service

Y pega lo siguiente:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=YOURUSER
Group=www-data
WorkingDirectory=/home/YOURUSER/PROJECT
ExecStart=/path/to/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 PROJECTNAME.wsgi:application

[Install]
WantedBy=multi-user.target

Cambia TUUSUARIO por tu usuario.

Para encontrar el camino a gunicorn, corre:

which gunicorn

Y el nombre de tu proyecto es el nombre de la carpeta dentro de tu proyecto que contiene el archivo settings.py.

Ahora ejecute los siguientes comandos para iniciar y habilitar gunicorn (iniciar al arrancar)

sudo systemctl daemon-reload
sudo systemctl start gunicorn.service
sudo systemctl enable gunicorn.service

Ahora, si te diriges a 127.0.0.1:8000, deberías ver tu proyecto ejecutándose.

Pero aún no hemos terminado

Configurando nginx

Ahora necesitamos servir nuestro contenido estático a través de nginx.

Primero cree un nuevo archivo de configuración nginx con su editor de texto favorito:

sudo vim /etc/nginx/sites-available/PROJECT

Cambia PROYECTO por lo que quieras

Ahora pega el siguiente contenido:

server {
    listen 80;
    server_name YOURDOMAIN;

    location /static/ {
    alias /var/www/staticfiles/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $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;
    }
}

Simplemente cambie SUDOMINIO por el dominio en el que se alojará.

Crea un enlace simbólico para habilitar tu sitio web:

sudo ln -s /etc/nginx/sites-available/PROJECT /etc/nginx/sites-enabled/

Iniciar y habilitar nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Configurar archivos estáticos

Lo primero que tendrás que hacer es ingresar a tu proyecto (django)

cd project

Ahora ejecuta el siguiente comando:

python3 manage.py collectstatic

Esto creará una nueva carpeta llamada archivos estáticos

Ahora para configurar los archivos estáticos tenemos dos opciones:

  1. Cambie el usuario en /etc/nginx/nginx.conf a su usuario (menos seguro)
  2. Copiar los archivos estáticos a /var/www/ (más seguro)

Haré la segunda opción:

Primero cree un nuevo archivo llamado staticfiles en /var/www

sudo mkdir -p /var/www/staticfiles

Ahora copia todos los archivos estáticos de tu proyecto allí:

sudo cp staticfiles/* /var/www/staticfiles

Ahora cd en /var/www

cd /var/www

Cambiar la propiedad de todos los archivos

sudo chown www-data:www-data staticfiles
sudo chown www-data:www-data staticfiles/*

Reiniciar el servicio nginx:

sudo systemctl restart nginx

Ahora si te diriges a:

127.0.0.1

¡Deberías ver tu sitio web ejecutándose con todos los archivos estáticos disponibles!

Exponer a través de túneles de Cloudflare

Ahora para que su sitio web sea accesible públicamente.

Para hacer esto necesitarás una cuenta de Cloudflare y un dominio apuntado a Cloudflare.

Primero dirígete al Panel de confianza cero

En Redes, haga clic en Túneles y luego en Crear un túnel

Una vez creado, debe instalar y ejecutar un conector, siga las instrucciones en la página para su configuración específica.

Después de ejecutar el conector, debes hacer clic en la pestaña Nombre de host público y Agregar un nombre de host público.

Ahora deberías ver algo como esto: Deploy django to production

Completa la información como la tengo. El tipo de servicio debe ser HTTP y la URL debe ser 127.0.0.1:80 o localhost:80

Ahora, si te diriges al dominio que especificaste, deberías ver tu aplicación en funcionamiento.

¡Felicidades!

Si disfrutaste esta publicación y quieres apoyar mi trabajo (en su mayoría no remunerado), puedes donar aquí.

¡Únase a mi boletín gratuito!

Únete aquí

Declaración de liberación Este artículo se reproduce en: https://dev.to/4rkal/deploy-django-to-production-4bn0?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3