Si tienes una aplicación Django en producción, tarde o temprano llegarás a los límites del hosting compartido: lentitud, restricciones de configuración, falta de control. La solución es migrar a un VPS (servidor privado virtual).

En este artículo te explico paso a paso cómo hice la migración de axxyss.com a un VPS Debian 12 con nginx como servidor web y gunicorn como servidor WSGI.


¿Por qué un VPS?

El hosting compartido es económico pero tiene limitaciones importantes:

  • No puedes instalar paquetes del sistema libremente
  • Los recursos (CPU, RAM) se comparten con otros usuarios
  • Configuraciones como websockets o workers personalizados no están disponibles
  • El rendimiento es impredecible

Con un VPS tienes control total sobre el servidor: instalas lo que necesitas, configuras nginx a tu medida y defines cuántos workers de gunicorn necesita tu aplicación.


Requisitos previos

  • Un VPS con Debian 12 (yo uso Strato, pero vale cualquier proveedor)
  • Acceso SSH al servidor
  • Tu proyecto Django funcionando en local
  • Un dominio apuntando a la IP del VPS

Paso 1 — Preparar el servidor

Conecta al VPS por SSH y actualiza el sistema:

ssh usuario@tu_ip -p 22
sudo apt update && sudo apt upgrade -y

Instala las dependencias necesarias:

sudo apt install python3 python3-pip python3-venv nginx git -y

Paso 2 — Subir el proyecto

Clona tu repositorio desde GitHub:

cd /var/www/
git clone https://github.com/tu_usuario/tu_proyecto.git
cd tu_proyecto

Crea el entorno virtual e instala las dependencias:

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Paso 3 — Configurar variables de entorno

Crea el archivo .env con tus variables de producción:

nano .env
DEBUG=False
SECRET_KEY=tu_clave_secreta
ALLOWED_HOSTS=tudominio.com
DB_NAME=nombre_db
DB_USER=usuario_db
DB_PASSWORD=contraseña_db

Paso 4 — Configurar gunicorn como servicio systemd

Crea el archivo de servicio:

sudo nano /etc/systemd/system/miapp.service
[Unit]
Description=Gunicorn daemon para miapp.com
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/tu_proyecto
ExecStart=/var/www/tu_proyecto/venv/bin/gunicorn \
    --workers 3 \
    --bind unix:/tmp/miapp.sock \
    --timeout 120 \
    miapp.wsgi:application

[Install]
WantedBy=multi-user.target

Activa e inicia el servicio:

sudo systemctl daemon-reload
sudo systemctl enable miapp
sudo systemctl start miapp

Paso 5 — Configurar nginx

Crea el archivo de configuración de nginx:

sudo nano /etc/nginx/sites-available/miapp
server {
    listen 80;
    server_name tudominio.com www.tudominio.com;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /var/www/tu_proyecto;
    }

    location /media/ {
        root /var/www/tu_proyecto;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/tmp/miapp.sock;
    }
}

Activa el sitio:

sudo ln -s /etc/nginx/sites-available/miapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Paso 6 — Certificado SSL con Let's Encrypt

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tudominio.com -d www.tudominio.com

Certbot configura automáticamente nginx para HTTPS y renueva el certificado cada 90 días.


Paso 7 — Archivos estáticos y migraciones

source venv/bin/activate
python manage.py collectstatic
python manage.py migrate

Conclusión

Migrar a un VPS requiere un poco más de configuración inicial pero los beneficios son claros: rendimiento, control total y escalabilidad. Una vez configurado, el flujo de despliegue es simple:

git pull origin main
sudo systemctl restart miapp

Si tienes dudas sobre la migración de tu proyecto Django a un VPS, puedes contactarme — es exactamente el tipo de proyectos en los que trabajo.


# Debian, Desarrollo Web, Django, Hosting, Linux, Servidor, Web, Wordpress


Para dejar un comentario tiene que estar conectado:

Sign IN

Comentarios: (0)

Todavía no hay comentarios.