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 -yInstala las dependencias necesarias:
sudo apt install python3 python3-pip python3-venv nginx git -yPaso 2 — Subir el proyecto
Clona tu repositorio desde GitHub:
cd /var/www/
git clone https://github.com/tu_usuario/tu_proyecto.git
cd tu_proyectoCrea el entorno virtual e instala las dependencias:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtPaso 3 — Configurar variables de entorno
Crea el archivo .env con tus variables de producción:
nano .envDEBUG=False
SECRET_KEY=tu_clave_secreta
ALLOWED_HOSTS=tudominio.com
DB_NAME=nombre_db
DB_USER=usuario_db
DB_PASSWORD=contraseña_dbPaso 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.targetActiva e inicia el servicio:
sudo systemctl daemon-reload
sudo systemctl enable miapp
sudo systemctl start miappPaso 5 — Configurar nginx
Crea el archivo de configuración de nginx:
sudo nano /etc/nginx/sites-available/miappserver {
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 nginxPaso 6 — Certificado SSL con Let's Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tudominio.com -d www.tudominio.comCertbot 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 migrateConclusió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 miappSi 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.
Sign IN
Comentarios: (0)
Todavía no hay comentarios.