Deploy a Ruby on Rails Website to Kubernetes in 5 Minutes with Jetpack.io
In this tutorial, we'll build a Ruby on Rails website, configure it for Jetpack.io, and deploy it to Kubernetes – all in 5 minutes.
Ruby on Rails is a development environment for building web properties.
Docker is required to package your backend as a container before deploying to the cloud.
If you don't already have Docker installed as part of your development environment, follow one of the guides below before returning to this quickstart:
kubectl, while not required, is a useful tool for inspecting and managing your deployments in Kubernetes. We recommend following the installation directions for your platform:
Building a Ruby on Rails website
In this example we'll quickly scaffold a Rails website. You could swap out these steps with use an existing Ruby web site, or scaffold a site using other frameworks or tools.
Open a terminal in an empty directory.
Generate a Rails website:
rails new website
Now we have a regular Ruby on Rails website. Feel free to customize this site to meet your needs.
Configure the App for Containers
Jetpack.io assumes your web server is running on port
8080 from inside a Docker container. In this section we'll build a Dockerfile to run the web site on port
Create a new file in the
Dockerfileand add this content:
COPY . .
RUN bundle install
CMD ["rails", "server", "-b", "0.0.0.0", "-p", "8080"]
Note: this is a bare-bones Dockerfile. Depending on your app's dependencies, you may need to add more.
Note: If you get an error similar to the one below, change the ruby version in the Dockerfile above to match the Gemfile specified version.
Your Ruby version is 2.6.7, but your Gemfile specified 3.0.0
Initialize the project with Jetpack.io
Jetpack.io needs some initial configuration to understand the Rails web server. We need only do this once per website.
To install the Jetpack CLI, open a terminal and run
curl https://get.jetpack.io -fsSL | bash
Jetpack CLI works on Linux, macOS, and on Windows via WSL2.
Login to Jetpack CLI:
jetpack auth login
Logging into Jetpack allows you to deploy to the Jetpack.io Kubernetes cluster. You can also run on your own cluster in your Azure, AWS, GCP, or private cloud account.
Initialize the project for Jetpack:
This wizard interviews you and configures the Jetpack deployment strategy to match your application.
Choose Web Service as a type of application. This tells Jetpack that we want to accept inbound traffic.
If we were building a scheduled cron job or a function that drained a queue, we could choose another application type.
- Finish the wizard, and Jetpack CLI automatically generates an appropriate
jetconfig.yamlfile. You should commit this to source control.
Deploy to Kubernetes using Jetpack.io
Now that the project is configured for Jetpack, deploying is really easy.
Open a terminal in the directory with the Dockerfile and jetconfig.yaml file.
Deploy to Kubernetes:
Now Jetpack makes the deployment really simple. Automatically it will:
- Build the Docker image
- Push the image to a private registry
- Schedule the necessary Kubernetes resources
- Create a publicly routable URL to test the website
- Setup port-forwarding from your local machine
- Stream application logs back to the terminal
Test the website:
In the console output will be the publicly routable URL. Click this URL to view the web page.
Jetpack also sets up port-forwarding, so you can also browse to http://localhost:8080/ to view the page.
Note: If your webpage shows an error saying:
Blocked host: xxxxxxx-xxxxxxx.jetpack.dev, you can fix that by adding the following line to
config/environments/development.rbto unblock Jetpack domains from your ruby web server and then responding yes to Jetpack's prompt to redeploy.
config.hosts << /.*\.jetpack\.dev/
It's easy to deploy a Ruby on Rails website to Kubernetes with Jetpack.io. In this tutorial we scaffolded a website, configured it for Jetpack.io, and used Jetpack.io to deploy to Kubernetes. Jetpack.io is a great zero-DevOps solution for deploying to Kubernetes. Visit https://jetpack.io/docs/ to learn more and to start deploying your content to Kubernetes with ease.