GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo instalar Django con PostgreSQL y Nginx en Ubuntu 16.04

Django es un marco web gratuito de código abierto basado en Python. Es un marco web de Python de alto nivel con un patrón de arquitectura MVT (Model-View-Template). Django es mantenido por Django Software Foundation (DSF). El marco web de Django es rápido, ayuda a los desarrolladores a crear aplicaciones rápidamente (RAD).

En este tutorial, le mostraré cómo instalar el marco web Django y configurarlo para usar una base de datos PostgreSQL para el desarrollo. Ejecutaremos Nginx como un proxy inverso para el marco web de Django por razones de velocidad y seguridad. Django se ejecutará bajo el servidor python WSGI HTTP 'Gunicorn', gestionaremos y controlaremos 'Gunicorn' con 'Supervisor' como sistema de control de procesos.

Requisito previo

  • Ubuntu 16.04
  • Privilegios de raíz

Paso 1:instalar Django, Virtualenv y Gunicorn

Usaré python3 como la versión predeterminada de Python para el sistema. Instalaremos python3 y pip3 en Ubuntu 16.04. Pip3 es un sistema de administración de paquetes para instalar y administrar paquetes de software escritos en python.

Conéctese a su servidor como usuario root en la terminal o por SSH (como lo hago aquí) y actualice el repositorio de Ubuntu:

ssh [email protected]
sudo apt-get update

Instale python3 y pip3 con este comando apt:

sudo apt-get install python3-pip python3-dev

Cree un nuevo enlace simbólico para el comando pip3 para poder usarlo como "pip" en lugar de "pip3" y actualícelo:

ln -s /usr/bin/pip3 /usr/bin/pip
pip install --upgrade pip

A continuación, instale los paquetes de Python necesarios con el comando pip. Instalaré Django, Virtualenv y Gunicorn aquí:

pip install django virtualenv gunicorn

Paso 2:instalar y configurar PostgreSQL

Usaremos PostgreSQL como base de datos para nuestro proyecto Django. Instale PostgreSQL con este comando apt.

sudo apt-get install postgresql postgresql-contrib libpq-dev

Cuando finalice la instalación, instale el nuevo paquete de python llamado 'psycopg2' con pip. Es el adaptador de base de datos python-postgreSQL.

pip install psycopg2

Ahora acceda al usuario de postgres y abra el shell de PostgreSQL con el comando psql:

su - postgres
psql

Establezca una nueva contraseña para el usuario de postgres con el siguiente comando:

\password postgres
Enter new password:

A continuación, cree una nueva base de datos y un nuevo usuario/rol para el proyecto django en PostgreSQL. Crearé nuevas bases de datos llamadas 'django_db' con el usuario/rol 'python_dev'. Escriba el siguiente comando en el shell de PostgreSQL.

CREATE USER python_dev WITH PASSWORD 'aqwe123';
CREATE DATABASE django_db OWNER python_dev;

Consulte la lista de bases de datos y el rol:

\list

Paso 3:iniciar un nuevo proyecto Django

Inicie el primer proyecto de Django con el nombre 'hello_django'. No vamos a usar privilegios de root para el proyecto, usaré un usuario normal de Linux 'natsume' para el proyecto. Siéntete libre de usar un nombre de usuario diferente que describa tu proyecto.

Crear un nuevo usuario

Cree un nuevo usuario de Linux con el siguiente comando:

useradd -m -s /bin/bash natsume
passwd natsume

-m =Crear automáticamente el directorio de inicio.
-s =Definir el shell predeterminado para el usuario.

Crear nuevo Virtualenv e instalar Django

Inicie sesión en el usuario natsume:

su - natsume

Cree un nuevo entorno virtual en el directorio 'myproject' para nuestro proyecto Django con python3 como la versión predeterminada de python.

mkdir myproject
virtualenv --python=python3 myproject/

Vaya al directorio 'myproject' y active virtualenv.

cd myproject/
source bin/activate

A continuación, instale Django, gunicorn y psycopg2 con el comando pip en ese entorno.

pip install django gunicorn psycopg2

Iniciar nuevo proyecto con PostgreSQL

Inicie el proyecto Django 'hello_django' con el siguiente comando django-admin:

django-admin startproject hello_django

Creará un nuevo directorio 'hello_django', vaya a ese directorio y edite el archivo de configuración 'setting.py' con vim.

cd hello_django/
vim hello_django/settings.py

Cambie la configuración de la base de datos en la línea 76 con la configuración a continuación:

        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'django_db',
        'USER': 'python_dev',
        'PASSWORD': 'aqwe123',
        'HOST': 'localhost',
        'PORT': '',

Al final del archivo, configure la URL estática agregando la línea de configuración STATIC_ROOT a continuación:

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

Guardar y salir.

Luego, migre la base de datos a nuestra base de datos postgreSQL y cree un nuevo usuario administrador. Luego recopile todos los archivos estáticos en el directorio estático que se crea automáticamente cuando ejecutamos el comando.

python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic

Asegúrese de que no haya ningún error y realice una prueba de ejecución del servidor de proyectos django con el comando runserver.

python manage.py runserver 0.0.0.0:8080

Abra su navegador web y visite la dirección IP del servidor en el puerto 8080, en mi caso http://192.168.1.115:8080. Verá la página predeterminada de Django.

Presione Ctrl + c para salir.

Paso 4:configurar el proyecto Django con Gunicorn

Gunicorn o Green Unicorn es un servidor HTTP WSGI de Python bifurcado del proyecto Ruby Unicorn. Admite varios marcos web y es fácil de configurar.

Vaya al directorio 'myproject' y active el entorno virtual para el directorio de inicio del usuario natsume.

cd ~/myproject/
source bin/activate

Cree un nuevo archivo 'gunicorn_start' dentro del directorio bin con vim:

