Add fizzy-app-102 as a replica

The setup here is a bit rough while we settle some of the details, but
the gist of it is:

- Define accessories to run the primary/replica processes
- Add a web-replica role, which is similar to web but has the
  replication-side accessory
- Load the beamer extension on the app's primary tenanted database

Note that we aren't sending any traffic into the replica yet, but it
would be functional to do so. This stage is mainly about testing the
database replication.
This commit is contained in:
Kevin McConnell
2025-04-16 16:51:29 +01:00
parent 622d7c396a
commit 91df76928b
4 changed files with 43 additions and 3 deletions
+5
View File
@@ -38,6 +38,10 @@ RUN bundle exec bootsnap precompile app/ lib/
RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile
# Fetch beamer library
FROM basecamp/beamer:latest AS beamer
# Final stage for app image
FROM base
@@ -49,6 +53,7 @@ RUN apt-get update -qq && \
# Copy built artifacts: gems, application
COPY --from=build /usr/local/bundle /usr/local/bundle
COPY --from=build /rails /rails
COPY --from=beamer /home/beamer/bin/beamer.so /rails/bin/lib/beamer.so
# Run and own only the runtime files as a non-root user for security
RUN useradd rails --create-home --shell /bin/bash && \
+2
View File
@@ -45,6 +45,8 @@ production:
<<: *default
database: storage/tenants/<%= Rails.env %>/%{tenant}/db/main.sqlite3
tenanted: true
extensions:
- ./bin/lib/beamer.so
primary_original:
<<: *default
database: storage/production.sqlite3
+3
View File
@@ -5,6 +5,9 @@ servers:
jobs:
hosts:
- fizzy-app-101
web-replica:
hosts:
- fizzy-app-102
proxy:
hosts:
+33 -3
View File
@@ -1,10 +1,42 @@
service: fizzy
image: basecamp/fizzy
x-basecamp-registry: &basecamp-registry
username: bcbot
password:
- BASECAMP_REGISTRY_PASSWORD
x-beamer-accessory: &beamer-accessory
image: basecamp/beamer
registry:
<<: *basecamp-registry
options:
user: 1000 # Match the UID of the Rails app, for volume permissions
volumes:
- fizzy:/storage
servers:
jobs:
cmd: bin/jobs
accessories:
beamer-primary:
<<: *beamer-accessory
service: beamer-primary
cmd: beamer primary --debug --remove-after=1h --dir=/storage
port: 5000:80
roles:
- web
beamer-replica:
<<: *beamer-accessory
service: beamer-replica
cmd: beamer replica --debug --primary=http://fizzy-app-101:5000/ --dir=/storage
roles:
- web-replica
volumes:
- fizzy:/rails/storage
@@ -12,9 +44,7 @@ proxy:
ssl: true
registry:
username: bcbot
password:
- BASECAMP_REGISTRY_PASSWORD
<<: *basecamp-registry
builder:
arch: amd64