Tecnología

Cómo alojar su propia plataforma como servicio (PaaS) con Dokku – CloudSavvy IT

Graphic showing the Dokku logo

Gráfico que muestra el logotipo de Dokku

Dokku es una implementación de plataforma como servicio (PaaS), que puede autohospedar en su propio hardware. Dokku utiliza Docker para implementar automáticamente su código cuando git push desde su terminal.

La configuración de un servidor Dokku le permite implementar rápidamente nuevas aplicaciones utilizando el conocido flujo de trabajo de Git. Los costos de alojamiento pueden ser mucho más bajos que las soluciones comerciales de PaaS y las ofertas administradas de Kubernetes. Una vez que su servidor Dokku esté en funcionamiento, iniciar una nueva aplicación solo debería tomar unos minutos.

Empezando

Dokku admite varios métodos de instalación. Al instalar sobre hardware desnudo, utilice el secuencia de comandos de arranque oficial para descargar la última versión.

wget https://raw.githubusercontent.com/dokku/dokku/v0.24.7/bootstrap.sh
sudo DOKKU_TAG=v0.24.7 bash bootstrap.sh

El script de arranque transformará una nueva instalación de Linux en un servidor Dokku en funcionamiento. Las dependencias de software, incluido Docker, se descargarán e instalarán automáticamente. El proceso puede tardar hasta 10 minutos, dependiendo de su conexión a Internet.

Puedes ejecutar Dokku como contenedor Docker. Esto es ideal cuando utiliza un entorno en el que Docker ya está disponible.

docker run 
    --env DOKKU_HOSTNAME=example.com 
    --name doku
    -p 3022:22 
    -p 8080:80 
    -p 8443:443 
    -v /var/lib/dokku:/mnt/dokku 
    -v /var/run/docker.sock:/var/run/docker.sock 
    dokku/dokku:0.24.7

Reemplazar example.com con el nombre de host que utilizará para acceder a su servidor. Con este ejemplo, los puertos 80 y 443 estarán vinculados a los puertos de host 8080 y 8443, respectivamente. El puerto 3022 de su host se asignará al puerto 22 dentro del contenedor. Este puerto se usa para conexiones Git + SSH.

Se crea un volumen en /mnt/dokku. Los datos de la aplicación Dokku se almacenarán aquí. El socket Docker del host también se monta en el contenedor para que Dokku pueda interactuar con el demonio Docker para crear nuevos contenedores.

Configurando Dokku

Una vez completada la instalación, visite la dirección IP de su host en el navegador. Si asignó un nombre de host a Dokku, también puede usarlo aquí. Aparecerá el instalador web para guiarlo por el resto de la configuración.

Copie y pegue una clave SSH en el campo «Clave pública». Dokku aceptará cualquier conexión SSH realizada con esta clave. Puede agregar otras claves más tarde usando la CLI de Dokku.

También debe configurar el nombre de host de su instalación de Dokku si no se ha configurado. Si tiene un dominio asignado a su máquina, ingréselo aquí. De lo contrario, puede usar localhost o una dirección IP.

Cuando se ha configurado un nombre de host, Dokku puede servir automáticamente sus aplicaciones utilizando subdominios individuales. Si no tiene un dominio disponible, desmarque la casilla de verificación «Usar nombre de host virtual». En su lugar, Dokku servirá cada una de sus aplicaciones en un puerto dedicado.

Si instaló Dokku con Docker, la configuración web no es compatible. Puede agregar un nombre de host al crear el contenedor configurando el DOKKU_HOSTNAME Variable ambiental. Para agregar claves SSH, deberá conectarse al contenedor y usar la CLI de Dokku:

docker exec -it dokku dokku ssh-keys add my-key < /path/to/key

Una vez que haya configurado un nombre de host y agregado una clave SSH, Dokku debería estar listo para usar. No es posible realizar más tareas de administración mediante la interfaz de usuario web. Interactúas con Dokku a través de comandos de Git y el CLI.

Implementación de aplicaciones

¡Ahora estás listo para lanzar tu primera aplicación! Las implementaciones de Dokku comienzan con un git push. Dokku usa paquetes de compilación (Cloud Native o Herokuish) para detectar el lenguaje de programación de su aplicación y crear automáticamente una compilación.

Dokku también admite la ejecución docker build directamente si su proyecto contiene un Dockerfile. Esta funcionalidad solo se puede usar cuando los constructores basados ​​en paquetes de compilación no están disponibles para su proyecto. Puede obtener más información sobre las compilaciones directas de Docker en el Documentación de Dokku.

El uso de paquetes de construcción significa que Dokku impone pocas restricciones sobre cómo se crea su proyecto. Si está utilizando un lenguaje y un marco populares, debería poder git push para crear su implementación. Aquí hay un ejemplo de una aplicación React básica:

mkdir my-app
cd my-app
npx create-react-app .

git remote add dokku dokku@example.com:my-app
git push dokku master

Las dos últimas líneas son las más importantes. Su servidor Dokku se agrega como un control remoto de Git para que pueda enviarle código. Reemplazar example.com con la IP o el nombre de host de su instalación. La parte después de los dos puntos indica el proyecto Dokku al que presionar. No es necesario crearlo manualmente.

Una vez que se haya configurado el control remoto, estará listo para enviarle un código. El comando de ejemplo empuja el master rama hasta Dokku. Dokku tomará su proyecto, detectará automáticamente un paquete de compilación apropiado, creará una imagen de Docker e implementará su aplicación.

Adjuntar dominios de aplicaciones

Dokku implementa su aplicación en un subdominio de su nombre de host. Puede adjuntar un dominio personalizado mediante la CLI de Dokku. Asegúrese de haber configurado primero los registros DNS adecuados.

dokku domains:add my-app example.com

Visitando example.com ahora servirá a tu my-app despliegue.

Agregar SSL

Dokku facilita la habilitación de SSL para sus aplicaciones. Puede agregar un complemento que integre Dokku con Let’s Encrypt. Una vez que se ha instalado el complemento, puede adquirir certificados SSL con un solo comando.

Primero, instale el complemento:

dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

A continuación, configure el complemento Let’s Encrypt con su dirección de correo electrónico. Let’s Encrypt utilizará esta dirección para enviarle alertas relacionadas con sus certificados.

dokku config:set --global no-restart DOKKU_LETSENCRYPT_EMAIL=me@example.com

Debe agregar el trabajo cron Let’s Encrypt para asegurarse de que Dokku pueda renovar sus certificados automáticamente:

dokku letsencrypt:cron-job --add

Finalmente, habilite Let’s Encrypt para su aplicación:

dokku letsencrypt my-app

El complemento Let’s Encrypt adquirirá un certificado para cubrir los dominios conectados a su aplicación. El certificado se renovará automáticamente antes de que expire.

Actualización de su aplicación

Dokku se basa en el flujo de trabajo de Git. Puede actualizar su aplicación haciendo cambios en la base de código, creando confirmaciones de Git y luego enviando su rama a Dokku.

Cuando Dokku recibe un nuevo impulso, usa sus paquetes de compilación para construir un contenedor Docker actualizado. El contenedor que se está ejecutando actualmente se reemplazará por el nuevo una vez que se complete la compilación. Las actualizaciones son menos tiempo de inactividad y totalmente automatizado.

La duración del proceso de compilación variará según el tamaño de su aplicación y las tecnologías que utiliza. Dokku espera otros 10 segundos después de que se completa la compilación antes de que el tráfico se dirija a nuevos contenedores. Esto le da a cualquier script de arranque la oportunidad de completarse.

Dokku se puede integrar fácilmente en sistemas de integración continua (CI). La etapa final en una tubería de CI podría ser un git push dokku para actualizar su implementación en vivo.

Gestión de sucursales

Dokku generalmente implementa los cambios realizados en el master rama. Puede optar por utilizar una rama diferente mediante una configuración global o por aplicación:

dokku git:set --global deploy-branch dokku-deploy

dokku git:set my-app deploy-branch production

Con esta configuración, Dokku se desplegará por defecto desde el dokku-deploy rama. Despliegues para el my-app la aplicación se hará a partir de production en lugar de.

Hay mucho más en Dokku que la implementación básica en la que nos hemos centrado aquí. La distribución predeterminada se simplifica intencionalmente. Oficial y comunidad los complementos pueden ser utilizado para proporcionar servicios, como bases de datos y autenticación. Esto le permite usar Dokku para backends con estado, así como para sus frontends estáticos.

La configuración de un servicio es generalmente un proceso de dos pasos. Creas una instancia del servicio y luego la vinculas a tus aplicaciones. Se pueden conectar varias aplicaciones a cada instancia de servicio.

A continuación, te mostramos cómo puede agregar una base de datos MySQL a una aplicación:

dokku plugin:install https://github.com/dokku/dokku-mysql.git

dokku mysql:create demo-db

dokku mysql:link demo-db my-app

Dokku establecerá el DATABASE_URL variable de entorno dentro del contenedor de su aplicación. Puede acceder a esta variable para recuperar la cadena de conexión de MySQL. El uso de complementos de Dokku para bases de datos elimina la necesidad de administrar otro servidor de base de datos externo.

Conclusión

Docker es una solución PaaS que le permite alojar su propia plataforma de aplicaciones. Una vez que Dokku está en funcionamiento, iniciar una nueva aplicación es tan simple como git push.

Dokku se compara favorablemente con servicios como Heroku, Amazon Elastic Beanstalk y Google Firebase. Admite una gran cantidad de tecnologías de desarrollo y significa que no está vinculado a un proveedor de nube en particular. Puede ejecutar Dokku en una máquina virtual barata basada en la nube o mantenerla en su propio hardware físico.

Leave a Comment

You may also like