Configurar el proyecto de Django con Nginx - mglacayo07/serverwiki GitHub Wiki

Configurar el proyecto de Django con Nginx

  1. Instalar dependencias para Django:
  • Asegúrate de estar logueado como wsgi. Luego, instala las siguientes dependencias:
sudo apt install python3-pip python3-dev libmysqlclient-dev python3-venv
  1. Configurar el proyecto Django:
  • Clona tu repositorio de Django:
git clone <URL-de-tu-repo>
cd <nombre-del-repo>
  • Crea y activa un entorno virtual:
python3 -m venv venv
source venv/bin/activate
  • Instala las dependencias del proyecto:
pip install -r requirements.txt
  • Configura el archivo de settings.py de Django para conectarse a la base de datos MySQL:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mi_proyecto_django',
        'USER': 'django_user',
        'PASSWORD': 'contraseña_segura',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
  • Aplica las migraciones de la base de datos:
python manage.py migrate
  1. Instalar y configurar uWSGI:
  • Instala Gunicorn:
sudo apt update
sudo apt install python3-pip python3-dev build-essential
pip install uwsgi

Probar uWSGI con tu proyecto Django *Para probar que uWSGI funciona con tu proyecto, ve al directorio del proyecto, activa el entorno virtual, y ejecuta uWSGI:

cd /ruta/a/tu/proyecto
source venv/bin/activate
uwsgi --http :8000 --module mi_proyecto_django.wsgi
  • Crea un archivo de configuración de uWSGI en la carpeta de tu proyecto:
nano /ruta/a/tu/proyecto/mi_proyecto_uwsgi.ini
  • Añade el siguiente contenido (ajusta las rutas según tu configuración):
[uwsgi]
chdir = /ruta/a/tu/proyecto
module = mi_proyecto_django.wsgi:application
home = /ruta/a/tu/proyecto/venv

master = true
processes = 5

socket = /ruta/a/tu/proyecto/mi_proyecto.sock
chmod-socket = 660
vacuum = true

logto = /ruta/a/tu/proyecto/logs/uwsgi.log
  1. Configurar Nginx:
  • Instala Nginx:
sudo apt install nginx
  • Configura Nginx para servir tu aplicación:
sudo nano /etc/nginx/sites-available/mi_proyecto_django
  • Añade la siguiente configuración:
server {
    listen 80;
    server_name <tu-dominio-o-ip>;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/ruta/a/tu/proyecto/mi_proyecto.sock;
    }

    location /static/ {
        alias /ruta/a/tu/proyecto/static/;
    }

    location /media/ {
        alias /ruta/a/tu/proyecto/media/;
    }
}
  • Enlaza y activa el sitio:
sudo ln -s /etc/nginx/sites-available/mi_proyecto_django /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
sudo usermod -aG wsgi www-data
  1. Crear un servicio systemd para uWSGI Es recomendable crear un archivo de servicio systemd para gestionar uWSGI, de forma que se inicie automáticamente al reiniciar el servidor.
  • Crea el archivo de servicio:
sudo nano /etc/systemd/system/uwsgi.service

Añade la siguiente configuración:

[Unit]
Description=uWSGI instance to serve my Django project
After=network.target

[Service]
User=wsgi
Group=www-data
WorkingDirectory=/ruta/a/tu/proyecto
ExecStart=/ruta/a/tu/proyecto/venv/bin/uwsgi --ini /ruta/a/tu/proyecto/mi_proyecto_uwsgi.ini

[Install]
WantedBy=multi-user.target