domingo, 24 de agosto de 2025

馃殌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:

0 comentarios:

Publicar un comentario

¿Tienes alg煤n comentario? ¿Qu茅 te ha parecido este art铆culo? Cu茅ntalo.

 
>