Merge pull request #2185 from basecamp/betas

Extend the number of Beta environments
This commit is contained in:
Fernando Álvarez
2025-12-23 16:38:54 +01:00
committed by GitHub
13 changed files with 119 additions and 22 deletions
+1
View File
@@ -0,0 +1 @@
secrets.beta
+1
View File
@@ -0,0 +1 @@
secrets.beta
+1
View File
@@ -0,0 +1 @@
secrets.beta
+1
View File
@@ -0,0 +1 @@
secrets.beta
+7 -2
View File
@@ -64,9 +64,14 @@ This environment uses a FlashBlade bucket for blob storage.
Beta is primarily intended for testing product features. It uses the same production database and Active Storage configuration.
Beta tenant is:
There are 4 beta environments:
- https://fizzy-beta.37signals.com
- https://beta1.fizzy-beta.com
- https://beta2.fizzy-beta.com
- https://beta3.fizzy-beta.com
- https://beta4.fizzy-beta.com
Deploy with: `bin/kamal deploy -d beta1` (or `-d beta2`, `-d beta3`, `-d beta4`)
### Staging
+63 -7
View File
@@ -1,14 +1,70 @@
<%
raise "The BETA_NUMBER environment variable must be given" unless ENV["BETA_NUMBER"]
@data = {
"1" => {
"hosts" => {
"web" => ["fizzy-beta-app-101.df-iad-int.37signals.com"],
"jobs" => ["fizzy-beta-jobs-101.df-iad-int.37signals.com"],
"lb" => "fizzy-beta-lb-101.df-iad-int.37signals.com"
},
"dbs" => {
"solidqueue" => "fizzy-beta-solidqueue-db-101.df-iad-int.37signals.com"
}
},
"2" => {
"hosts" => {
"web" => ["fizzy-beta-app-102.df-iad-int.37signals.com"],
"jobs" => ["fizzy-beta-jobs-102.df-iad-int.37signals.com"],
"lb" => "fizzy-beta-lb-102.df-iad-int.37signals.com"
},
"dbs" => {
"solidqueue" => "fizzy-beta-solidqueue-db-102.df-iad-int.37signals.com"
}
},
"3" => {
"hosts" => {
"web" => ["fizzy-beta-app-103.df-iad-int.37signals.com"],
"jobs" => ["fizzy-beta-jobs-103.df-iad-int.37signals.com"],
"lb" => "fizzy-beta-lb-103.df-iad-int.37signals.com"
},
"dbs" => {
"solidqueue" => "fizzy-beta-solidqueue-db-103.df-iad-int.37signals.com"
}
},
"4" => {
"hosts" => {
"web" => ["fizzy-beta-app-104.df-iad-int.37signals.com"],
"jobs" => ["fizzy-beta-jobs-104.df-iad-int.37signals.com"],
"lb" => "fizzy-beta-lb-104.df-iad-int.37signals.com"
},
"dbs" => {
"solidqueue" => "fizzy-beta-solidqueue-db-104.df-iad-int.37signals.com"
}
}
}
@beta_number = ENV["BETA_NUMBER"]
raise "Beta #{@beta_number} doesn't appear to be defined" unless @data[@beta_number]
@web_hosts = @data[@beta_number]["hosts"]["web"]
@job_hosts = @data[@beta_number]["hosts"]["jobs"]
@lb_host = @data[@beta_number]["hosts"]["lb"]
@solidqueue_db = @data[@beta_number]["dbs"]["solidqueue"]
%>
retain_containers: 1
servers:
web:
hosts:
- fizzy-beta-app-01.sc-chi-int.37signals.com: sc_chi
- <%= @web_hosts[0] %>: df_iad
labels:
otel_scrape_enabled: true
# we don't run the jobs role in beta
allow_empty_roles: true
jobs:
hosts:
- <%= @job_hosts[0] %>: df_iad
labels:
otel_scrape_enabled: true
proxy:
ssl: false
@@ -18,12 +74,13 @@ ssh:
env:
clear:
APP_FQDN: beta<%= @beta_number %>.fizzy-beta.com
RAILS_ENV: beta
MYSQL_DATABASE_HOST: fizzy-mysql-primary
MYSQL_DATABASE_REPLICA_HOST: fizzy-mysql-replica
MYSQL_SOLID_CABLE_HOST: fizzy-mysql-primary
MYSQL_SOLID_QUEUE_HOST: fizzy-mysql-primary
MYSQL_SOLID_CACHE_HOST: fizzy-beta-solidcache-db-101
MYSQL_SOLID_QUEUE_HOST: <%= @solidqueue_db %>
MYSQL_SOLID_CACHE_HOST: fizzy-beta-solidcache-db-101.df-iad-int.37signals.com
secret:
- RAILS_MASTER_KEY
- MYSQL_ALTER_PASSWORD
@@ -48,14 +105,13 @@ env:
- STRIPE_SECRET_KEY
- STRIPE_WEBHOOK_SECRET
tags:
sc_chi: {}
df_iad:
PRIMARY_DATACENTER: true
accessories:
load-balancer:
image: basecamp/kamal-proxy:lb
host: fizzy-beta-lb-01.sc-chi-int.37signals.com
host: <%= @lb_host %>
labels:
otel_role: load-balancer
otel_service: fizzy-load-balancer
+2
View File
@@ -0,0 +1,2 @@
<% ENV["BETA_NUMBER"] = "1" %>
<%= ERB.new(File.read(File.join(Gem::Specification.find_by_name("fizzy-saas").gem_dir, "config", "deploy.beta.yml")), trim_mode: 2).result %>
+2
View File
@@ -0,0 +1,2 @@
<% ENV["BETA_NUMBER"] = "2" %>
<%= ERB.new(File.read(File.join(Gem::Specification.find_by_name("fizzy-saas").gem_dir, "config", "deploy.beta.yml")), trim_mode: 2).result %>
+2
View File
@@ -0,0 +1,2 @@
<% ENV["BETA_NUMBER"] = "3" %>
<%= ERB.new(File.read(File.join(Gem::Specification.find_by_name("fizzy-saas").gem_dir, "config", "deploy.beta.yml")), trim_mode: 2).result %>
+2
View File
@@ -0,0 +1,2 @@
<% ENV["BETA_NUMBER"] = "4" %>
<%= ERB.new(File.read(File.join(Gem::Specification.find_by_name("fizzy-saas").gem_dir, "config", "deploy.beta.yml")), trim_mode: 2).result %>
+3 -3
View File
@@ -1,8 +1,8 @@
require_relative "production"
Rails.application.configure do
config.action_mailer.smtp_settings[:domain] = "fizzy-beta.37signals.com"
config.action_mailer.smtp_settings[:domain] = ENV.fetch("APP_FQDN", "fizzy-beta.com")
config.action_mailer.smtp_settings[:address] = "smtp-outbound-staging"
config.action_mailer.default_url_options = { host: "fizzy-beta.37signals.com", protocol: "https" }
config.action_controller.default_url_options = { host: "fizzy-beta.37signals.com", protocol: "https" }
config.action_mailer.default_url_options = { host: ENV.fetch("APP_FQDN", "fizzy-beta.com"), protocol: "https" }
config.action_controller.default_url_options = { host: ENV.fetch("APP_FQDN", "fizzy-beta.com"), protocol: "https" }
end
+31 -7
View File
@@ -2,14 +2,38 @@
set -e
# fizzy-beta-lb-01.sc-chi-int.37signals.com
#
ssh app@fizzy-beta-lb-01.sc-chi-int.37signals.com \
# Beta 1: fizzy-beta-lb-101 -> fizzy-beta-app-101
ssh app@fizzy-beta-lb-101.df-iad-int.37signals.com \
docker exec fizzy-load-balancer \
kamal-proxy deploy fizzy \
--force \
--tls \
--host=fizzy-beta.37signals.com \
--writer-affinity-timeout=0 \
--target=fizzy-beta-app-101.df-iad-int.37signals.com \
--read-target=fizzy-beta-app-01.sc-chi-int.37signals.com
--host=beta1.fizzy-beta.com \
--target=fizzy-beta-app-101.df-iad-int.37signals.com
# Beta 2: fizzy-beta-lb-102 -> fizzy-beta-app-102
ssh app@fizzy-beta-lb-102.df-iad-int.37signals.com \
docker exec fizzy-load-balancer \
kamal-proxy deploy fizzy \
--force \
--tls \
--host=beta2.fizzy-beta.com \
--target=fizzy-beta-app-102.df-iad-int.37signals.com
# Beta 3: fizzy-beta-lb-103 -> fizzy-beta-app-103
ssh app@fizzy-beta-lb-103.df-iad-int.37signals.com \
docker exec fizzy-load-balancer \
kamal-proxy deploy fizzy \
--force \
--tls \
--host=beta3.fizzy-beta.com \
--target=fizzy-beta-app-103.df-iad-int.37signals.com
# Beta 4: fizzy-beta-lb-104 -> fizzy-beta-app-104
ssh app@fizzy-beta-lb-104.df-iad-int.37signals.com \
docker exec fizzy-load-balancer \
kamal-proxy deploy fizzy \
--force \
--tls \
--host=beta4.fizzy-beta.com \
--target=fizzy-beta-app-104.df-iad-int.37signals.com
@@ -3,9 +3,9 @@
require_relative "../config/environment"
domains = {
"production" => "box-car.com",
"beta" => "fizzy-beta.37signals.com",
"staging" => "fizzy.37signals-staging.com"
"production" => "app.fizzy.do",
"beta" => ENV.fetch("APP_FQDN", "beta1.fizzy-beta.com"),
"staging" => "app.fizzy-staging.com"
}
def fix_attachments(rich_text)