JetThoughts Dev
Posted on July 31, 2024
In Rails 8, Kamal will be included by default. This change aims to simplify deployment and infrastructure management processes for developers.
What is Kamal?
Kamal is a deployment tool that works with Docker and Kubernetes. It automates and simplifies the deployment of applications, providing support for containerization and orchestration.
Key Changes
Adding Kamal to the Gemfile:
The Gemfile of new Rails applications will now include the kamal gem by default:
gem 'kamal', '~> 1.0'
Automatic Generation of Kamal Configuration File:
When creating a new Rails application, a Kamal configuration file will now be generated automatically, allowing for basic deployment parameters to be set up immediately.
# Name of your application. Used to uniquely configure containers.
service: app_name
# Name of the container image.
image: your-user/app_name
# Deploy to these servers.
servers:
web:
- 192.168.0.1
# job:
# hosts:
# - 192.168.0.1
# cmd: bin/solid_queue work
# Credentials for your image host.
registry:
# Specify the registry server, if you're not using Docker Hub
# server: registry.digitalocean.com / ghcr.io / ...
username: your-user
# Always use an access token rather than real password when possible.
password:
- KAMAL_REGISTRY_PASSWORD
# Inject ENV variables into containers (secrets come from .env).
# Remember to run `kamal env push` after making changes!
env:
secret:
- RAILS_MASTER_KEY
# clear:
# DB_HOST: 192.168.0.2
# Use a persistent storage volume for sqlite database files and local Active Storage files.
# Recommended to change this to a mounted volume path that is backed up off server.
volumes:
- "app_name_storage:/rails/storage"
# Bridge fingerprinted assets, like JS and CSS, between versions to avoid
# hitting 404 on in-flight requests. Combines all files from new and old
# version inside the asset_path.
asset_path: /rails/public/assets
# Use a different ssh user than root
# ssh:
# user: app
# Configure builder setup (defaults to multi-arch images).
# builder:
# # Build same-arch image locally (use for x86->x86)
# multiarch: false
#
# # Build diff-arch image via remote server
# remote:
# arch: amd64
# host: ssh://app@192.168.0.1
#
# args:
# RUBY_VERSION: <%= ENV["RBENV_VERSION"] || ENV["rvm_ruby_string"] || "#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}" %>
# secrets:
# - GITHUB_TOKEN
# - RAILS_MASTER_KEY
# Use accessory services (secrets come from .env).
# accessories:
# db:
# image: mysql:8.0
# host: 192.168.0.2
# port: 3306
# env:
# clear:
# MYSQL_ROOT_HOST: '%'
# secret:
# - MYSQL_ROOT_PASSWORD
# files:
# - config/mysql/production.cnf:/etc/mysql/my.cnf
# - db/production.sql:/docker-entrypoint-initdb.d/setup.sql
# directories:
# - data:/var/lib/mysql
# redis:
# image: redis:7.0
# host: 192.168.0.2
# port: 6379
# directories:
# - data:/data
Updates to Rails Generators:
Rails generators now support Kamal, enabling the use of standard Rails commands to create and configure applications with Kamal in mind.
Benefits of Kamal Integration
Simplified Deployment:
Kamal automates the deployment process, making it easy to set up and deploy applications.
Support for Docker and Kubernetes:
Kamal integrates with Docker and Kubernetes, allowing the use of containerization and orchestration systems.
Unified Technology Stack:
With Kamal built into Rails, developers get a unified stack for development and deployment, simplifying project management.
More information here:
Posted on July 31, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.