Enable beta deploys for chat_backend + chat_web_app (#7) (#8)
Sync runner checkout / sync (push) Successful in 7s

## Summary

Implements [#7](#7): register **beta** workloads for `chat_backend` and `chat_web_app`, matching the existing `dta_service` / `dta_webapp` pattern.

- Enable `host_apps` beta entries on **adama**, **roslin**, and **ai-server-4080** (`chat_backend` **8013**, `chat_web_app` **8083**)
- Update `IMPLEMENTATION.md` apps / ports / NPM / roadmap tables for chat beta + prod
- Prod chat entries unchanged

## Ops follow-ups (outside this PR)

- Create Postgres DB `chat_backend_beta` + grant `westfarn`
- Add `~/Documents/secrets/chat_backend/chat_backend_beta.env` (mode 600)
- NPM: `beta.chat.aimloperations.com` → `*:8083`; `beta.chatbackend.aimloperations.com` → `*:8013`
- Smoke: `./scripts/deploy.sh --app chat_backend --env beta --ref <sha>` and same for `chat_web_app`

Companion app tickets: [chat_backend#26](ai_ml_operations/chat_backend#26), [chat_web_app#35](ai_ml_operations/chat_web_app#35)

## Test plan

- [ ] Confirm beta rows present in all three `host_vars`
- [ ] After merge + ops setup: deploy beta for both apps succeeds
- [ ] Prod chat deploys still work on 8003 / 8082
- [ ] NPM beta domains route to 8013 / 8083Reviewed-on: #8
This commit was merged in pull request #8.
This commit is contained in:
2026-07-27 08:32:36 -07:00
parent d49c6bfe2d
commit 92afbc6e00
4 changed files with 14 additions and 14 deletions
+8 -8
View File
@@ -193,8 +193,8 @@ After Docker install, re-SSH so the `docker` group membership takes effect.
| `dta_service` | django (docker) | adama + roslin + ai-server-4080 | beta + prod | active/active behind NPM | | `dta_service` | django (docker) | adama + roslin + ai-server-4080 | beta + prod | active/active behind NPM |
| `dta_webapp` | node/vite static | adama + roslin (+ ai-server-4080) | beta + prod | active/active; built to `/var/www/<env>.app.ditchtheagent/html`, served by web-static nginx | | `dta_webapp` | node/vite static | adama + roslin (+ ai-server-4080) | beta + prod | active/active; built to `/var/www/<env>.app.ditchtheagent/html`, served by web-static nginx |
| `scha` | django (docker) | adama + roslin + ai-server-4080 | prod | active/active behind NPM; beta port reserved | | `scha` | django (docker) | adama + roslin + ai-server-4080 | prod | active/active behind NPM; beta port reserved |
| `chat_web_app` | node-static (CRA) | adama + roslin + ai-server-4080 | prod | active/active; built to `/var/www/<env>.chat.aimloperations/html`, served by web-static nginx; beta port reserved | | `chat_web_app` | node-static (CRA) | adama + roslin + ai-server-4080 | beta + prod | active/active; built to `/var/www/<env>.chat.aimloperations/html`, served by web-static nginx |
| `chat_backend` | django (docker) | adama + roslin + ai-server-4080 | prod | active/active behind NPM; Ollama via `OLLAMA_BASE_URL=http://10.0.0.128:11434`; beta port reserved | | `chat_backend` | django (docker) | adama + roslin + ai-server-4080 | beta + prod | active/active behind NPM; Ollama via `OLLAMA_BASE_URL=http://10.0.0.128:11434` |
Django apps use a **shared external Postgres** (via `DATABASE_URL` in each host's Django apps use a **shared external Postgres** (via `DATABASE_URL` in each host's
env file) so active/active replicas share one database. Beta and prod never share env file) so active/active replicas share one database. Beta and prod never share
@@ -218,9 +218,9 @@ future beta replica.
| company_site | 8010 (*not deployed*) | 8000 | adama, roslin, ai-server-4080 | | company_site | 8010 (*not deployed*) | 8000 | adama, roslin, ai-server-4080 |
| dta_service | 8011 | 8001 | adama, roslin, ai-server-4080 | | dta_service | 8011 | 8001 | adama, roslin, ai-server-4080 |
| scha | 8012 (*not deployed*) | 8002 | adama, roslin, ai-server-4080 | | scha | 8012 (*not deployed*) | 8002 | adama, roslin, ai-server-4080 |
| chat_backend | 8013 (*not deployed*) | 8003 | adama, roslin, ai-server-4080 | | chat_backend | 8013 | 8003 | adama, roslin, ai-server-4080 |
| dta_webapp (nginx) | 8081 | 8080 | adama, roslin, ai-server-4080 | | dta_webapp (nginx) | 8081 | 8080 | adama, roslin, ai-server-4080 |
| chat_web_app (nginx) | 8083 (*not deployed*) | 8082 | adama, roslin, ai-server-4080 | | chat_web_app (nginx) | 8083 | 8082 | adama, roslin, ai-server-4080 |
### Flow ### Flow
@@ -260,8 +260,8 @@ point each domain at the backend(s):
| dta_service | (see DTA NPM hosts) | `adama:8001` / `8011` + same on roslin / ai-server-4080 | | dta_service | (see DTA NPM hosts) | `adama:8001` / `8011` + same on roslin / ai-server-4080 |
| dta_webapp | (see DTA NPM hosts) | `adama:8080` / `8081` + same on roslin | | dta_webapp | (see DTA NPM hosts) | `adama:8080` / `8081` + same on roslin |
| scha | `schawheaton.aimloperations.com`, `schawheaton.com` (+ www) | `adama:8002` + `roslin:8002` (+ `ai-server-4080:8002`) | | scha | `schawheaton.aimloperations.com`, `schawheaton.com` (+ www) | `adama:8002` + `roslin:8002` (+ `ai-server-4080:8002`) |
| chat_web_app | `chat.aimloperations.com` (+ www) | `adama:8082` + `roslin:8082` (+ `ai-server-4080:8082`) | | chat_web_app | `chat.aimloperations.com` (+ www); `beta.chat.aimloperations.com` | `adama:8082` / `8083` + same on roslin / ai-server-4080 |
| chat_backend | `chatbackend.aimloperations.com` | `adama:8003` + `roslin:8003` + `ai-server-4080:8003` | | chat_backend | `chatbackend.aimloperations.com`; `beta.chatbackend.aimloperations.com` | `adama:8003` / `8013` + same on roslin / ai-server-4080 |
### Required changes IN each app repo (owned separately) ### Required changes IN each app repo (owned separately)
@@ -369,8 +369,8 @@ Store vault password for CI in a file readable only by the Act runner (e.g. `~/.
| 9 | Stub `deploy-apps.yml` + update `company_site` workflow | Future | | 9 | Stub `deploy-apps.yml` + update `company_site` workflow | Future |
| 10 | Dockerize `company_site` | Future (separate ticket) | | 10 | Dockerize `company_site` | Future (separate ticket) |
| 10a | Register + deploy `scha` (all webservers, port 8002) | In progress ([scha#19](https://git.aimloperations.com/ai_ml_operations/scha/issues/19)) | | 10a | Register + deploy `scha` (all webservers, port 8002) | In progress ([scha#19](https://git.aimloperations.com/ai_ml_operations/scha/issues/19)) |
| 10b | Register + deploy `chat_web_app` (node-static, port 8082) | In progress ([chat_web_app#13](https://git.aimloperations.com/ai_ml_operations/chat_web_app/issues/13)) | | 10b | Register + deploy `chat_web_app` (node-static, ports 8082/8083) | Done (prod); beta ([#7](https://git.aimloperations.com/ai_ml_operations/server-infra/issues/7), [chat_web_app#35](https://git.aimloperations.com/ai_ml_operations/chat_web_app/issues/35)) |
| 10c | Register + deploy `chat_backend` (django, port 8003) | In progress ([chat_backend#6](https://git.aimloperations.com/ai_ml_operations/chat_backend/issues/6)) | | 10c | Register + deploy `chat_backend` (django, ports 8003/8013) | Done (prod); beta ([#7](https://git.aimloperations.com/ai_ml_operations/server-infra/issues/7), [chat_backend#26](https://git.aimloperations.com/ai_ml_operations/chat_backend/issues/26)) |
| 11 | Gitea container registry (optional) | Future | | 11 | Gitea container registry (optional) | Future |
## Open Decisions ## Open Decisions
+2 -2
View File
@@ -13,6 +13,6 @@ host_apps:
- { name: scha, env: prod, port: 8002 } - { name: scha, env: prod, port: 8002 }
# optional: - { name: scha, env: beta, port: 8012 } # optional: - { name: scha, env: beta, port: 8012 }
- { name: chat_web_app, env: prod, port: 8082 } - { name: chat_web_app, env: prod, port: 8082 }
# optional: - { name: chat_web_app, env: beta, port: 8083 } - { name: chat_web_app, env: beta, port: 8083 }
- { name: chat_backend, env: prod, port: 8003 } - { name: chat_backend, env: prod, port: 8003 }
# optional: - { name: chat_backend, env: beta, port: 8013 } - { name: chat_backend, env: beta, port: 8013 }
+2 -2
View File
@@ -26,6 +26,6 @@ host_apps:
- { name: dta_service, env: beta, port: 8011 } - { name: dta_service, env: beta, port: 8011 }
- { name: scha, env: prod, port: 8002 } - { name: scha, env: prod, port: 8002 }
- { name: chat_web_app, env: prod, port: 8082 } - { name: chat_web_app, env: prod, port: 8082 }
# optional: - { name: chat_web_app, env: beta, port: 8083 } - { name: chat_web_app, env: beta, port: 8083 }
- { name: chat_backend, env: prod, port: 8003 } - { name: chat_backend, env: prod, port: 8003 }
# optional: - { name: chat_backend, env: beta, port: 8013 } - { name: chat_backend, env: beta, port: 8013 }
+2 -2
View File
@@ -10,6 +10,6 @@ host_apps:
- { name: scha, env: prod, port: 8002 } - { name: scha, env: prod, port: 8002 }
# optional: - { name: scha, env: beta, port: 8012 } # optional: - { name: scha, env: beta, port: 8012 }
- { name: chat_web_app, env: prod, port: 8082 } - { name: chat_web_app, env: prod, port: 8082 }
# optional: - { name: chat_web_app, env: beta, port: 8083 } - { name: chat_web_app, env: beta, port: 8083 }
- { name: chat_backend, env: prod, port: 8003 } - { name: chat_backend, env: prod, port: 8003 }
# optional: - { name: chat_backend, env: beta, port: 8013 } - { name: chat_backend, env: beta, port: 8013 }