GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

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

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

La configuración de un servidor Dokku le permite implementar rápidamente nuevas aplicaciones utilizando el flujo de trabajo familiar de Git. Los costos de hospedaje pueden ser mucho más bajos que las soluciones PaaS comerciales 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.

Cómo empezar

Dokku admite varios métodos de instalación. Al realizar la instalación en hardware sin sistema operativo, use el script 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 demorar hasta 10 minutos, dependiendo de su conexión a Internet.

Puede ejecutar Dokku como un 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

Reemplace example.com con el nombre de host que utilizará para acceder a su servidor. Usando este ejemplo, los puertos 80 y 443 estarán vinculados a los puertos de su host 8080 y 8443, respectivamente. El puerto 3022 en 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.

Configurar Dokku

Una vez completada la instalación, visite la dirección IP de su host en su navegador. Si le asignaste un nombre de host a Dokku, también puedes usarlo aquí. Aparecerá el instalador web para guiarlo a través del 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 utilizando 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 virtualhost naming". 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 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 establecido 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 los comandos de Git y la CLI.

Implementación de aplicaciones

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

Dokku también admite la ejecución de 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 compilaciones directas de Docker en la documentación de Dokku.

El uso de paquetes de compilació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 despliegue. Aquí hay un ejemplo para una aplicación React básica:

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

git remote add dokku [email protected]: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. Reemplace example.com con la IP o hostname de tu instalación. La parte después de los dos puntos indica el proyecto Dokku al que se debe impulsar. No necesita crearlo manualmente.

Una vez que se ha configurado el control remoto, está listo para enviarle el código. El comando de ejemplo empuja el master rama hasta Dokku. Dokku tomará su proyecto, detectará automáticamente un paquete de compilación adecuado, 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. Primero, asegúrese de haber configurado los registros DNS apropiados.

dokku domains:add my-app example.com

Visitando example.com ahora servirá su my-app despliegue.

Agregar SSL

Dokku facilita la activación de SSL para sus aplicaciones. Puede agregar un complemento que integre Dokku con Let's Encrypt. Una vez que se haya 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 cualquier alerta relacionada con sus certificados.

dokku config:set --global no-restart [email protected]

Debe agregar el trabajo cron de 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 caduque.

Actualizando 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á con el nuevo una vez que se complete la compilación. Las actualizaciones son sin tiempo de inactividad y totalmente automatizadas.

La duración del proceso de compilación variará según el tamaño de su aplicación y las tecnologías que utilice. Dokku espera otros 10 segundos después de que se complete 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 canalización de CI podría ser un git push dokku para actualizar su implementación en vivo.

Administración de sucursales

Dokku generalmente implementa los cambios realizados en el master sucursal. Puede elegir usar una rama diferente usando 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 implementará de manera predeterminada desde dokku-deploy sucursal. Despliegues para my-app la aplicación se hará a partir de production en su lugar.

Agregar funcionalidad adicional

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. Los complementos oficiales y de la comunidad se pueden usar 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.

Configurar un servicio es generalmente un proceso de dos pasos. Usted crea una instancia del servicio y luego la vincula a sus aplicaciones. Se pueden conectar varias aplicaciones a cada instancia de servicio.

Así es como 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á la 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, lanzar 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á atado a un proveedor de nube en particular. Puede ejecutar Dokku en una VM económica basada en la nube o mantenerlo en su propio hardware físico.


Docker
  1. Cómo instalar y alojar un servidor OpenVPN con Docker

  2. Cómo instalar Jenkins con Docker

  3. Cómo implementar microservicios con Docker

  4. Cómo implementar aplicaciones con Rancher

  5. Cómo y por qué usar un host Docker remoto

Cómo reemplazar Docker con Podman en una Mac

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

Cómo conectarse a Localhost dentro de un contenedor Docker

Cómo indexar las dependencias de su imagen Docker con Syft

Cómo copiar archivos con Docker cp a su Docker Container

Cómo ejecutar su propio servidor Git con GitlabHQ en Ubuntu 14.04