Kamal-Rails-Postgres-One-Server-Installation.md
source link: https://gist.github.com/code-206/682c46bd6414b01f912096b4f8865a4b
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
How to deploy a Rails 7.1 app with Postgres and Kamal on a single server
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/dev
Created 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=012345678912345678
Next 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 = false
In 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 seconds
You're done :)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK