Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions saas/.kamal/secrets.beta1
1 change: 1 addition & 0 deletions saas/.kamal/secrets.beta2
1 change: 1 addition & 0 deletions saas/.kamal/secrets.beta3
1 change: 1 addition & 0 deletions saas/.kamal/secrets.beta4
9 changes: 7 additions & 2 deletions saas/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
70 changes: 63 additions & 7 deletions saas/config/deploy.beta.yml
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
2 changes: 2 additions & 0 deletions saas/config/deploy.beta1.yml
Original file line number Diff line number Diff line change
@@ -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 changes: 2 additions & 0 deletions saas/config/deploy.beta2.yml
Original file line number Diff line number Diff line change
@@ -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 changes: 2 additions & 0 deletions saas/config/deploy.beta3.yml
Original file line number Diff line number Diff line change
@@ -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 changes: 2 additions & 0 deletions saas/config/deploy.beta4.yml
Original file line number Diff line number Diff line change
@@ -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 %>
6 changes: 3 additions & 3 deletions saas/config/environments/beta.rb
Original file line number Diff line number Diff line change
@@ -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
38 changes: 31 additions & 7 deletions saas/script/configure-lb-beta.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
6 changes: 3 additions & 3 deletions script/migrations/migrate-content-to-slugged-urls.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down