Django

Creando una aplicación Django en Ubuntu Server

Creando una aplicación Django en Ubuntu Server
Django es una plataforma común para desarrollar sitios web, aplicaciones web y API web. Hay muchas ventajas de usar el marco de Django para su proyecto como su herramienta y si no está seguro de que sea el adecuado, solo necesita mirar las muchas marcas de renombre que usan Django en su pila.

Implementar Django en un entorno de producción por primera vez puede ser una tarea abrumadora. A menudo, los desarrolladores lanzarán una instancia de Linux en la nube para su entorno de producción.

En este tutorial, le mostraremos cómo iniciar Django en producción, utilizando una instancia nueva de Ubuntu.

Asumiremos que toda su edición se realiza en el servidor y que está ejecutando los comandos como root.

Para este tutorial, usamos Ubuntu 18.04.2 LTS

Creando un usuario para el proyecto

Crearemos un nuevo usuario, django, para ejecutar nuestra aplicación. Esto proporciona un ligero beneficio de seguridad.

Para crear el nuevo usuario:

useradd -m django

La -m bandera crea un nuevo directorio de inicio: / home / django.

Configurar el entorno de Python

Lo primero es lo primero: actualice sus listas de paquetes con apt-get update

Ubuntu 18.04 se envía con Python 3.6, pero no se envía con pip, que necesitará para instalar sus dependencias.

apt-get install python3-pip

Ahora que tenemos pip, creemos un entorno virtual. Los entornos virtuales ayudan a evitar conflictos con los paquetes de Python utilizados por Linux.

pip3 instalar virtualenv
cd / home / django
virtualenv env

Ahora que ha creado un Python 3 virtual.6 ambiente en el / home / django / env carpeta que se puede activar con el siguiente comando: Ahora que tenemos pip, creemos un entorno virtual. Los entornos virtuales ayudan a evitar conflictos con los paquetes de Python utilizados por Linux.

fuente / inicio / django / env / bin / activar

Configurando el proyecto Django

Para este tutorial, crearemos un proyecto Django temporal. Si está implementando su propio código, tendrá que cargarlo en el servidor. Estaremos operando en el directorio de inicio, / home / django.Configurando el proyecto Django

Creemos el proyecto Django:

cd / home / django
env de origen / bin / activar
pip instalar django
tutorial de startproject de django-admin

Verifique que todo funcione ejecutando:

tutorial de cd
Python administrar.py runserver 0.0.0.0:80

Nuestra instancia de Ubuntu se ejecuta a 178.128.229.34, así que nos conectaremos a http: // 178.128.229.34.Verifique que todo funcione ejecutando:

Probablemente verá algo como esto:

Para solucionar este problema, editaremos / home / django / tutorial / tutorial / settings.py. Encontrar ALLOWED_HOSTS = [] y configúrelo en:

ALLOWED_HOSTS = [
178.128.229.34 '# reemplace esto con la dirección IP de su servidor
o el nombre de dominio que estás usando para conectarte
]

Ahora volvamos a http: // 178.128.229.34:

Estupendo! Estamos en línea!

Configurando PostgreSQL, la base de datos

De forma predeterminada, Django usa una base de datos SQLite3. Desafortunadamente, SQLite3 no permite escrituras simultáneas. Si su sitio web solo tiene un usuario que edita datos y el resto de los visitantes solo están leyendo páginas, esto podría ser apropiado. Pero si tiene varias personas editando datos al mismo tiempo, es probable que desee utilizar un backend diferente.

Las opciones comunes son PostgreSQL y Mysql. Iremos con PostgreSQL para este tutorial.

Empiece por instalar PostgreSQL:

apt-get install postgresql

Luego inicie psql, un shell de base de datos. De forma predeterminada, solo el usuario de postgres puede conectarse a la base de datos, por lo que primero tendremos que autenticarnos como ese usuario:

su - postgres
psql

A continuación, necesitamos una base de datos y un usuario para acceder a esa base de datos:

crear tutorial de base de datos;
crear usuario tutorial_user con contraseña cifrada 'tutorial_password';
conceda todos los privilegios sobre el tutorial de la base de datos a tutorial_user;

Ahora, escriba exit o presione Ctrl-D dos veces: una vez para salir de psql y una vez para cerrar la sesión del shell de postgresuser.

Estupendo! Ahora tenemos nuestra base de datos y usuario configurados. Verifiquemos que podemos iniciar sesión en nuestra base de datos.

Intentaremos abrir un shell de base de datos, esta vez iniciando sesión en la base de datos que creamos con el usuario que creamos:

psql -Ututorial_user -dtutorial -h127.0.0.1 -W

Cuando se le solicite, ingrese la contraseña que creamos: tutorial_password.

Si ve un shell de base de datos, ha tenido éxito. Si ve algún error, tendrá que volver atrás y averiguar qué está mal.

Conectando Django a la base de datos

Para conectar Django a la base de datos, primero necesitamos instalar el adaptador Python PostgreSQL:

pip instalar psycopg2-binary

Entonces, abramos / home / django / tutorial / tutorial / settings.pyy configurar la conexión.

Encuentre su conexión de base de datos actual; si no lo modificó, podría verse así:

BASES DE DATOS =
'defecto':
'MOTOR': 'django.db.backends.sqlite3 ',
'NOMBRE': os.camino.unirse (BASE_DIR, 'db.sqlite3 '),

Para conectarse a PostgreSQL, lo reemplazaremos con lo siguiente:

BASES DE DATOS =
'defecto':
'MOTOR': 'django.db.backends.postgresql_psycopg2 ',
'NAME': 'tutorial',
'USUARIO': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'ANFITRIÓN': '127.0.0.1 ',
'PUERTO': '5432',

Probemos la conexión:

cd / home / django / tutorial
Python administrar.py runserver 0.0.0.0:80

Debería poder volver a visitar su sitio web (para nosotros en http: // 178.128.229.34 /, pero reemplácelo con su IP o nombre de host).

Si todo va bien, podemos continuar.

Configurando nginx, el servidor web

Cuando corres Python administrar.py runserver, estás usando el servidor de desarrollo de Django. Esto es excelente para el desarrollo local, pero al igual que con SQLite3, no es realmente adecuado para la producción.

Las opciones comunes para los servidores web de producción son nginx y Apache. Para este tutorial, usaremos nginx.

Instale nginx usando lo siguiente:

apt-get install nginx

Ahora, si todo ha funcionado bien, nginx debería ejecutarse en el puerto 80. Adelante, visite su sitio web; debería ver:

Genial, entonces nginx está en funcionamiento! A continuación, necesitaremos configurarlo para comunicarse con Django. Abra el archivo de configuración de nginx, ubicado en / etc / nginx / sites-available / default. Reemplacemos el archivo con lo siguiente:

aguas arriba de django
servidor 127.0.0.1: 8000;

servidor
escucha 80;
localización /
try_files $ uri @send_to_django;

ubicación @send_to_django
proxy_set_header Host $ http_host;
proxy_redirect off;
proxy_pass http: // django;

Pruebe el archivo de configuración ejecutando nginx -t. Si todo está bien, podemos recargar ejecutando nginx -s reload.

Ahora, si visita su sitio, verá lo siguiente:

Siempre que vea esto, significa que nginx no pudo pasar la solicitud al proceso ascendente. Por el momento, es porque está intentando pasar la solicitud a 127.0.0.1: 8000 pero no hay ningún proceso escuchando en esa dirección.

Iniciemos el servidor de desarrollo de Django e intentemos de nuevo:

cd / home / django / tutorial
Python administrar.py runserver 127.0.0.1: 8000

y vuelva a visitar su sitio web. Debería ver su aplicación Django.

Montaje de Django en Gunicorn

Recuerde, no queremos usar nuestro servidor de desarrollo Django en producción. En su lugar, usaremos un servidor Web Server Gateway Interface (WSGI) para ejecutar Django. Nginx pasará la solicitud al servidor WSGI, que ejecuta Django.

Las opciones comunes para un servidor WSGI son Gunicorn y uWSGI. Para este tutorial usaremos Gunicorn.

Instalemos Gunicorn:

pip instalar gunicorn

A continuación, podemos iniciar gunicorn de la siguiente manera:

cd / home / django / tutorial
tutorial de gunicorn.wsgi

Ahora debería poder visitar su sitio web y ver que su aplicación se ejecuta correctamente.

Ejecutar Gunicorn como servicio

Hay algunos problemas al ejecutar gunicorn de esta manera:

  1. Si cerramos la sesión SSH, el proceso de gunicorn se detendrá.
  2. Si el servidor se reinicia, el proceso de gunicorn no se iniciará.
  3. El proceso se está ejecutando como root. Si los piratas informáticos encuentran un exploit en el código de nuestra aplicación, podrán ejecutar comandos como root. No queremos esto; pero es por eso que creamos el djangouser!

Para resolver estos problemas, ejecutaremos Gunicorn como un servicio systemd.

cd / home / django
contenedor mkdir
cd / home / django / bin
toque el servidor de inicio.sh

En el servidor de inicio.sh:

cd / home / django
env de origen / bin / activar
tutorial de cd
tutorial de gunicorn.wsgi

Ahora puedes probar el script:

cd / home / django / bin
servidor de inicio de bash.sh
# visite su sitio web, debería estar funcionando

Ahora creamos el servicio systemd para Gunicorn. Cree / etc / systemd / system / gunicorn.servicio de la siguiente manera:

[Unidad]
Descripción = Gunicorn
Después = red.objetivo
[Servicio]
Tipo = simple
Usuario = django
ExecStart = / inicio / django / bin / start-server.sh
Reiniciar = en caso de falla
[Instalar en pc]
WantedBy = multiusuario.objetivo

Ahora, habilitemos el servicio e inícielo

systemctl habilitar gunicorn
systemctl start gunicorn

Debería poder ver su sitio web en este momento.

Podemos apagar gunicorn de la siguiente manera:

systemctl detener gunicorn

Y debería ver un 502 Bad Gateway.

Finalmente, revisemos el ciclo de arranque:

systemctl start gunicorn
reinicie ahora

Cuando su máquina vuelva a estar en línea, debería ver que su sitio web está activo.

Archivos estáticos

Si visita el panel de administración de Django en su sitio web en / admin / (para nosotros, es http: // 178.128.229.34 / admin /), notará que los archivos estáticos no se cargan correctamente.

Necesitaremos crear una nueva carpeta para archivos estáticos:

cd / home / django
mkdir estático

Luego, le decimos a Django que es donde debe colocar los archivos estáticos editando / home / django / tutorial / tutorial / settings.py y agregando:

RAÍZ_ESTÁTICA = '/ inicio / django / static /'

Ahora podemos recopilar los archivos estáticos:

cd / home / django
env de origen / bin / activar
tutorial de cd
Python administrar.Py Collectstatic

Finalmente, necesitamos decirle a nginx que sirva esos archivos estáticos.

Abramos / etc / nginx / sites-available / default y agreguemos lo siguiente directamente sobre su ubicación / bloque:

location / static /
root / home / django;
try_files $ uri = 404;

El archivo completo ahora debería verse así:

aguas arriba de django
servidor 127.0.0.1: 8000;

servidor
escucha 80;
location / static /
root / home / django;
try_files $ uri = 404;

localización /
try_files $ uri @send_to_django;

ubicación @send_to_django
proxy_set_header Host $ http_host;
proxy_redirect off;
proxy_pass http: // django;

Podemos recargar el archivo usando nginx -s reload

Y voilá! Tus archivos estáticos ahora funcionarán completamente.

Conclusión

En este punto, su aplicación Django está funcionando correctamente. Si tiene algunos requisitos especiales, es posible que deba configurar una caché como Redis o una cola de mensajes como Rabbit MQ. Es posible que también desee configurar la implementación continua, ya que el procedimiento de implementación puede llevar un tiempo.

Otro paso importante es tomar los pasos apropiados para asegurar su máquina Ubuntu. De lo contrario, es posible que su servidor no funcione correctamente!

Buena suerte!

Cómo usar AutoKey para automatizar juegos de Linux
AutoKey es una utilidad de automatización de escritorio para Linux y X11, programada en Python 3, GTK y Qt. Usando su funcionalidad de scripting y MAC...
Cómo mostrar el contador de FPS en juegos de Linux
Los juegos de Linux obtuvieron un gran impulso cuando Valve anunció el soporte de Linux para el cliente Steam y sus juegos en 2012. Desde entonces, mu...
Cómo descargar y jugar Sid Meier's Civilization VI en Linux
Introducción al juego Civilization 6 es una versión moderna del concepto clásico introducido en la serie de juegos Age of Empires. La idea era bastant...