1. Confiugración inicial de Django
Instala los paquetes necesarios para compilar dependencias:
sudo apt-get update
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
Instala las bibliotecas requeridas vía pip:
pip3 install mysqlclient django-redis gunicorn
Crea las migraciones y aplica los cambios a la base de datos:
python3 manage.py makemigrations
python3 manage.py migrate
2. Gestión de procesos con Supervisor
Instala Supervisor:
pip install supervisor
Genera el archivo de configuración por defecto:
echo_supervisord_conf > /etc/supervisord.conf
Abre el archivo y modifica las dos últimas líneas para incluir los programas personalizados:
[include]
files = /etc/supervisor/conf.d/*.conf
Crea el directorio para los archivos de configuración:
mkdir -p /etc/supervisor/conf.d
Dentro de /etc/supervisor/conf.d/, crea un archivo por cada servicio. Por ejemplo, mi_proyecto.conf:
[program:django_app]
user=www-data
command=/usr/local/bin/gunicorn --env DJANGO_SETTINGS_MODULE=mi_proyecto.settings mi_proyecto.wsgi -w 4 -b 127.0.0.1:9000 --chdir=/var/www/mi_proyecto --access-logfile=/var/log/gunicorn/access.log
directory=/var/www/mi_proyecto
stopsignal=TERM
autostart=true
autorestart=true
stdout_logfile=/var/log/gunicorn/stdout.log
stderr_logfile=/var/log/gunicorn/stderr.log
[program:nginx]
user=root
command=/opt/nginx/sbin/nginx
directory=/opt/nginx
stopsignal=TERM
autostart=true
autorestart=true
stdout_logfile=/var/log/nginx/out.log
stderr_logfile=/var/log/nginx/err.log
Reinicia Supervisor para aplicar los cambios:
supervisorctl reload
supervisorctl status
3. Configuración de Nginx como proxy inverso
Edita el archivo de configuración de Nginx (por ejemplo, /etc/nginx/nginx.conf):
user www-data;
worker_processes auto;
daemon off; # necesario para que Supervisor lo gestione correctamente
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/javascript application/json;
upstream backend {
server 127.0.0.1:9000 fail_timeout=0;
}
server {
listen 80;
server_name ejemplo.com;
location / {
root /var/www/mi_proyecto/frontend;
index index.html;
}
location /api {
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;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://backend;
}
location /admin {
proxy_pass http://backend;
}
location /media {
alias /var/www/mi_proyecto/media;
}
}
4. Inicio de Supervisor
Arranca el demonio de Supervisor:
/usr/local/bin/supervisord -c /etc/supervisord.conf
5. Configuración de arranque automático de Supervisor
Descarga un script de inicio oficial o utiliza el que proporciona el sistema. Un método común es:
sudo curl -o /etc/init.d/supervisord https://raw.githubusercontent.com/Supervisor/initscripts/master/debian-supervisor.init
sudo chmod +x /etc/init.d/supervisord
sudo update-rc.d supervisord defaults
Ajusta las rutas dentro del script si es necesario (por ejemplo, DAEMON, SUPERVISORCTL, PIDFILE y DAEMON_OPTS). Luego verifica que el PID (pidfile=/var/run/supervisord.pid) esté correctamente definido en /etc/supervisord.conf.
Finalmente, prueba el servicio:
service supervisord start
service supervisord status