[mproxy](https://github.com/kevinmcconnell/mproxy) is a custom minimal proxy designed specifically for Kamal. It has two big advantages over Traefik: 1. Imperative deployments - we tell it to switch from container A to container B, and it waits for container B to start then switches. No need to poll for health checks ourselves or mess around with forcing health checks to fail. 2. Support for multiple apps - as much as possible, configuration is supplied at runtime by the deploy command, allowing us to have multiple apps share an instance of mproxy without conflicting config.
96 lines
2.5 KiB
YAML
96 lines
2.5 KiB
YAML
# Name of your application. Used to uniquely configure containers.
|
|
service: my-app
|
|
|
|
# Name of the container image.
|
|
image: user/my-app
|
|
|
|
# Deploy to these servers.
|
|
servers:
|
|
- 192.168.0.1
|
|
|
|
# Credentials for your image host.
|
|
registry:
|
|
# Specify the registry server, if you're not using Docker Hub
|
|
# server: registry.digitalocean.com / ghcr.io / ...
|
|
username: my-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:
|
|
# clear:
|
|
# DB_HOST: 192.168.0.2
|
|
# secret:
|
|
# - RAILS_MASTER_KEY
|
|
|
|
# Use a different ssh user than root
|
|
# ssh:
|
|
# user: app
|
|
|
|
# Configure builder setup.
|
|
# builder:
|
|
# args:
|
|
# RUBY_VERSION: 3.2.0
|
|
# secrets:
|
|
# - GITHUB_TOKEN
|
|
# remote:
|
|
# arch: amd64
|
|
# host: ssh://app@192.168.0.1
|
|
|
|
# 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
|
|
|
|
# Configure a custom healthcheck (default is /up on port 3000)
|
|
# healthcheck:
|
|
# path: /healthz
|
|
# port: 4000
|
|
|
|
# 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.
|
|
#
|
|
# If your app is using the Sprockets gem, ensure it sets `config.assets.manifest`.
|
|
# See https://github.com/basecamp/kamal/issues/626 for details
|
|
#
|
|
# asset_path: /rails/public/assets
|
|
|
|
# Configure rolling deploys by setting a wait time between batches of restarts.
|
|
# boot:
|
|
# limit: 10 # Can also specify as a percentage of total hosts, such as "25%"
|
|
# wait: 2
|
|
|
|
# Configure the role used to determine the primary_host. This host takes
|
|
# deploy locks, runs health checks during the deploy, and follow logs, etc.
|
|
#
|
|
# Caution: there's no support for role renaming yet, so be careful to cleanup
|
|
# the previous role on the deployed hosts.
|
|
# primary_role: web
|
|
|
|
# Controls if we abort when see a role with no hosts. Disabling this may be
|
|
# useful for more complex deploy configurations.
|
|
#
|
|
# allow_empty_roles: false
|