En este tutorial vamos a explicar como agregar una aplicación a una instancia de Dokku, un pequeño Platform-as-a-Service que permite correr tus aplicaciones en una maquina virtual.
Hay distintos tipos de aplicaciones para levantar en Dokku, algunas de ellas son: Python, NodeJs, MySQL/MariaDB y MongoDB
Como primer paso nos tenemos que conectar al servidor mediante ssh (si es que no se esta hosteando la aplicación en la máquina local)
ssh user@server.coop
sudo su
su dokku
Luego vamos a crear una nueva aplicación con Dokku, para ello ejecutamos el siguiente comando reemplazando NUEVO_PROYECTO
por el nombre que se le quiere dar a la apliación
dokku apps:create NUEVO_PROYECTO
Apliación de Django (Python)
Cuando estas creando una aplicación Django, ésta no pueden tener «_» underscore en el nombre de host. De lo contrario te saldría el siguiente error:
The domain name provided is not valid according to RFC 1034/1035.
Request Method: GET
Si se tiene que ejectuar algo después de la instalación, hay que crear el script /bin/post_compile
Aplicación en Node.js
Cuando se esta creando una aplicación Node, es importante instalar todas las dependencias de desarrollo (dev) ya que muchas veces son necesarias para hacer los builds.
Para ello luego de crear la aplicación, vamos a agregar al proyecto la variable NPM_CONFIG_PRODUCTION
en false
con el siguiente comando:
dokku config:set NUEVO_PROYECTO NPM_CONFIG_PRODUCTION=false
Generalmente las aplicaciones trabajan con alguna base de datos. Para esto vamos a configurar una base de datos relacional como MySQL o MariaDB y otro ejemplo con una base de datos no relacional como MongoDB.
Crear Servicio de MySQL / MariaDB
Para crear un servicio de base de datos MySQL o MariaDB, ejecutamos el siguiente comando reemplazando NUEVO_SERVICIO
por el nombre que va a llevar el servicio.
Luego tenemos que vincular el servicio a la aplicación ya creada, para ello ejecutamos el segundo comando reemplazando NUEVO_PROYECTO
por la aplicación y NUEVO_SERVICIO
por el nombre del servicio de la base de datos
dokku mariadb:create NUEVO_SERVICIO
dokku mariadb:link NUEVO_PROYECTO NUEVO_SERVICIO
Crear Servicio de MongoDB
Para cerar un servicio de base de datos Mongo, primero debemos crear dicho servicio corriendo el siguiente comando y reemplazando donde dice NUEVO_SERVICIO
por el nombre que le queremos dar al servicio.
dokuu mongo:create NUEVO_SERVICIO
Luego hay que vincular el nuevo servicio de la base de datos con su aplicación. Para ello ejecutamos el siguiente comando reemplazando donde dice NUEVO_SERVICIO
por el nombre del servicio creado y NUEVO_PROYECTO
por el nombre del la aplicación.
dokku mongo:link NUEVO_SERVICIO NUEVO_PROYECTO
Si se desea importar un dump a una base de datos ya creada en Dokku, tendrías que ejecutar el siguiente comando, reemplazando donde dice NUEVO_SERVICIO
por el nombre del servicio de la base de datos y donde dice FILE
por el archivo .tar
del dump que se desea importar.
dokku mongo:import NUEVO_SERVICIO < FILE.tar
Configuración de Variables de entorno
Para configurar varialbes de entorno lo primero que hay que hacer es declarar que se va a configurar una aplicación, para ello ejecutamos el siguiente comando, reemplazando donde dice NUEVO_PROYECTO
por el nombre de la aplicación a la que se le desea configurar las variables.
dokku config NUEVO_PROYETCO
Si a la aplicación se le configuró un servicio de base de datos Mongo, la variable MONGO_URL
ya debería estar setea automáticamente.
Si se desean configurar múltiples variables de entorno para db, col, uri, se deberían configurar de la siguiente manera, reemplazando donde dice NUEVO_PROYECTO
por el nombre de la aplicación y donde dice xxxx
por el valor de la variable a configurar.
dokku config:set NUEVO_PROYECTO MONGO_URI=xxxx
Deploy
Si lo que se desea deployar es el repositorio entero, se debería realizar de la siguiente manera, reemplazando NUEVO_PROYECTO
por el nombre de la aplicación creada en Dokku y donde dice INSTANCIA_DOKKU
por el nombre de la instancia de Dokku donde se esta trabajando.
git push dokku@INSTANCIA_DOKKU:NUEVO_PROYECTO +HEAD:refs/heads/master
Si esta dentro de un directorio lo que queres deployar:
Si lo que se desea deployar esta contenido en un directorio específico, se debería realizar de la siguiente manera, reemplazando NUEVO_PROYECTO
por el nombre de la aplicación que se encuentra en Dokku, donde dice INSTANCIA_DOKKU
por el nombre de la instancia de Dokku donde se esta trabajando y donde dice DIRECTORIO
por la ubicación del directorio que debe ser pusheado.
git subtree push --prefix DIRECTORIO dokku@INSTANCIA_DOKKU:NUEVO_PROYECTO master
*Proximamente saldrá un post donde se explicará como agregar los certificados SSL a una aplicación en Dokku utilizando let’s encrypt*