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

     

    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.

     

    Etiquetas:

    Deja una respuesta

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