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: