Cómo implementar una aplicación Django en Heroku con Git CLI

C

 

Introducción

Heroku es una plataforma en la nube que brinda servicios de hospedaje. Es compatible con varios lenguajes de programación, incluidos PHP, Node.js y Python. Es una plataforma como servicio (PaaS) que le permite administrar las aplicaciones del sitio web mientras se ocupa de sus servidores, redes, almacenamiento y otros componentes de la nube.

En este artículo, veremos cómo implementar una aplicación Django en Heroku, usando Git.

Puede seguir los mismos pasos e implementar la aplicación desde GitHub, si está alojada allí.

Prerrequisitos

A continuación, se muestra una lista de cosas que deben hacerse antes de comenzar con la implementación:

  • Git
  • Cuenta Heroku y CLI
  • Aplicación Django

La interfaz de línea de comandos de Heroku (CLI) facilita la creación y administración de sus aplicaciones Heroku directamente desde el terminal. Es una parte esencial del uso de Heroku.

Para instalar Heroku CLI (también conocido como Heroku Toolbelt), siga las instrucciones en el página web oficial.

Asegúrese de que su aplicación Django se esté ejecutando ambiente virtual que debe mantener activo durante todo el proceso de implementación.

Una cuenta de Heroku

Una vez que se hayan instalado todas estas cosas, el siguiente paso es crear una cuenta gratuita de Heroku aquí, si aún no tiene una cuenta.

Después de escribir lo siguiente en una terminal:

$ heroku login

La terminal debería mostrar un mensaje como:

heroku: Press any key to open up the browser to login or q to exit:

Presione cualquier tecla e inicie sesión usando su navegador. A continuación, el terminal mostrará un mensaje con las siguientes líneas:

Logged in as [email protected]

Configurar la aplicación Django para Heroku

Ahora que hemos terminado con los requisitos previos, preparemos nuestra aplicación Django para Heroku.

Procfile

UN Procfile es un archivo llamado Procfile sin ninguna extensión de archivo colocada en la raíz de su aplicación. Enumera los tipos de proceso en una aplicación y cada tipo de proceso es una declaración de un comando que se ejecuta cuando se inicia un contenedor / dinamómetro de ese tipo de proceso.

Antes de crear un Procfile, querrás instalar django gunicorn en el directorio de su proyecto:

$ pip install django gunicorn

Si bien Django se envía con su propio servidor WSGI, nuestro Procfile le dirá a Heroku que use Gunicorn para servir nuestra aplicación, que también es recomendada por Heroku.

Ahora, crea un Procfile en el directorio principal y agregue la siguiente línea:

web: gunicorn yourdjangoweb.wsgi --log-file -

Reemplazar yourdjangoweb con el nombre real de su proyecto.

Runtime.txt

Crea un archivo de texto llamado runtime.txt en el mismo directorio que el Procfile. Le dice a Heroku qué versión de Python está usando su aplicación. Si no está seguro de la versión, ingrese python --version en la terminal con tu entorno virtual Django activado.

Luego agregue la versión en runtime.txt:

python-x.x.x

Ver las versiones compatibles de Python en Heroku aquí.

Hosts permitidos

Esta es una medida de seguridad adicional en Django para evitar ataques de encabezado de host HTTP al permitir que el sitio solo se sirva en host / dominios que se agregan ALLOWED_HOSTS lista. Si Debug = True y ALLOWED_HOSTS es [] entonces solo localhost está permitido por defecto. Para implementar y servir su aplicación web en Heroku, agréguela a la lista:

ALLOWED_HOSTS = ['herokuappname.herokuapp.com']

Alternativamente, puede permitir todas las aplicaciones de Heroku omitiendo el nombre de la aplicación de esta manera:

ALLOWED_HOSTS = ['.herokuapp.com']

También puedes usar ['*'] para permitir a todos los hosts. Puede encontrar más detalles en la documentación.

Instalar paquetes

A continuación se muestran los paquetes adicionales que deben instalarse en nuestro entorno virtual.

Para conectar nuestra base de datos Django con Heroku, instale dj-database-url llamando:

$ pip install dj-database-url

Como Heroku usa bases de datos de Postgres, también necesitamos su adaptador para Python:

$ pip install psycog2

Y finalmente usaremos Ruido blanco para servir archivos estáticos en el servidor de producción. Que podemos instalar llamando a:

$ pip install whitenoise

Ya hemos configurado gunicorn, agreguemos una configuración para whitenoise y dj-database-url.

Configuración de archivos estáticos

Primero agregue configuraciones básicas para servir archivos estáticos en cualquier proyecto de Django. Puede copiar y pegar las siguientes configuraciones en su settings.py:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
PROJECT_ROOT   =   os.path.join(os.path.abspath(__file__))
STATIC_ROOT  =   os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra lookup directories for collectstatic to find static files
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)
  • Agregue WhiteNoise al MIDDLEWARE lista inmediatamente después SecurityMiddleware que debería estar en la parte superior:
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'whitenoise.middleware.WhiteNoiseMiddleware',
        
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
      ]
    
  • Añadir STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' en tus settings.py.0

