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 pippython -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
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;
}
}
Add comment