I think you have looked at the tutorial from Mr. Heinemeier Hansson at least once or twice and have a similar setup.
rails new kamal_pg --css tailwind --skip-test --database=postgresql
cd kamal_pg
git add .
git commit -m 'initial commit'
rails g scaffold Post title content:text
rails db:create
rails db:migrate
You have edited routes.rb
# Defines the root path route ("/")
root "posts#index"
# Start Rails
bin/devCreated your first post - added and commited the changes
git add .
git commit -m 'Post scaffold with edited routes'Initialized Kamal
kamal init
git add .; git commit -m 'kamal init'# .env
KAMAL_REGISTRY_PASSWORD=change-this
RAILS_MASTER_KEY=use-your-master-key
POSTGRES_PASSWORD=012345678912345678Next steps
- Get your IP address
- Create a production.sql (in folder db - like in the dhh video)
In your database.yml use the ENVs
production:
  <<: *default
  database: kamal_pg_production
  username: kamal_pg
  password: <%= ENV["POSTGRES_PASSWORD"] %>
  host: <%= ENV["DB_HOST"] %>In your config/environments/production.rb
config.force_ssl = falseIn your deploy.yml you enable the env section, add POSTGRES_PASSWORD, change the service from my-app to your-app, as well as the name for the container image and your registry username
You add your postgres accessory. And for me 2 builder 'settings' work.
And since is a test - 1 IP address for all ;)
# Name of your application. Used to uniquely configure containers.
service: kamal-pg
# Name of the container image.
image: your-name/kamal-pg
# Deploy to these servers.
servers:
  web:
    hosts:
      - 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: your-name
  # 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.1
  secret:
    - RAILS_MASTER_KEY
    - POSTGRES_PASSWORD
# Use a different ssh user than root
# ssh:
#   user: app
# Configure builder setup.
builder:
  args:
    RUBY_VERSION: 3.2.2
#   secrets:
#     - GITHUB_TOKEN
  remote:
    arch: amd64
#     host: ssh://[email protected]
# Use accessory services (secrets come from .env).
accessories:
  db:
    image: postgres:15
    host: 192.168.0.1
    port: 5432
    env:
      clear:
        POSTGRES_USER: "kamal_pg"
        POSTGRES_DB: "kamal_pg_production"
      secret:
        - POSTGRES_PASSWORD
    files:
      - db/production.sql:/docker-entrypoint-initdb.d/setup.sql
    directories:
      - data:/var/lib/postgresql/data
#   redis:
#     image: redis:7.0
#     host: 192.168.0.1
#     port: 6379
#     directories:
#       - data:/data
# Configure custom arguments for Traefik
# traefik:
#   args:
#     accesslog: true
#     accesslog.format: json
# 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.
# 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
That's it.
kamal setup
...
...
Finished all in 415.6 seconds
Releasing the deploy lock...
Finished all in 475.5 secondsYou're done :)