domingo, 24 de agosto de 2025

📘 Guía rápida: Despliegue de Django en un VPS con Ubuntu


📘 Guía rápida: Despliegue de Django en un VPS con Ubuntu

1. 🔧 Preparación del servidor

  1. Conéctate por SSH a tu VPS (ejemplo con Contabo o DigitalOcean):

    ssh usuario@IP_DEL_SERVIDOR
  2. Actualiza paquetes:

    sudo apt update && sudo apt upgrade -y
  3. Instala dependencias:

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

2. 🐍 Crear entorno de Django

  1. Clona tu proyecto desde GitLab/GitHub:

    git clone https://gitlab.com/usuario/proyecto.git cd proyecto
  2. Crea un entorno virtual:

    python3 -m venv venv source venv/bin/activate
  3. Instala dependencias:

    pip install -r requirements.txt

3. 🗄️ Configurar base de datos PostgreSQL

  1. Instala PostgreSQL y librerías:

    sudo apt install postgresql postgresql-contrib libpq-dev -y
  2. Crea base de datos y usuario:

    sudo -u postgres psql CREATE DATABASE miapp; CREATE USER miusuario WITH PASSWORD 'mipassword'; ALTER ROLE miusuario SET client_encoding TO 'utf8'; ALTER ROLE miusuario SET default_transaction_isolation TO 'read committed'; ALTER ROLE miusuario SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE miapp TO miusuario; \q
  3. Configura settings.py en tu proyecto:

    DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'miapp', 'USER': 'miusuario', 'PASSWORD': 'mipassword', 'HOST': 'localhost', 'PORT': '5432', } }

4. 🛠 Migraciones y archivos estáticos

python manage.py migrate python manage.py collectstatic --noinput

5. 🚀 Configuración de Gunicorn

Instala Gunicorn:

pip install gunicorn

Prueba que funcione:

gunicorn --bind 0.0.0.0:8000 proyecto.wsgi:application

6. ⚙️ Configuración de Systemd

Crea un servicio para tu app en /etc/systemd/system/miapp.service:

[Unit] Description=Gunicorn instance to serve Django app After=network.target [Service] User=usuario Group=www-data WorkingDirectory=/home/usuario/proyecto ExecStart=/home/usuario/proyecto/venv/bin/gunicorn --workers 3 --bind unix:/home/usuario/proyecto/miapp.sock proyecto.wsgi:application [Install] WantedBy=multi-user.target

Activa el servicio:

sudo systemctl start miapp sudo systemctl enable miapp

7. 🌐 Configuración de Nginx

Instala Nginx:

sudo apt install nginx -y

Configura un bloque de servidor en /etc/nginx/sites-available/miapp:

server { listen 80; server_name midominio.com www.midominio.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/usuario/proyecto; } location / { include proxy_params; proxy_pass http://unix:/home/usuario/proyecto/miapp.sock; } }

Habilita la configuración:

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

8. 🔒 Certificado SSL con Let’s Encrypt

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

✅ Conclusión

Ya tienes tu aplicación Django desplegada en un VPS con Ubuntu, lista para producción con PostgreSQL, Gunicorn, Nginx y SSL.

📌 Si quieres ver más detalles paso a paso, junto con ejemplos avanzados (Docker, automatización, multitenant, seguridad y más), revisa el curso completo aquí:

👉 Curso en Udemy: Despliegue de aplicaciones Django en varias plataformas VPS



O mira si está en descuento actualmente en este enlace:



🚀Guía: Deploy local de Django + PostgreSQL + Gunicorn + Nginx en Red Hat

Guía: Deploy local de Django + PostgreSQL + Gunicorn + Nginx en Red Hat




Escenario: vamos a correr la app en Red Hat, accesible en http://localhost, con PostgreSQL local, Gunicorn como WSGI y Nginx como reverse proxy.

Supuesto: el proyecto Django ya existe y llega desde GitLab.

0) Preparación del sistema

sudo dnf update -y
sudo dnf install -y git python3 python3-pip python3-venv nginx
sudo dnf install -y postgresql-server postgresql-contrib postgresql-devel
sudo dnf install -y gcc python3-devel
sudo dnf install -y policycoreutils-python-utils

1) Clonar el proyecto desde GitLab

mkdir -p ~/apps && cd ~/apps
git clone git@gitlab.com:tu-usuario/tu-proyecto.git
cd tu-proyecto

2) Crear entorno virtual e instalar dependencias

python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip wheel
pip install -r requirements.txt
pip install "psycopg[binary]"

3) Configurar PostgreSQL

sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql

Crear DB y usuario:

sudo -u postgres psql
CREATE DATABASE myprojectdb;
CREATE USER myprojectuser WITH PASSWORD 'cambia-esta-clave';
GRANT ALL PRIVILEGES ON DATABASE myprojectdb TO myprojectuser;
\q

4) Configurar Django

En settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'myprojectdb',
        'USER': 'myprojectuser',
        'PASSWORD': 'cambia-esta-clave',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'static'

5) Migraciones y estáticos

python manage.py migrate
python manage.py collectstatic
python manage.py createsuperuser

6) Configurar Gunicorn (systemd)

sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=Gunicorn for Django
After=network.target

[Service]
User=tuusuario
Group=nginx
WorkingDirectory=/home/tuusuario/apps/tu-proyecto
ExecStart=/home/tuusuario/apps/tu-proyecto/.venv/bin/gunicorn \
  --workers 3 \
  --bind unix:/run/gunicorn/myproject.sock \
  myproject.wsgi:application

[Install]
WantedBy=multi-user.target
sudo systemctl start gunicorn
sudo systemctl enable gunicorn

7) Configurar Nginx

sudo nano /etc/nginx/conf.d/myproject.conf
server {
    listen 80;
    server_name localhost;

    location /static/ {
        alias /home/tuusuario/apps/tu-proyecto/static/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn/myproject.sock;
    }
}
sudo nginx -t
sudo systemctl restart nginx

8) Flujo de actualización desde GitLab

cd ~/apps/tu-proyecto
git pull origin main
source .venv/bin/activate
pip install -r requirements.txt --upgrade
python manage.py migrate
python manage.py collectstatic --noinput
sudo systemctl restart gunicorn
sudo systemctl reload nginx

✅ Diferencias con Ubuntu

  • Gestor de paquetes: apt (Ubuntu) vs dnf/yum (Red Hat).
  • Nginx: en Red Hat usa conf.d/, en Ubuntu sites-available/enabled.
  • Firewall: ufw (Ubuntu) vs firewalld (Red Hat).
  • SELinux: en Red Hat suele estar activo (etiquetas extra).

Autor: Daniel Bojorge - Debs Consultores


Aprende más en los cursos de udemy:

 
>