← Extractions

Kamal is not harder than your PaaS — Josef Strzibny at wroclove.rb 2026

Josef Strzibny's wroclove.rb 2026 talk walks through deploying Rails apps with Kamal on a single Digital Ocean VM, comparing it to PaaS. He covers Kamal internals (proxy, blue-green deploys, accessories), a cloud-init bootstrap for Ubuntu (unattended-upgrades, fail2ban, UFW, Tailscale, non-root user), running Litestream as an accessory to stream SQLite to Cloudflare R2, secrets, and a demo SerpApi-based keyword tracker. Q&A covers Postgres backups, log/monitoring self-hosting, multi-project hosting on one droplet, Kamal proxy multi-region, deploy targets, non-Rails apps, and image registry mechanics.

Model
claude-opus-4-7
Ingestion
e6f8bff1
Input tokens
396,326
fresh
98,145
cached
252,577
cache write
45,604
Output tokens
16,441
Duration
243.0s
Roundtrips
9
Tool calls
24
Cost
$0.00
Nodes/edges extracted
31 / 67
Read set (nodes/edges)
150 / 2

Nodes (31)

create UFW tool
kind (empty) tool
name (empty) UFW
slug (empty) ufw
attrs (empty) {"category" => "tool"}
description (empty) Host-level firewall configured inside the VM (in addition to the cloud firewall). Strzibny's default policy denies ev...
short_description (empty) Ubuntu's uncomplicated firewall for host-level port filtering.
update Josef Strzibny person
attrs (empty) {"origin" => "Silesia (Czech side)", "employer" => "SerpApi"}
description Developer and author focused on deployment and infrastructure. Developer and author focused on deployment and infrastructure. Wrote 'Deployment from Scratch' and the first book on ...
short_description Author of Deployment from Scratch. Rails deployment author; wrote Kamal Handbook and Deployment from Scratch; works at SerpApi.
update Kamal is not harder than your PaaS talk
attrs {"type" => "talk"} {"type" => "talk", "alt_title" => "Kamal vs PaaS and how to make better steaks"}
description Talk on Kamal deployment. Josef Strzibny's wroclove.rb 2026 talk (alt title 'Kamal vs PaaS and how to make better steaks'). Argues Kamal isn't ...
short_description Talk on Kamal deployment. Josef Strzibny's wroclove.rb 2026 talk on deploying Rails with Kamal as a PaaS alternative.
create Tailscale tool
kind (empty) tool
name (empty) Tailscale
slug (empty) tailscale
attrs (empty) {"category" => "service"}
description (empty) Peer-to-peer mesh VPN service (free to start) that creates a secure network between your laptop and servers or betwee...
short_description (empty) Peer-to-peer mesh VPN, free for small usage.
create unattended-upgrades tool
kind (empty) tool
name (empty) unattended-upgrades
slug (empty) unattended-upgrades
attrs (empty) {"category" => "tool"}
description (empty) Ubuntu/Debian package that applies security updates automatically. Installed in Strzibny's cloud-init bootstrap; requ...
short_description (empty) Debian/Ubuntu package for automatic security updates.
create chrony tool
kind (empty) tool
name (empty) chrony
slug (empty) chrony
attrs (empty) {"category" => "tool"}
description (empty) Time-sync service adopted by default on Ubuntu 24.x, so it's no longer necessary to install it yourself in cloud-init...
short_description (empty) Time synchronization daemon, now default on Ubuntu.
create Blue-Green Deployment concept
kind (empty) concept
name (empty) Blue-Green Deployment
slug (empty) blue-green-deployment
attrs (empty) {"category" => "pattern"}
description (empty) Deployment strategy where the new version boots alongside the old one and traffic is switched once the new version is...
short_description (empty) Gapless deployment strategy running old and new versions in parallel.
create Once project
kind (empty) project
name (empty) Once
slug (empty) once
attrs (empty) {"status" => "active"}
description (empty) 37signals' self-hosted software initiative (e.g. Campfire). Referenced by Strzibny as arguably becoming a true PaaS f...
short_description (empty) 37signals initiative for self-hosted installable software like Campfire.
create Kamal tool
kind (empty) tool
name (empty) Kamal
slug (empty) kamal
attrs (empty) {"category" => "tool"}
description (empty) Deployment tool (Rails-ecosystem project) that ships apps to one or more servers via Docker. Splits an application in...
short_description (empty) Docker-based deployment tool for web apps with blue-green deploys and a built-in proxy.
create Kamal Proxy tool
kind (empty) tool
name (empty) Kamal Proxy
slug (empty) kamal-proxy
attrs (empty) {"category" => "tool"}
description (empty) Separate project deployed by Kamal that routes incoming traffic to the right container on a server and performs conta...
short_description (empty) Kamal's companion reverse proxy that routes and health-checks app containers.
create Kamal Handbook resource
kind (empty) resource
name (empty) Kamal Handbook
slug (empty) kamal-handbook
attrs (empty) {"type" => "book", "author" => "Josef Strzibny"}
description (empty) Book by Josef Strzibny, described as the first-ever book on Kamal.
short_description (empty) Josef Strzibny's book — the first book on Kamal deployment.
create SerpApi company
kind (empty) company
name (empty) SerpApi
slug (empty) serpapi
attrs (empty) {"industry" => "search API", "free_tier" => "250 searches/month"}
description (empty) Company providing search APIs that return JSON for Google results, Google Flights, AI Overviews, Amazon products and ...
short_description (empty) API service returning structured JSON for Google and other search engines.
create Thruster tool
kind (empty) tool
name (empty) Thruster
slug (empty) thruster
attrs (empty) {"category" => "tool"}
description (empty) Companion project used via bin/thrust in the Rails Dockerfile to cache assets in front of the app. Strzibny notes the...
short_description (empty) Rails-ecosystem HTTP/2 proxy providing asset caching for containerized Rails apps.
create Digital Ocean company
kind (empty) company
name (empty) Digital Ocean
slug (empty) digital-ocean
attrs (empty) {"industry" => "cloud hosting"}
description (empty) Cloud hosting provider used as the example target in Strzibny's Kamal walkthrough. Strzibny likes Digital Ocean becau...
short_description (empty) Cloud VM provider with a lightweight do-agent for host metrics.
create do-agent tool
kind (empty) tool
name (empty) do-agent
slug (empty) do-agent
attrs (empty) {"category" => "service"}
description (empty) Digital Ocean's host-metrics agent. Installed on a droplet, it reports CPU, memory and network data and enables alert...
short_description (empty) Digital Ocean's host metrics agent for CPU, memory, network and alerting.
create Ubuntu tool
kind (empty) tool
name (empty) Ubuntu
slug (empty) ubuntu
attrs (empty) {"category" => "platform"}
description (empty) Linux distribution used as the OS for the demo Digital Ocean droplet. Strzibny notes his cloud-init script targets Ub...
short_description (empty) Linux distribution used as the base OS for the demo Kamal droplet.
create cloud-init concept
kind (empty) concept
name (empty) cloud-init
slug (empty) cloud-init
attrs (empty) {"category" => "practice"}
description (empty) VM bootstrap mechanism: a user-data script provided at droplet creation time runs on first boot and sets up the syste...
short_description (empty) User-data bootstrap mechanism for configuring freshly provisioned cloud VMs.
create fail2ban tool
kind (empty) tool
name (empty) fail2ban
slug (empty) fail2ban
attrs (empty) {"category" => "service"}
description (empty) Log-scanning security service for Linux. Strzibny installs it via cloud-init because its defaults already protect SSH...
short_description (empty) Log-scanning service that bans IPs attacking SSH and other services.
create Coolify tool
kind (empty) tool
name (empty) Coolify
slug (empty) coolify
attrs (empty) {"category" => "platform"}
description (empty) Self-hosted open-source PaaS (mentioned as 'kifi' in the transcript). Cited alongside Once as an option that has requ...
short_description (empty) Open-source self-hosted PaaS alternative to Heroku/Vercel.
create Teabags tool
kind (empty) tool
name (empty) Teabags
slug (empty) teabags
attrs (empty) {"category" => "tool"}
description (empty) Self-hosted solution mentioned by an audience member in Q&A (from the Once initiative lineage) as an existing replace...
short_description (empty) Once/DHH-era solution for self-hosted background job processing.
create Deploy many small projects to one Kamal VM takeaway
kind (empty) takeaway
name (empty) Deploy many small projects to one Kamal VM
slug (empty) deploy-many-small-projects-to-one-kamal-vm
attrs (empty) {"type" => "recommendation"}
description (empty) For pet projects or small apps, don't provision a separate droplet per app. Put them all on one VM: each project has ...
short_description (empty) Host multiple independent projects on a single VM by giving each its own Kamal config pointing to the same IP.
create Run Litestream as a Kamal accessory takeaway
kind (empty) takeaway
name (empty) Run Litestream as a Kamal accessory
slug (empty) run-litestream-as-a-kamal-accessory
attrs (empty) {"type" => "recommendation"}
description (empty) For SQLite Rails apps deployed via Kamal, configure Litestream as an accessory (own life cycle, its own image, a conf...
short_description (empty) Ship Litestream alongside SQLite apps as a Kamal accessory with user 1000 to share the volume.
create Layer security in depth on your Kamal VM takeaway
kind (empty) takeaway
name (empty) Layer security in depth on your Kamal VM
slug (empty) layer-security-in-depth-on-your-kamal-vm
attrs (empty) {"type" => "recommendation"}
description (empty) Even when features overlap (cloud firewall + UFW + Tailscale + fail2ban + non-root user), keep them all. Security wor...
short_description (empty) Stack cloud firewall, UFW, fail2ban, Tailscale and a non-root user even if they overlap.
create Use cloud-init instead of Ansible for simple bootstraps takeaway
kind (empty) takeaway
name (empty) Use cloud-init instead of Ansible for simple bootstraps
slug (empty) use-cloud-init-instead-of-ansible-for-simple-bootstraps
attrs (empty) {"type" => "recommendation"}
description (empty) When the scope is one VM running Docker and Kamal, Ansible's configuration overhead isn't justified. A cloud-init use...
short_description (empty) For simple single-VM setups, a cloud-init user-data script beats pulling in Ansible.
create Budget extra RAM for Kamal blue-green deploys takeaway
kind (empty) takeaway
name (empty) Budget extra RAM for Kamal blue-green deploys
slug (empty) budget-extra-ram-for-kamal-blue-green-deploys
attrs (empty) {"type" => "warning"}
description (empty) Because Kamal's blue-green deploy briefly runs both old and new containers (and Rails with Solid libraries doubles up...
short_description (empty) Provision more RAM than you expect — blue-green deploys run old and new versions in parallel.
create Kamal with Postgres backups, replicas and self-hosted monitoring question
kind (empty) question
name (empty) Kamal with Postgres backups, replicas and self-hosted monitoring
slug (empty) kamal-with-postgres-backups-replicas-and-self-hosted-monitoring
attrs (empty) {"answer_summary" => "Kamal doesn't help specifically with Postgres — run backup containers as accessories; replicas ...
description (empty) Audience question combining three threads: (a) with Kamal and Postgres, can you get automatic backups, restoration, a...
short_description (empty) Can Kamal handle Postgres backups/restores/replicas, and what to do for self-hosted logs and monitoring?
create Hosting multiple pet projects on one droplet with Kamal question
kind (empty) question
name (empty) Hosting multiple pet projects on one droplet with Kamal
slug (empty) hosting-multiple-pet-projects-on-one-droplet-with-kamal
attrs (empty) {"answer_summary" => "Yes. Setup the server once; give each project its own Kamal config with a different service nam...
description (empty) Audience question: for pet/non-production projects with one user (yourself), can they all live on the same droplet, o...
short_description (empty) Can you deploy many small projects to the same Digital Ocean droplet with Kamal?
create Kamal Proxy multi-region load balancing roadmap question
kind (empty) question
name (empty) Kamal Proxy multi-region load balancing roadmap
slug (empty) kamal-proxy-multi-region-load-balancing-roadmap
attrs (empty) {"answer_summary" => "Unknown roadmap; Strzibny has only heard 'something is coming' from DHH, possibly to be reveale...
description (empty) Audience question: Kamal Proxy has been floated as a load-balancing solution for multi-region deployments — what can ...
short_description (empty) Where does Kamal Proxy stand on multi-region load balancing?
create Deploying to a separate development server IP question
kind (empty) question
name (empty) Deploying to a separate development server IP
slug (empty) deploying-to-a-separate-development-server-ip
attrs (empty) {"answer_summary" => "Yes — use Kamal deploy targets (staging/development/PRs) with overrides, selected via -d <desti...
description (empty) Audience question: if I have Kamal configured and want a development machine on another IP, can I tag or restrict dep...
short_description (empty) How to tell Kamal to deploy to a different IP for a dev/staging machine?
create Deploying a non-Rails app alongside Rails with Kamal question
kind (empty) question
name (empty) Deploying a non-Rails app alongside Rails with Kamal
slug (empty) deploying-a-non-rails-app-alongside-rails-with-kamal
attrs (empty) {"answer_summary" => "Yes — Kamal isn't Rails-specific. If a capability isn't in Kamal's CLI, you can often drive Kam...
description (empty) Audience question: on a VM that already runs a Rails app with Kamal, can you deploy another non-Rails service and hav...
short_description (empty) Can you deploy a second non-Rails service in the same Kamal-managed VM?
create How Kamal delivers Docker images to servers question
kind (empty) question
name (empty) How Kamal delivers Docker images to servers
slug (empty) how-kamal-delivers-docker-images-to-servers
attrs (empty) {"answer_summary" => "Traditional path: push to Docker Hub (or similar) with a registry password; servers pull from i...
description (empty) Audience question on image delivery. Strzibny: traditionally you'd use an external registry like Docker Hub — the bui...
short_description (empty) What registry does Kamal use and how does the image reach the server?

Edges (67)

create Layer security in depth on your Kamal VMaboutTailscale
context (empty) Named as part of the defense-in-depth stack.
relation (empty) about
source_node_id (empty) 8f70da0a-e5f0-4565-8de9-a4d7c9af5514
target_node_id (empty) 27c1da7e-6421-49c8-b749-afa90f9ee7fd
update Josef StrzibnyauthoredKamal is not harder than your PaaS
context (empty) Delivered this single-speaker talk at wroclove.rb 2026.
update Kamal is not harder than your PaaSpresented_atwroclove.rb 2026
context (empty) Given at wroclove.rb 2026.
create Josef Strzibnyattendedwroclove.rb 2026
context (empty) Speaker at the conference.
relation (empty) attended
source_node_id (empty) 9ad3091f-6a53-4043-a18c-f6b194344a86
target_node_id (empty) c1bfbda9-9fbb-4d7f-8e12-1a7a81621ba9
create Josef Strzibnyworks_atSerpApi
attrs (empty) {"role" => "employee"}
context (empty) Recently took a job at SerpApi.
relation (empty) works_at
source_node_id (empty) 9ad3091f-6a53-4043-a18c-f6b194344a86
target_node_id (empty) b5ab53e7-92d7-4242-aa37-70bed2fa9ffd
create Josef StrzibnyauthoredKamal Handbook
context (empty) Wrote the first-ever book on Kamal.
relation (empty) authored
source_node_id (empty) 9ad3091f-6a53-4043-a18c-f6b194344a86
target_node_id (empty) d42dd8dd-f087-49b5-b403-d0d71faba550
create SerpApirelated_towroclove.rb 2026
attrs (empty) {"role" => "sponsor"}
context (empty) SerpApi is a sponsor of wroclove.rb 2026.
relation (empty) related_to
source_node_id (empty) b5ab53e7-92d7-4242-aa37-70bed2fa9ffd
target_node_id (empty) c1bfbda9-9fbb-4d7f-8e12-1a7a81621ba9
create Kamal is not harder than your PaaSaboutKamal
context (empty) Core subject of the talk.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) b8efd0d6-8dc8-4cbb-a7e2-98c3d8c9fc17
create Kamal is not harder than your PaaSaboutKamal Proxy
context (empty) Walks through Kamal Proxy routing, health checks, multi-project hosting.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 8656622d-4659-45ad-b0d9-93c12d8823d9
create Kamal is not harder than your PaaSaboutLitestream
context (empty) Demo SQLite Rails app uses Litestream as a Kamal accessory to replicate to R2.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) c8b1820d-3884-4b11-aedc-e33d07ed1896
create Kamal is not harder than your PaaSaboutDocker
context (empty) Kamal requires Docker locally and on servers; talk covers Dockerfile, named volumes, local registry.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create Kamal is not harder than your PaaSaboutRuby on Rails
context (empty) Demo app is a plain rails new with SQLite and Litestream.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create Kamal is not harder than your PaaSaboutDigital Ocean
context (empty) Demo provisions an Ubuntu droplet on Digital Ocean.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 3bc10e54-5599-4cf4-bb38-97958f0b0f6c
create Kamal is not harder than your PaaSaboutcloud-init
context (empty) Talk shows a cloud-init script bootstrapping the droplet.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) af28a0f9-45b1-4722-8f97-aa806d060f41
create Kamal is not harder than your PaaSaboutBlue-Green Deployment
context (empty) Explains Kamal's blue-green deploys and their RAM implications.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 4b513aae-d4eb-4648-9824-758014a1bd56
create Kamal is not harder than your PaaSaboutSerpApi
context (empty) Demo app uses SerpApi to track Google keyword rankings.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) b5ab53e7-92d7-4242-aa37-70bed2fa9ffd
create Kamal is not harder than your PaaSaboutCloudflare R2
context (empty) Litestream replicates SQLite WAL to R2 in the demo.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 0abf14da-8707-47ab-9d5b-77938f689470
create Kamal is not harder than your PaaSaboutThruster
context (empty) bin/thrust is used in the Rails Dockerfile for asset caching.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 28b9a801-8a1c-42a8-8a4d-576d469ad89f
create Kamal is not harder than your PaaSaboutTailscale
context (empty) Discussed as a way to replace public SSH with a mesh VPN.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 27c1da7e-6421-49c8-b749-afa90f9ee7fd
create Kamal is not harder than your PaaSaboutfail2ban
context (empty) Installed via cloud-init; logs inspected when troubleshooting.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) d4c03947-58c3-4f21-a7eb-d1a312705939
create Kamal is not harder than your PaaSaboutUFW
context (empty) Host firewall layered with the cloud firewall.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) bd3fbccf-a76a-4c05-9919-f36293c45ce9
create Kamal is not harder than your PaaSaboutSQLite
context (empty) Demo app uses SQLite as the database.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) a65d4872-7d76-4774-a7d5-e29e615de75a
create Kamal Proxyrelated_toKamal
context (empty) Separate project deployed by Kamal to handle HTTP routing and health checks.
relation (empty) related_to
source_node_id (empty) 8656622d-4659-45ad-b0d9-93c12d8823d9
target_node_id (empty) b8efd0d6-8dc8-4cbb-a7e2-98c3d8c9fc17
create KamalusesDocker
context (empty) Kamal uses Docker locally and on target servers to build and run images.
relation (empty) uses
source_node_id (empty) b8efd0d6-8dc8-4cbb-a7e2-98c3d8c9fc17
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create Josef StrzibnyrecommendsKamal
context (empty) Advocates Kamal as a practical PaaS alternative.
relation (empty) recommends
source_node_id (empty) 9ad3091f-6a53-4043-a18c-f6b194344a86
target_node_id (empty) b8efd0d6-8dc8-4cbb-a7e2-98c3d8c9fc17
create Josef StrzibnyrecommendsDigital Ocean
context (empty) Recommends it for Kamal deployments thanks to do-agent metrics and cloud-init support.
relation (empty) recommends
source_node_id (empty) 9ad3091f-6a53-4043-a18c-f6b194344a86
target_node_id (empty) 3bc10e54-5599-4cf4-bb38-97958f0b0f6c
create Josef StrzibnyrecommendsTailscale
context (empty) Recommends Tailscale to replace public SSH.
relation (empty) recommends
source_node_id (empty) 9ad3091f-6a53-4043-a18c-f6b194344a86
target_node_id (empty) 27c1da7e-6421-49c8-b749-afa90f9ee7fd
create Josef StrzibnyrecommendsLitestream
context (empty) Recommends running Litestream as a Kamal accessory for SQLite backups.
relation (empty) recommends
source_node_id (empty) 9ad3091f-6a53-4043-a18c-f6b194344a86
target_node_id (empty) c8b1820d-3884-4b11-aedc-e33d07ed1896
create Digital Oceanrelated_todo-agent
context (empty) do-agent is Digital Ocean's own host-metrics agent.
relation (empty) related_to
source_node_id (empty) 3bc10e54-5599-4cf4-bb38-97958f0b0f6c
target_node_id (empty) 07ecf186-abae-4737-9f06-357f3b6e203c
create cloud-initrelated_toUbuntu
context (empty) cloud-init script in the talk targets Ubuntu.
relation (empty) related_to
source_node_id (empty) af28a0f9-45b1-4722-8f97-aa806d060f41
target_node_id (empty) 529490f2-70b3-4770-ad5a-82a4f9c82f4f
create cloud-initrelated_tounattended-upgrades
context (empty) Cloud-init bootstrap installs unattended-upgrades.
relation (empty) related_to
source_node_id (empty) af28a0f9-45b1-4722-8f97-aa806d060f41
target_node_id (empty) 2b1446cb-9ef6-4b7a-a491-969329d61153
create cloud-initrelated_tofail2ban
context (empty) Cloud-init bootstrap installs fail2ban.
relation (empty) related_to
source_node_id (empty) af28a0f9-45b1-4722-8f97-aa806d060f41
target_node_id (empty) d4c03947-58c3-4f21-a7eb-d1a312705939
create cloud-initrelated_toUFW
context (empty) Cloud-init configures UFW inside the VM.
relation (empty) related_to
source_node_id (empty) af28a0f9-45b1-4722-8f97-aa806d060f41
target_node_id (empty) bd3fbccf-a76a-4c05-9919-f36293c45ce9
create cloud-initrelated_tochrony
context (empty) chrony is now an Ubuntu default so no longer needs installing via cloud-init.
relation (empty) related_to
source_node_id (empty) af28a0f9-45b1-4722-8f97-aa806d060f41
target_node_id (empty) c35b2f98-9d77-40a9-8bcb-63a2699c9a5a
create cloud-initrelated_toTailscale
context (empty) Optionally installs and authenticates Tailscale during bootstrap.
relation (empty) related_to
source_node_id (empty) af28a0f9-45b1-4722-8f97-aa806d060f41
target_node_id (empty) 27c1da7e-6421-49c8-b749-afa90f9ee7fd
create KamalusesBlue-Green Deployment
context (empty) Kamal's deploy model uses blue-green releases for gapless rollouts.
relation (empty) uses
source_node_id (empty) b8efd0d6-8dc8-4cbb-a7e2-98c3d8c9fc17
target_node_id (empty) 4b513aae-d4eb-4648-9824-758014a1bd56
create Oncerelated_to37signals
context (empty) Once is 37signals' self-hosted software initiative.
relation (empty) related_to
source_node_id (empty) 76016188-6f92-4f8a-8731-949496041f2c
target_node_id (empty) b7de50f4-07ca-48d4-8f62-4e9a4c7acafb
create Teabagsrelated_toOnce
context (empty) Teabags is part of the Once/DHH ecosystem of self-hosted solutions.
relation (empty) related_to
source_node_id (empty) eb79bde6-1699-4b77-b9f2-9dfa3ce288a5
target_node_id (empty) 76016188-6f92-4f8a-8731-949496041f2c
create Kamal is not harder than your PaaSaboutOnce
context (empty) Contrasted with Kamal as a possible true PaaS for third-party apps.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 76016188-6f92-4f8a-8731-949496041f2c
create Kamal is not harder than your PaaSaboutCoolify
context (empty) Cited alongside Once as a PaaS-like option with app requirements, unlike Kamal.
relation (empty) about
source_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
target_node_id (empty) 3b95a219-a7a1-4320-a61b-bfdeb102a023
create Deploy many small projects to one Kamal VMfrom_talkKamal is not harder than your PaaS
context (empty) Core recommendation delivered in the talk.
relation (empty) from_talk
source_node_id (empty) 8ff3f84c-3762-4271-9315-9150ac9d410d
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Run Litestream as a Kamal accessoryfrom_talkKamal is not harder than your PaaS
context (empty) Demo pattern used throughout the talk.
relation (empty) from_talk
source_node_id (empty) e27c624b-9241-49e6-a217-931eb6206e78
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Layer security in depth on your Kamal VMfrom_talkKamal is not harder than your PaaS
context (empty) Security posture Strzibny argues for.
relation (empty) from_talk
source_node_id (empty) 8f70da0a-e5f0-4565-8de9-a4d7c9af5514
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Use cloud-init instead of Ansible for simple bootstrapsfrom_talkKamal is not harder than your PaaS
context (empty) Strzibny explicitly contrasts cloud-init with Ansible for small setups.
relation (empty) from_talk
source_node_id (empty) 8eb01cd1-14fb-42ad-b645-70621c6ee26b
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Budget extra RAM for Kamal blue-green deploysfrom_talkKamal is not harder than your PaaS
context (empty) Raised as a practical consequence of Kamal's deploy model.
relation (empty) from_talk
source_node_id (empty) 515f23cc-692a-4542-b112-07adc7316fc6
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Run Litestream as a Kamal accessoryaboutLitestream
context (empty) Takeaway is about configuring Litestream.
relation (empty) about
source_node_id (empty) e27c624b-9241-49e6-a217-931eb6206e78
target_node_id (empty) c8b1820d-3884-4b11-aedc-e33d07ed1896
create Run Litestream as a Kamal accessoryaboutKamal
context (empty) Takeaway is about Kamal accessory mechanics.
relation (empty) about
source_node_id (empty) e27c624b-9241-49e6-a217-931eb6206e78
target_node_id (empty) b8efd0d6-8dc8-4cbb-a7e2-98c3d8c9fc17
create Layer security in depth on your Kamal VMaboutfail2ban
context (empty) Named as part of the defense-in-depth stack.
relation (empty) about
source_node_id (empty) 8f70da0a-e5f0-4565-8de9-a4d7c9af5514
target_node_id (empty) d4c03947-58c3-4f21-a7eb-d1a312705939
create Layer security in depth on your Kamal VMaboutUFW
context (empty) Named as part of the defense-in-depth stack.
relation (empty) about
source_node_id (empty) 8f70da0a-e5f0-4565-8de9-a4d7c9af5514
target_node_id (empty) bd3fbccf-a76a-4c05-9919-f36293c45ce9
create Use cloud-init instead of Ansible for simple bootstrapsaboutcloud-init
context (empty) Takeaway centers on using cloud-init scripts.
relation (empty) about
source_node_id (empty) 8eb01cd1-14fb-42ad-b645-70621c6ee26b
target_node_id (empty) af28a0f9-45b1-4722-8f97-aa806d060f41
create Budget extra RAM for Kamal blue-green deploysaboutBlue-Green Deployment
context (empty) Explains RAM cost of blue-green deploys.
relation (empty) about
source_node_id (empty) 515f23cc-692a-4542-b112-07adc7316fc6
target_node_id (empty) 4b513aae-d4eb-4648-9824-758014a1bd56
create Kamal with Postgres backups, replicas and self-hosted monitoringasked_atKamal is not harder than your PaaS
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) a0755c28-19f0-4ee4-af92-7cd72f5d5edd
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Hosting multiple pet projects on one droplet with Kamalasked_atKamal is not harder than your PaaS
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 780b341b-adbd-4c08-96aa-9f6b62b85acd
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Kamal Proxy multi-region load balancing roadmapasked_atKamal is not harder than your PaaS
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) f8dc65da-f32a-4996-82c0-0d2aae294ed4
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Deploying to a separate development server IPasked_atKamal is not harder than your PaaS
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 2681e0cf-625f-4105-8192-a01fcd86012c
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Deploying a non-Rails app alongside Rails with Kamalasked_atKamal is not harder than your PaaS
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) 09074c83-3b20-47f9-af7a-457ba1f9f478
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create How Kamal delivers Docker images to serversasked_atKamal is not harder than your PaaS
context (empty) Q&A after the talk.
relation (empty) asked_at
source_node_id (empty) cd5b9439-f665-458a-b11c-22fe00ad5886
target_node_id (empty) c1f757f9-af12-4aa4-8058-b883882b7767
create Kamal with Postgres backups, replicas and self-hosted monitoringaboutGrafana
context (empty) Mentioned as part of the self-hosted stack (with Prometheus).
relation (empty) about
source_node_id (empty) a0755c28-19f0-4ee4-af92-7cd72f5d5edd
target_node_id (empty) 4df60298-9aa7-49dd-b487-47dbc09379f0
create Kamal with Postgres backups, replicas and self-hosted monitoringaboutPrometheus
context (empty) Mentioned as part of the self-hosted stack (with Grafana).
relation (empty) about
source_node_id (empty) a0755c28-19f0-4ee4-af92-7cd72f5d5edd
target_node_id (empty) 4afe605c-464c-4dfe-8493-fada9935e1d0
create Kamal with Postgres backups, replicas and self-hosted monitoringabout37signals
context (empty) Cited as running a self-hosted Grafana/Prometheus stack.
relation (empty) about
source_node_id (empty) a0755c28-19f0-4ee4-af92-7cd72f5d5edd
target_node_id (empty) b7de50f4-07ca-48d4-8f62-4e9a4c7acafb
create Kamal with Postgres backups, replicas and self-hosted monitoringaboutTeabags
context (empty) Referenced as an existing self-hosted solution from the Once ecosystem.
relation (empty) about
source_node_id (empty) a0755c28-19f0-4ee4-af92-7cd72f5d5edd
target_node_id (empty) eb79bde6-1699-4b77-b9f2-9dfa3ce288a5
create Kamal Proxy multi-region load balancing roadmapaboutKamal Proxy
context (empty) Question is specifically about Kamal Proxy capabilities.
relation (empty) about
source_node_id (empty) f8dc65da-f32a-4996-82c0-0d2aae294ed4
target_node_id (empty) 8656622d-4659-45ad-b0d9-93c12d8823d9
create Kamal Proxy multi-region load balancing roadmapaboutDHH
context (empty) DHH told Strzibny 'something is coming' but didn't elaborate.
relation (empty) about
source_node_id (empty) f8dc65da-f32a-4996-82c0-0d2aae294ed4
target_node_id (empty) 51ed6191-ce15-4ca5-9eed-d55908e5ab88
create Hosting multiple pet projects on one droplet with KamalaboutKamal Proxy
context (empty) Answer hinges on Kamal Proxy routing by hostname.
relation (empty) about
source_node_id (empty) 780b341b-adbd-4c08-96aa-9f6b62b85acd
target_node_id (empty) 8656622d-4659-45ad-b0d9-93c12d8823d9
create Deploying to a separate development server IPaboutKamal
context (empty) Covers Kamal deploy targets and -d destination flag.
relation (empty) about
source_node_id (empty) 2681e0cf-625f-4105-8192-a01fcd86012c
target_node_id (empty) b8efd0d6-8dc8-4cbb-a7e2-98c3d8c9fc17
create How Kamal delivers Docker images to serversaboutDocker
context (empty) Question about Docker image registry and delivery mechanics.
relation (empty) about
source_node_id (empty) cd5b9439-f665-458a-b11c-22fe00ad5886
target_node_id (empty) f4375c6b-4dbe-421e-bf0a-fe1240fd8152
create How Kamal delivers Docker images to serversaboutKamal
context (empty) About Kamal's registry defaults and tunneling.
relation (empty) about
source_node_id (empty) cd5b9439-f665-458a-b11c-22fe00ad5886
target_node_id (empty) b8efd0d6-8dc8-4cbb-a7e2-98c3d8c9fc17

