Cómo publicar una aplicación web con Django, Nginx, PostgreSQL y Gunicorn en Centos 8
Rodolfo Borja
Cómo instalar nginx en Centos 8: https://youtu.be/gD3-jdUaZs8
Cómo instalar postgresql en Centos 8: https://youtu.be/HG0kJaExC3A
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 ... https://www.youtube.com/watch?v=HaJ5LK-3tyM
140640056 Bytes