vim bin/gunicorn_start

Pegue la configuración a continuación:

#!/bin/bash

# Project Name
NAME="hello_django"                       

# Django Project Directory
DJANGODIR=/home/natsume/myproject/hello_django          

# Run gunicorn on the socket file
SOCKFILE=/home/natsume/myproject/hello_django/run/gunicorn.sock

# Gunicorn running as user and group
USER=natsume
GROUP=natsume

# Workers
NUM_WORKERS=3

#Module Setting
#replace hello_django with your project name
DJANGO_SETTINGS_MODULE=hello_django.settings
DJANGO_WSGI_MODULE=hello_django.wsgi

echo "Starting $NAME as `whoami`"

# Activate the virtual environment
cd $DJANGODIR
source ../bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-

Guardar y salir.

Haga que el archivo sea ejecutable con el comando chmod.

chmod u+x bin/gunicorn_start

Paso 5:Instalar y configurar Supervisor

Supervisor es un sistema de control de procesos para sistemas operativos Linux. Le permite configurar, monitorear y controlar una serie de procesos en Linux. Supervisor está basado en python, podemos instalarlo desde el repositorio de python pypi con el comando pip o instalarlo desde el repositorio de ubuntu con apt.

Instalaré supervisor con este comando apt:

sudo apt-get install supervisor

Supervisor tiene un archivo de configuración predeterminado en el directorio '/ect/supervisor/'. Vaya a ese directorio y cree una nueva configuración para nuestro proyecto Django para que podamos controlarlo con el supervisor.

cd /etc/supervisor/conf.d/
vim hello-django.conf

Pegue la configuración de Supervisor a continuación:

[program:hello_django]
command = sh /home/natsume/myproject/bin/gunicorn_start
user = natsume
stdout_logfile = /home/natsume/myproject/logs/gunicorn_supervisor.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

Guardar y salir.

A continuación, inicie sesión con el usuario natsume y cree algunos directorios necesarios para el archivo de socket gunicorn y el archivo de registro del supervisor.

su - natsume

# Directory for gunicorn sock file
mkdir -p myproject/hello_django/run/

# Directory and file for supervisor log files
mkdir -p myproject/logs/
touch myproject/logs/gunicorn_supervisor.log

Regrese al usuario raíz con "salir" e inicie Supervisor:

exit
systemctl start supervisor

Consulta el estado y log del proceso:

supervisorctl
tail -f hello_django

Paso 6:instalar y configurar Nginx para el proyecto Django

En este paso, instalaremos Nginx y lo configuraremos como un proxy inverso para nuestro proyecto Django.

Instale Nginx desde el repositorio de Ubuntu:

sudo apt-get install nginx

Vaya al directorio de configuración del host virtual de Nginx y cree un archivo de host virtual hello_django:

cd /etc/nginx/sites-available/
vim hello_django

Pegue la configuración a continuación:

# Django running with Gunicorn Sock file
upstream hello_django_project {
    server unix:/home/natsume/myproject/hello_django/run/gunicorn.sock fail_timeout=0;
}

server {

    listen   80;
    server_name www.django-nginx.com;

    client_max_body_size 4G;

    access_log /home/natsume/myproject/logs/nginx-access.log;
    error_log /home/natsume/myproject/logs/nginx-error.log;

    location /static/ {
        alias   /home/natsume/myproject/hello_django/static/;
    }

    location /media/ {
        alias   /home/natsume/myproject/hello_django/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

    # Try to serve static files from nginx, no point in making an
    # *application* server like Unicorn/Rainbows! serve static files.
    if (!-f $request_filename) {
        proxy_pass http://hello_django_project;
        break;
        }
   

# Error pages
    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /home/natsume/myproject/hello_django/static/;
        }
    }
}

Guardar y salir.

Active el host virtual y pruebe la configuración de Nginx.

ln -s /etc/nginx/sites-available/hello_django /etc/nginx/sites-enabled/
nginx -t

Asegúrese de que no haya ningún error, luego reinicie Nginx:

systemctl restart nginx

Paso 7 - Probar Django

En el paso 5, creamos un host virtual para nuestro proyecto Django con el nombre de dominio 'www.django-nginx.com'. Abra su navegador y visite el nombre de dominio que ha elegido para su proyecto.

www.django-nginx.com/admin/

Y será redirigido al panel de administración de Django.

Comprobando que todos los servicios que hemos configurado se están ejecutando con el siguiente comando:

netstat -pl

Verá el pid, el puerto y el archivo sock utilizados por todos los servicios.

La instalación y configuración de Django con PostgreSQL y Nginx en Ubuntu 16.04 ha sido exitosa.

Enlaces

  • https://www.djangoproject.com/
  • https://www.nginx.com/
  • http://gunicorn.org/
  • http://supervisord.org/

Ubuntu
  1. Cómo instalar Mattermost con PostgreSQL y Nginx en Ubuntu 16.04

  2. Cómo instalar MediaWiki con Nginx en Ubuntu 16.04

  3. Cómo instalar Magento 2 con Nginx y Letsencrypt en Ubuntu 18.04

  4. Cómo instalar Postgresql y phpPgAdmin en Ubuntu 15.04

  5. Cómo instalar Nginx con PHP5 y MySQL en Ubuntu 11.10

Cómo instalar Redmine 3.2 con Nginx en Ubuntu 16.04

Cómo instalar OSClass con Nginx en Ubuntu 20.04

Cómo instalar Nginx con ModSecurity en Ubuntu 15.04

Cómo instalar Nextcloud 13 en Ubuntu 16.04 con Nginx

Cómo instalar y configurar PostgreSQL en Ubuntu

Cómo instalar y configurar Nginx en Ubuntu 20.04 y Ubuntu 21.04