Read set

150 nodes

concept Isolate Deployment Types search_nodes talk Kamal is not harder than your PaaS search_nodes+get_node_edges takeaway Tests and Deployment in Under One Second search_nodes concept Single-Machine Deployment search_nodes tool dry-cli search_nodes tool knapsack_pro search_nodes concept Zero-Disconnect Deployment search_nodes tool Render search_nodes tool Jumpstart Pro search_nodes company Kami search_nodes concept Hybrid Search search_nodes concept AI Agent search_nodes project Check search_nodes concept GraphQL max_depth search_nodes takeaway Name Things To Find Their Properties search_nodes talk Events events events search_nodes concept Retrieval Augmented Generation search_nodes tool ChatGPT search_nodes concept Google SXG Cache search_nodes concept Vector Database search_nodes tool Litestream search_nodes tool litestream-ruby search_nodes tool SQLite search_nodes takeaway Run Litestream from day one search_nodes question How do you handle backups with SQLite? search_nodes tool LiteFS search_nodes tool libSQL search_nodes concept Branch-Specific SQLite Databases search_nodes question Biggest table and total database size? search_nodes question Is starting with SQLite a lock-in if I later need Postgres? search_nodes company OVH search_nodes takeaway Sign serverlessforruby.org petition search_nodes tool Heroku search_nodes takeaway Buy Faster Hardware search_nodes concept GitHub Self-Hosted Runner search_nodes tool Cloudflare R2 search_nodes tool CircleCI search_nodes company Cloudflare search_nodes tool Amazon Route 53 search_nodes resource Rocket Real-Time Benchmark search_nodes concept DNS geolocation routing search_nodes tool Sync Space VR search_nodes tool Requestly search_nodes tool Claude Code search_nodes tool Apollo GraphQL search_nodes tool Cloudflare Workers search_nodes tool Docker search_nodes takeaway Build your gem in a Docker container search_nodes tool Docker Compose search_nodes tool dry-container search_nodes takeaway Dockerize Exotic Dependencies search_nodes concept Build Gems in Docker Isolation search_nodes tool Amazon ECS search_nodes question Scaling Sidekiq Elastically search_nodes tool Kubernetes search_nodes person Josef Strzibny search_nodes+get_node_edges concept CI Matrix Strategy search_nodes takeaway Gradual migration via steps search_nodes concept Logux Proxy search_nodes takeaway Signed On-the-fly URLs search_nodes talk How to hijack search_nodes tool Ruby on Rails search_nodes tool Ruby search_nodes question Can you reliably run Rails on JRuby? search_nodes event Rails World search_nodes resource Woman on Rails search_nodes tool Rails 5.2 search_nodes takeaway Ruby as a Data Management Language search_nodes tool Rails 8.1 search_nodes tool Active Admin search_nodes project logux-rails search_nodes takeaway Bump asset version when debugging multi-layer caches search_nodes concept Cache Preheating search_nodes talk Rails Spotlight Chrome Extension Lightning Talk search_nodes takeaway Port Python Libraries With ChatGPT search_nodes question Generate code once vs instruct LLM per request search_nodes concept Rubber Duck Debugging search_nodes person DHH search_nodes resource awesome-ddd search_nodes talk Build Your Own Internal CLI Tools Lightning Talk search_nodes talk Scientific Ruby Lightning Talk search_nodes talk Code Golfing in Ruby Lightning Talk search_nodes talk Configuration Again Lightning Talk search_nodes tool Traveling Ruby search_nodes tool server-engine search_nodes tool Hatchbox search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2018 search_nodes talk Performance Panel wroclove.rb 2024 search_nodes talk Ruby Is Mature Now search_nodes talk Building LLM powered applications in Ruby search_nodes tool GitHub Actions search_nodes concept Direct Upload to Cloud search_nodes tool Apollo GraphQL Platform search_nodes company 37signals search_nodes company Zendesk search_nodes project Basecamp search_nodes resource Ruby Gem Fellowship Fund search_nodes tool PagerDuty search_nodes tool Klaviyo search_nodes project Trezy search_nodes tool PostHog search_nodes tool Prometheus search_nodes tool Grafana search_nodes takeaway Reuse existing observability infrastructure search_nodes tool Honeycomb search_nodes question Alerts on logs vs metrics at scale search_nodes takeaway Batteries-Included Observability search_nodes takeaway Connect engineers to observability costs search_nodes tool Datadog search_nodes takeaway Observability becomes addictive search_nodes takeaway OpenTelemetry lowers vendor lock-in but switching costs remain search_nodes tool Google Search Console search_nodes takeaway Ask the Most Human Question Possible search_nodes project Ruby News search_nodes takeaway Rate-limit login forms with a skip path search_nodes question Protecting against ffmpeg vulnerabilities search_nodes concept Selective MFA Rollout search_nodes takeaway Isolate ffmpeg due to its vulnerability history search_nodes takeaway MFA improves account-sharing health search_nodes concept Unique Per-Site Email Leak Detection search_nodes tool log4j search_nodes concept Timing-Based Enumeration search_nodes question DDoS risk of on-the-fly processing search_nodes question Book recommendation for cross-cultural communication search_nodes concept Handwritten Incentive List and Action Plan search_nodes company Pragmatic Bookshelf search_nodes resource The Culture Map search_nodes resource Drive search_nodes resource The Staff Engineer's Path search_nodes takeaway Master Your Tools search_nodes project Solid Cache search_nodes project Solid Queue search_nodes tool Bootsnap search_nodes concept Connection Pool for Redis search_nodes concept Russian Doll Caching search_nodes concept Static Page Caching via nginx search_nodes talk Better WebPerformance with Rails search_nodes question Application-Level Back Pressure For Sidekiq search_nodes question Which tools do you use to monitor, triage, and fix performance problems? search_nodes tool New Relic search_nodes tool Sentry search_nodes takeaway Narrow the Blocker by Comparing Environments search_nodes tool AppSignal search_nodes question How to triage performance problems? search_nodes

2 edges