Cómo construí un reemplazo para Heroku y reduje los costos de mi plataforma en 4X

Puede pasar a la sección Qué hace si desea ir directamente a la empresa.

ACTUALIZACIÓN DE 2019 : CaptainDuckDuck ahora se renombra y se distribuye como CapRover. Ver //github.com/caprover/caprover

El dolor

Hace un par de años, comencé a jugar con lenguajes del lado del servidor, principalmente Node JS. Después de unos días de lucha, pude implementar una aplicación Hello World en mi localhost. Fue divertido, hasta que decidí dar el siguiente paso e implementar uno de mis proyectos en Internet para que la gente pudiera acceder a él desde una URL pública como //www.some-awesome-web-app.com.

En ese momento, me di cuenta de que había un conjunto completamente nuevo de tecnologías que tenía que aprender para implementar mi aplicación web. Necesitaba saber cómo crear herramientas y canalizaciones de implementación, cómo funcionan el enrutamiento nginx y SSL, y muchas más cosas ...

No hace falta decir que el despliegue fue una experiencia dolorosa. Me di cuenta de que tenía que dedicar casi la misma cantidad de tiempo que dedicaba a codificar para implementar código en el servidor, construir, instalar dependencias y mantener el servidor. ¡Es simplemente estúpido! Tuve que dedicar tiempo a hacer las mismas cosas una y otra vez.

Prefiero dedicar mi tiempo a codificar un producto / servicio que los usuarios utilizarán, no dedicar horas y días a configurar HTTPS. Después de todo, mi HTTPS no es diferente de otros cientos de miles de sitios web HTTPS en Internet. Tenía que haber una forma más sencilla.

El salvador temporal

Esta dolorosa experiencia llegó a su fin cuando me encontré con Heroku, una plataforma lista para usar para implementar aplicaciones. Me dije a mí mismo “¡Genial! ¡Esto es lo que debe ser una plataforma de implementación! " Me encantó cómo abstraían toda la complejidad detrás de una interfaz sencilla. Puede crear una aplicación con un simple clic y empujarla. Inmediatamente estará disponible con una URL pública. Está disponible de forma gratuita con un pequeño coste de dormir después de 30 minutos de inactividad. ¡Las cosas no podrían ir mejor!

Todo estuvo bien. Hasta que me involucré con algunos proyectos que requerían una ejecución continua de 24 horas (un bot lector). Tuve que actualizarme al servicio pago. No estuvo tan mal, solo $ 7 por mes. Pero las cosas empezaron a volverse locas después de que comencé a implementar más y más aplicaciones. Algunos eran proyectos personales y otros estaban relacionados con negocios que requerían una memoria RAM superior a 512 MB (límite libre) o una disponibilidad continua de 24 horas.

No pasó mucho tiempo hasta que me di cuenta de que estaba pagando $ 100 + a Heroku. Simplemente no tenía sentido. Algunos de mis robots de lectura que requieren disponibilidad las 24 horas consumen solo 128 MB de RAM. Sin embargo, también tuve que pagar por la RAM no utilizada. No pude compartir RAM / CPU entre aplicaciones. Empeora con las aplicaciones de alto uso de RAM. Si tengo una aplicación que necesita 1 GB de RAM, tengo que pagar un mínimo de $ 50 por mes.

Con la esperanza de encontrar mejores ofertas, comencé a buscar en AWS, Digital Ocean, Vultr y otros proveedores de servidores. El precio que vi simplemente me dejó alucinado. En Digital Ocean, por ejemplo, podría conseguir un servidor con 2 GB de RAM por $ 20 al mes. Podría colocar 2 instancias de mi RAM de 1GB en esa máquina por $ 20 en lugar de $ 100. ¡Podría reducir mis costos 4 veces !

Hay un inconveniente en este precio más barato. Si no sabe qué es eso, no leyó el primer párrafo, El dolor . El problema con el uso de estos proveedores de servidores barebones (a diferencia de servicios como Heroku) es que tengo que hacer todo el trabajo que Heroku hizo por mí.

En busca del Salvador eterno

Sabía lo que quería: necesitaba algo que convierta un servidor barebone (como AWS o Digital Ocean) en una plataforma similar a Heroku. A medida que ganaba más experiencia, sabía que debía haber algún tipo de equivalente de código abierto a Heroku en algún lugar de Github. Efectivamente, tenía razón. No solo hay uno, sino un montón de ellos.

Sin embargo, después de pasar una hora o dos con cada uno, me di cuenta de que ninguno de ellos era la solución verdaderamente fácil de Heroku que estaba buscando. Algunos eran súper básicos y solo tenían una capa de interfaz delgada con poca o ninguna documentación. Algunos eran extremadamente avanzados con toneladas de funciones que no se usaban. Y tener esas características simplemente significaba un complicado proceso de configuración y mantenimiento. Estaba buscando una solución fácil pero eficaz.

Edificando al Salvador eterno

Como no tuve suerte en encontrar un buen reemplazo para Heroku, decidí construir uno. Afortunadamente, todas las herramientas que necesitaba estaban disponibles de forma gratuita, desde el servidor web HTTP nginx para enrutar solicitudes, hasta Docker para contener aplicaciones, etc.

Después de unos meses de planificación, diseño, construcción, eliminación y comenzar desde cero, el proyecto estaba listo.

Lancé la versión inicial de CaptainDuckDuck en octubre de 2017. Solo han pasado unos dos meses y ha habido un montón de comentarios positivos. Después del primer lanzamiento, que fue principalmente para implementar aplicaciones web, la comunidad pidió más. Principalmente querían la capacidad de implementar bases de datos y aplicaciones con un solo clic. Esta semana, lancé la versión 0.2.1 con todas estas características solicitadas :)

Qué hace

Mi objetivo era permitir que un desarrollador de aplicaciones web típico creara una instancia de servidor similar a Heroku en menos de 10 minutos. ¡Estoy feliz de decir que lo hice!

Simplemente copie y pegue una línea en su servidor y tendrá su propio Heroku.

  • Puede implementar aplicaciones web (nodejs, php, etc.) con un simple comando de implementación de CLI.
  • Puede habilitar HTTPS simplemente haciendo clic en el botón "Habilitar HTTPS".
  • Puede elegir entre aplicaciones / bases de datos con un solo clic como WordPress, MongoDB, MySQL, Parse y otras.
  • Puede conectar varios servidores para crear un grupo de servidores con solo ingresar las direcciones IP y las credenciales de los servidores en la interfaz de usuario web.

CaptainDuckDuck está escrito en NodeJS. Pero no es el NodeJS con el que tratan sus usuarios finales. Los motores principales que Captain usa bajo el capó son nginx y docker. Ambas se encuentran entre las herramientas más confiables y listas para producción. La parte NodeJS de CaptainDuckDuck solo se usa al implementar una aplicación en el servidor. En teoría, puede eliminar el proceso CaptainDuckDuck en su servidor después de la implementación y los usuarios no notarán ningún cambio.

Tutorial

Si desea una guía completa, le recomiendo ver el video tutorial y leer la página de Github. El video se hizo con la primera versión, por lo que no tiene base de datos ni aplicaciones de un solo clic. Pero es un buen punto de partida.