Configurar la base de datos

Estamos usando dj-database-url para configurar nuestra base de datos. Agregue estas líneas en la parte inferior de su settings.py:

import dj_database_url 
prod_db  =  dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(prod_db)

Requirements.txt

Heroku reconocerá una aplicación implementada como una aplicación Python solo si tiene una requirements.txt archivo en el directorio raíz. Le dice a Heroku qué paquetes son necesarios para ejecutar su aplicación.

Nosotros podemos usar pip freeze y canalizar la salida a un requirements.txt archivo para esto:

$ pip freeze > requirements.txt

Tu requirements.txt debe incluir estos:

whitenoise==5.2.0
dj-database-url==0.5.0
Django==3.0.9
gunicorn==20.0.4
psycopg2==2.8.5
pytz==2020.1

Nota: Las versiones anteriores son utilizadas por nuestra aplicación Django y pueden diferir de la suya.

Conectar la aplicación Heroku con Git

Ahora necesitamos crear una aplicación Heroku:

$ heroku create herokuappname

Mostrará un mensaje de “hecho” con dos URL en esta línea:

Creating ⬢ herokuappname... done
https://herokuappname.herokuapp.com/ | https://git.heroku.com/herokuappname.git

Esto significa que se ha creado un repositorio de Git en la nube de Heroku para su aplicación. La URL https://herokuappname.herokuapp.com/ se usará para acceder a su aplicación en cualquier lugar, pero aún debemos hacer un paso más antes de ejecutar nuestra aplicación, es decir, debemos enviar nuestro código al repositorio.

Inicialice un repositorio vacío en el directorio de su proyecto:

$ git init
> Initialized empty Git repository in /herokuappname/.git/

Conecte su aplicación Heroku con el vacío git repositorio:

$ heroku git:remote -a herokuappname
> set git remote heroku to https://git.heroku.com/herokuappname.git

Agregue archivos al área de preparación:

$ git add .

Confirme los cambios / archivos:

$ git commit -m "first commit for all files"

Finalmente, empuje el proyecto a git repositorio alojado en Heroku:

$ git push master heroku

Si todo va bien, verá una salida como esta:

Counting objects: 26, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (26/26), 32.13 KiB | 0 bytes/s, done.
Total 26 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
.....
.....
remote: -----> Launching...
remote:        Released v1
remote:        https://herokuappname.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/herokuappname.git
[new branch]      master -> master

recopilar error estático

Es posible que obtenga un error relacionado con collectstatic cuando corres git push heroku master mando. Esto está relacionado con el directorio de archivos estáticos y puede omitirlo con el siguiente comando:

$ heroku config:set     DISABLE_COLLECTSTATIC=1  
Setting DISABLE_COLLECTSTATIC and restarting ⬢ herokuappname... done, v2  
DISABLE_COLLECSTATIC: 1

Le dirá a Heroku que no corra collectstatic comando durante la implementación de la aplicación. Puede ejecutarlo más tarde usando bower:

$ heroku run 'bower install --config.interactive=false;grunt prep;python manage.py collectstatic --noinput'

Puede ocurrir por muchas razones que incluyen pero no se limitan a:

  • Tu STATICFILES_DIRS la lista está vacía en settings.py o no configurado correctamente.
  • Tu static El directorio no contiene archivos para git para realizar un seguimiento. Puede agregar cualquier archivo temporal a su static directorio para que funcione.

Migrar la base de datos

El último paso es reflejar tu models a la base de datos de Heroku ejecutando migraciones:

$ heroku run python manage.py migrate

Eso es todo, ¡tu aplicación está funcionando en heroku! Puedes acceder a él en [appname].herokuapp.com. La URL en nuestro caso sería http://herokuappname.herokuapp.com/.

Agregar un nombre de dominio personalizado

Todas las aplicaciones de Heroku están alojadas en .herokuapp.com pero puede cambiarlo a su nombre de dominio si posee uno. El proceso es simple:

  • Iniciar sesión en Panel de Heroku
  • Seleccione su aplicación actual de la lista:
  • Seleccione Configuraciones desde la barra de navegación y desplácese hacia abajo para encontrar el Dominio sección:
  • Haga clic en Agregar dominio donde podrá agregar su nombre de dominio.

Esta opción es solo para cuentas verificadas. Se le pedirá que ingrese los detalles de la tarjeta de crédito en Heroku para verificar su cuenta. Puede encontrar más detalles sobre cómo agregar dominios y subdominios en esta página.

Conclusión

En este artículo, implementamos una aplicación Django en Heroku con un nombre de dominio personalizado, usando Git.

Además de varios servicios en la nube, Heroku también ofrece uno de los mejores tiempos de funcionamiento del servidor y soporte de equipo de seguridad y operación 24/7.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad