En este video veremos cómo publicar una aplicación hecha con el framwork de Python llamado Django, para esto utilizaremos los siguientes aplicaciones en nuestro servidor: Nginx, PostgreSQL, Python, Django y Gunicorn.

A continuación enlisto la mayoría de los comandos e instrucciones utilizados durante el video:

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

Crear usuario y base de datos 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;
    }
}

Rodolfo Borja

Me encanta la tecnología y los chocolates y me da satisfacción poder ayudar a otras personas compartiendo mis conocimientos, estudié ingeniería en computación y me dedico al giro del desarrollo software y servicios desde hace más de 15 años.

View all posts

Add comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicidad

¿Me donas para un chocolate?