getkuby / kuby-core

A convention over configuration approach for deploying Rails apps. https://getkuby.io
MIT License
580 stars 26 forks source link

Support for other lang apps #105

Open sivagollapalli opened 2 years ago

sivagollapalli commented 2 years ago

Thanks for the great deployment solution.

I am using amazon EKS to run my rails application. Along with rails monolith I am using sidekiq, a Ruby app that talks amazon SQS, and a golang App that provides a response to my mobile application. How can I run my Ruby app and golang using kuby? I feel we need to add separate plugins for these. If yes, I would like to give it a shot if you provide me with direction on how to approach it?

camertron commented 2 years ago

Hey @sivagollapalli, these are good questions. Some thoughts and questions:

  1. Kuby already supports Sidekiq via the kuby-sidekiq plugin. Hopefully it works for your use-case.
  2. Is the Ruby app that talks to SQS using a framework or is it like a standalone Ruby script? Is it already containerized?
  3. Is the golang app already containerized?

Containerization

Kuby should be able to handle the SQS and golang apps, but it will take some effort on your part to get them working. If they're not already containerized, I would suggest starting there. The Kuby docs contain a section that explains how to specify additional Docker images. Kuby will build and push these images when you run kuby build and kuby push respectively.

Kubernetes Resources

The next step is to create several Kubernetes resources for the apps. At minimum you'll need:

  1. Two Deployments that specify how to run the images, how many replicas you want, etc.
  2. Two Services for routing HTTP requests to the apps.
  3. Two Ingresses for routing HTTP requests from the outside world to the Services.

Take a look at the rails_app plugin as a reference.

Plugins

The easiest way to define the additional Docker images and Kubernetes resources is via a couple of plugins, one for each app. If the plugin code you come up with is general enough (i.e. works with any golang app, etc) you might consider sharing your plugin with the community. Otherwise it's perfectly ok to keep the plugin code in your monolith and use it only for your own needs. Take a look at the plugin docs for more information.

Finally, don't hesitate to reach out with questions :)

sivagollapalli commented 2 years ago

@camertron Thanks for your reply.

I containerized my apps already and have been deploying them via Jenkins. I would like to use kuby and try how to deploy them. Let me try to add a generic plugin using docs that works with golang.

My idea would be open source them as well.

camertron commented 2 years ago

Ok thanks for the additional info. If your apps are already containerized then you can probably skip all the Docker stuff.

My idea would be open source them as well.

Cool! Looking forward to taking a look at the code when you're ready :)