Linux serverNETWORK ADMINISTRATIONS

Cómo publicar una aplicación web con Django, Nginx, PostgreSQL y Gunicorn en Centos 8

Cómo instalar nginx en Centos 8:

Cómo instalar postgresql en Centos 8:

Instalar Python y librerías necesaria de postgresql:
sudo dnf install python3 postgresql-devel

Crear usuario y bd para nuestra aplicación:
sudo su postgres
psql
CREATE DATABASE app;
CREATE USER app_user WITH PASSWORD ‘1245678’;
ALTER ROLE app_user SET client_encoding TO ‘utf8’;
ALTER ROLE app_user SET default_transaction_isolation TO ‘read committed’;
ALTER ROLE app_user SET timezone TO ‘UTC’;
GRANT ALL PRIVILEGES ON DATABASE app to app_user;
q
exit

Configurando archivo de postgresql para habilitar las conexiones a nuestro usuario:
sudo nano /var/lib/pgsql/data/pg_hba.conf

Reiniciando servicio para que tome la nueva configuración:
sudo systemctl restart postgresql

Instalar virtualenv:
sudo pip3 install virtualenv

Otorgando permisos a mi usuario al directorio donde estará nuestra página:
sudo chown -R $USER:$USER /var/www/web.django.com/

Creando nuestro entorno virtual y entrando al el.
virtualenv appenv
source appenv/bin/activate

Actualizando pip
python -m pip install –upgrade pip

Instalando en nuestro entorno django, gunicorn y pyscopg2:
pip3 install django gunicorn psycopg2-binary
django-admin.py startproject app

Abriendo archivo de settings de nuestro proyecto:
sudo nano app/app/settings.py

Configuración de la base de datos en settings.py:

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’,
‘NAME’: ‘app’,
‘USER’: ‘app_user’,
‘PASSWORD’: ‘12345678’,
‘HOST’: ‘localhost’,
‘PORT’: ”,
}
}

STATIC_ROOT = os.path.join(BASE_DIR, “static/”)

Aplicando las migraciones y generando los archivos estáticos de la web:
./manage.py makemigrations
./manage.py migrate
./manage.py createsuperuser
./manage.py collectstatic

Abriendo puerto 8000 para probar servicios:
sudo firewall-cmd –permanent –zone=public –add-port=8000/tcp
sudo firewall-cmd –reload

Ejecutando servidor web de python y gunicorn:
./manage.py runserver 0.0.0.0:8000
gunicorn –bind 0.0.0.0:8000 app.wsgi:application

Creando app de prueba:
./manage.py startapp prueba

Creando sitio de hola mundo basado en el tutorial de django:
https://docs.djangoproject.com/es/3.0/intro/tutorial01/

Creando archivo para ejecutar guinicorn como servicio:
sudo nano /etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=nginx
Group=rborja
WorkingDirectory=/var/www/web.django.com/app/
ExecStart=/var/www/web.django.com/appenv/bin/gunicorn –workers 3 –bind unix:/var/www/web.django.com/app/app.sock app.wsgi:application

[Install]
WantedBy=multi-user.target

Iniciando servicio de gunicorn, revisando estatus y configurandolo para que inicie automáticamente:
sudo systemctl start gunicorn
sudo systemctl status gunicorn
sudo systemctl enable gunicorn

Asignando permisos al usuario nginx para que acceda a los archivos de mi sitio:
sudo usermod -a -G rborja nginx

Creando mi archivo de mi configuración para mi sitio de nginx:
cd /etc/nginx/conf.d
sudo nano web.django.com.conf

server {
listen 80;
server_name web.django.com;

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/web.django.com/app;
}

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/var/www/web.django.com/app/app.sock;
}

}

Si quieres apoyarme y darme para un chocolate puedes hacerlo por aquí: https://paypal.me/RodolfoBorjaLopez

———————————————————————————————————
Sígueme en twitter ⇒ https://twitter.com/rborjanet
Mi sitio web ⇒ https://rborja.net

#django #nginx #gunicorn

source

centos 8

9 thoughts on “Cómo publicar una aplicación web con Django, Nginx, PostgreSQL y Gunicorn en Centos 8

  • Saludos, es laborioso pero funcional, y para los mortales Rodolfo esto se puede aplicar a Debian/su derivados o es exclusivo para centos, que opinas, muchas gracias

  • Mi puerto 8000 está abierto y python es capaz de correr la aplicación django, pero no la muestra cuando busco la ip, solo me funciona en el puerto 80 🙁 AYUDA

  • hola, quería saber si podrías explicar o poner en estos comentarios como sería con este mismo caso que está en el video pero con Apache. Desde ya muchas gracias.

  • Archivos en public_html?
    Todo el proyecto debe ponerse dentro del directorio public_html, o al mismo nivel?

  • @Rodolfo Borja … Gracias por tu video. Me da este error "gunicorn.service main process exited code=exited status=203/exec" al realizar * sudo systemctl start gunicorn * Alguna solución ? Muchas gracias

  • Buenas Rodolfo. Estoy por aqui por hdeleon y queria aporvecha para saber si tienes pendiente el realizar videos con contenedores, digase Docker, kubernetes, Azure Container Service, entre otros. Gracias.

Comments are closed.