Skip to content

Commit cc78ad6

Browse files
docs: point Subactor SSOT to subactor/deployment
docs: point Subactor SSOT to subactor/deployment
2 parents e8eb4ea + 6411c1d commit cc78ad6

11 files changed

Lines changed: 20 additions & 528 deletions

File tree

docs/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
| Doc | Topic |
44
| --- | --- |
5-
| [subactor-deployment.md](subactor-deployment.md) | Subactor / sub.actor / `*.subactor.com` topology via redeploy |
5+
| [subactor-deployment.md](subactor-deployment.md) | Pointer → SSOT `subactor/deployment` (not HOME here) |
66
| [fleet.md](fleet.md) | Fleet & device registry |
77
| [patterns.md](patterns.md) | Common migration patterns |
88
| [observe.md](observe.md) | Observe mode |

docs/subactor-deployment.md

Lines changed: 11 additions & 205 deletions
Original file line numberDiff line numberDiff line change
@@ -1,211 +1,17 @@
1-
# Subactor deployment through `semcod/redeploy`
1+
# Subactor deployment docs moved
22

3-
HOME: `semcod` (`redeploy`, toolkit).
4-
Runtime facts and authority: **ADOPT** from Subactor
5-
(`platform/config/deployment-bindings`, `www-sub-actor/docs/deployment.md`,
6-
knowledge entries). Host fitness: **ADOPT** `wellmanifest/policy-dsl`
7-
(`subactor.host/production-server/v1`, `subactor.host/rpi5/v1`).
3+
**SSOT is `subactor/deployment` (HOME=`subactor`), not this repository.**
84

9-
This document answers: **how Subactor is deployed today**, and **how operators
10-
drive that topology with `redeploy`** (detect → plan → apply / fleet).
5+
- https://github.com/subactor/deployment
6+
- Topology / procedures / fleet wrappers: that repo’s `docs/` and `redeploy/`
117

12-
> Status observed: **2026-08-15**. Live public `*.subactor.com` and current
13-
> `sub.actor` publish path are **Plesk**. Full Docker VPS + Traefik for
14-
> Platform/`control.sub.actor` is the **documented target** in
15-
> `www-sub-actor/docs/deployment.md`, not yet the live Founder Control host.
16-
17-
---
18-
19-
## 1. Topology (as-is vs target)
20-
21-
```text
22-
┌─────────────────────────────────────┐
23-
│ Plesk 217.160.250.222 (edge) │
24-
Internet ──────────────►│ DNS / TLS / mail / static / PHP │
25-
│ Node Toolkit (founder origin) │
26-
└──────────────┬──────────────────────┘
27-
28-
┌─────────────────────────────┼─────────────────────────────┐
29-
│ │ │
30-
*.subactor.com founder.subactor.com sub.actor
31-
static / PHP sites Node proxy → :19081 Plesk httpdocs
32-
(SFTP plesk:// sync) SSH -R from Lenovo (binding:
33-
→ Caddy :18081 → Control deployment:sub-actor:production)
34-
35-
TARGET (policy-aligned Docker VPS — FORBID Compose inside Plesk):
36-
37-
Internet ──► Docker VPS (Traefik ACME DNS-01)
38-
├─ https://sub.actor / *.sub.actor (portal image sha-*)
39-
└─ https://control.sub.actor (Platform Control router)
40-
Plesk remains DNS/TLS/mail/WWW edge only
41-
```
42-
43-
### Domain map (SSOT)
44-
45-
Source of truth: `subactor/platform/config/deployment-bindings/registry.v1.json`
46-
and `public-pages.json`. Provider for listed sites today: **`plesk`**.
47-
48-
| Domain | Role today | Deploy mechanism |
49-
| --- | --- | --- |
50-
| `subactor.com` | Marketing / main site | Plesk SFTP sync |
51-
| `www.subactor.com`, `docs.subactor.com`, `docs-stage.subactor.com` | Docs / www | Plesk SFTP |
52-
| `logo.subactor.com`, `status.subactor.com`, `contracts.subactor.com`, … | Brand / status | Plesk SFTP |
53-
| `identity.subactor.com`, `chat.subactor.com` | Surface placeholders | Plesk SFTP |
54-
| `auth.subactor.com` | Auth **bootstrap** static site (not full IdP yet) | Plesk SFTP; project `projekty/auth-subactor-com` |
55-
| `founder.subactor.com` | Public Founder Control origin | Plesk Node `plesk-origin` + SSH reverse tunnel |
56-
| `sub.actor` | SaaS portal publish | Plesk webspace `sub.actor/httpdocs` (live); Docker Traefik path documented |
57-
| `control.sub.actor` | Authenticated Control | Documented on Docker VPS; live Founder still via `founder.subactor.com` |
58-
| `*.sub.actor` tenants | Tenant vhosts | Documented Traefik wildcard; live depends on portal stack |
59-
60-
`control.subactor.com` is **not** in the bindings registry.
61-
62-
---
63-
64-
## 2. Current procedures (canonical scripts)
65-
66-
### A. Static / PHP public pages (`*.subactor.com`, often `sub.actor`)
67-
68-
1. Exact deployment binding + plan hash (Digital Twin / Control).
69-
2. `plesk://host/site/command/sync` (SFTP) — credentials from Vault scopes, not
70-
in Git.
71-
3. HTTP/hash read-back on the bound URL.
72-
4. Entry points: Planfile tickets, `platform/scripts/deploy-public-pages.mjs`,
73-
project reconciliation.
74-
75-
**redeploy role:** inventory in `examples/subactor/fleet.yaml`; verify steps in
76-
`01-plesk-edge-verify` (curl EQL). Publish mutate stays Subactor `plesk://`
77-
(authority + binding), not a free-form rsync from redeploy.
78-
79-
### B. Founder public Control (`founder.subactor.com`)
80-
81-
1. Publish `projekty/founder-subactor-com/plesk-origin/{app.js,package.json}` to
82-
Plesk docroot `founder.subactor.com/`.
83-
2. Keep `founder-plesk-tunnel.service` on Lenovo
84-
(`platform/scripts/founder-plesk-tunnel.sh`) → `prototypowanie.pl:19081`.
85-
3. Doctor: `platform/scripts/founder-public-origin-doctor.sh`.
86-
4. EQL: `/` → 401 Basic; `/founder/form` → 200; `/__origin_health` → 200.
87-
88-
**redeploy role:** `02-founder-origin-verify` migration (health probes only).
89-
90-
### C. Platform Compose (lab / future VPS)
91-
92-
```bash
93-
cd /opt/subactor/src/platform # or sibling checkout
94-
./scripts/deploy-stack.sh deploy
95-
```
96-
97-
Posture from host `.env` (`SUBACTOR_DEPLOYMENT_TOPOLOGY`,
98-
`CONTROL_DEPLOYMENT_POSTURE`). Never `compose down -v` in deploy procedures.
99-
100-
### D. Documented full portal + Platform (Docker VPS target)
101-
102-
From `www-sub-actor/docs/deployment.md`:
103-
104-
1. Host fit per Policy DSL (16 GiB min / 32 GiB recommended).
105-
2. `capture-platform-lock.sh``sync-platform.sh` (exact SHAs).
106-
3. Secrets on host only; GHCR image `ghcr.io/subactor/www-sub-actor:sha-*`.
107-
4. `deploy-all.sh docker <PORTAL_IMAGE>` → Platform then portal.
108-
5. Health: `https://sub.actor/readyz`, tenant resolve smoke.
109-
6. GitHub Environments `staging` / `production` + `release.sh` over SSH.
110-
111-
**redeploy role:** `03-docker-vps-platform` migration wraps the same SSH command
112-
surface for detect/plan/apply and fleet targeting.
113-
114-
### E. auth.subactor.com
115-
116-
Static bootstrap only. Full SSO/OIDC federation is **not** the current runtime.
117-
Do not treat `auth.subactor.com` as the production IdP until a binding + provider
118-
say so.
119-
120-
---
121-
122-
## 3. Using `redeploy` for Subactor
123-
124-
Install: `pipx install redeploy` (see root README).
8+
This toolkit (`semcod/redeploy`) remains generic: `detect``plan``apply` /
9+
`fleet`. Subactor operators **ADOPT** it from `subactor/deployment`; they do not
10+
treat `examples/subactor/` here as source of truth.
12511

12612
```bash
127-
cd examples/subactor
128-
129-
# Fleet inventory (roles / tags — no secrets)
130-
redeploy fleet --file fleet.yaml
131-
132-
# Plan only (no SSH)
133-
redeploy run 03-docker-vps-platform/migration.yaml --plan-only
134-
135-
# Dry-run against a configured host (set SUBACTOR_VPS_SSH in env / edit host)
136-
redeploy run 03-docker-vps-platform/migration.yaml --dry-run
137-
138-
# Verify-only edge probes (read-only)
139-
redeploy run 01-plesk-edge-verify/migration.yaml --plan-only
140-
redeploy run 02-founder-origin-verify/migration.yaml --plan-only
141-
```
142-
143-
### Safety rules (fail closed)
144-
145-
| Rule | Why |
146-
| --- | --- |
147-
| No Compose stack inside Plesk | Policy `FORBID RUN_COMPOSE_STACK_INSIDE_PLESK` |
148-
| No Control port 8181 on public host | Policy `FORBID BIND_CONTROL_PORT_8181_PUBLIC` |
149-
| No mutable `main` multi-repo deploy | Use `components.lock` / `sha-*` images |
150-
| No secrets in `migration.yaml` / Git | Host files + Vault; placeholders only here |
151-
| `redeploy apply` ≠ production authority | Subactor grant / binding still required for mutate |
152-
| Validator merge ≠ production apply | Separate POA / Planfile / SSH release |
153-
154-
---
155-
156-
## 4. Example package layout
157-
158-
```text
159-
examples/subactor/
160-
├── README.md
161-
├── fleet.yaml # roles: plesk-edge, founder-origin, docker-vps, rpi5-edge
162-
├── 01-plesk-edge-verify/
163-
│ ├── migration.yaml # curl EQL for public pages
164-
│ └── redeploy.yaml
165-
├── 02-founder-origin-verify/
166-
│ ├── migration.yaml # founder EQL + tunnel hint
167-
│ └── redeploy.yaml
168-
└── 03-docker-vps-platform/
169-
├── migration.yaml # deploy-all.sh / release surface
170-
└── redeploy.yaml
13+
git clone git@github.com:subactor/deployment.git
14+
cd deployment
15+
redeploy fleet --file redeploy/fleet.yaml
16+
redeploy run redeploy/03-docker-vps-platform/migration.yaml --plan-only
17117
```
172-
173-
Hosts in examples use placeholders:
174-
175-
- `deploy@SUBACTOR_VPS_IP` — Docker production VPS
176-
- `operator@LENOVO_LAB` — tunnel / Control lab host
177-
- Plesk verify steps run from the operator machine (no Plesk root required)
178-
179-
Replace placeholders before `--dry-run` / apply. Prefer environment-specific
180-
copies outside Git for real IPs.
181-
182-
---
183-
184-
## 5. Cross-links (do not duplicate SSOT)
185-
186-
| Concern | Canonical location |
187-
| --- | --- |
188-
| Host MUST/SHOULD tables | `wellmanifest/policy-dsl` + `www-sub-actor/docs/deployment.md` §1 |
189-
| Portal/PayPal/ACME/GitHub release | `www-sub-actor/docs/deployment.md` |
190-
| Domain → docroot bindings | `subactor/platform/config/deployment-bindings/registry.v1.json` |
191-
| Founder origin ops | `subactor/projekty/founder-subactor-com/README.md` |
192-
| Auth bootstrap | `subactor/projekty/auth-subactor-com/README.md` |
193-
| redeploy CLI mechanics | `semcod/redeploy/README.md`, `docs/fleet.md` |
194-
195-
When this document disagrees with Subactor registries or live knowledge, **Subactor
196-
SSOT wins**; update this file in the same change set.
197-
198-
---
199-
200-
## 6. Suggested operator sequence (target VPS cutover)
201-
202-
1. `redeploy run 01-plesk-edge-verify/... --plan-only` — baseline public EQL.
203-
2. Qualify VPS with Policy DSL production-server profile.
204-
3. Bootstrap Docker host (`www-sub-actor/scripts/host-bootstrap.sh`).
205-
4. Pin sources (`capture-platform-lock` / `sync-platform`).
206-
5. `redeploy run 03-docker-vps-platform/... --dry-run` then apply under grant.
207-
6. Point `sub.actor` / `*.sub.actor` A/AAAA at VPS; keep Plesk for `*.subactor.com`
208-
edge until intentionally migrated.
209-
7. Move Founder public URL to `https://control.sub.actor/founder` only after
210-
Control is healthy on Traefik; keep tunnel as rollback until EQL green.
211-
8. Re-run verify migrations; backup Postgres / `acme-data` / secrets.

examples/README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,11 @@ They are not useful as:
4343
examples/
4444
├── yaml/ # supported, tested examples
4545
├── md/ # three supported markdown subset examples plus prototypes
46-
└── subactor/ # Subactor Plesk edge + Docker VPS fleet (docs + verify wrappers)
46+
└── subactor/ # pointer only → https://github.com/subactor/deployment
4747
```
4848

49-
Subactor operators: start at
50-
[`subactor/README.md`](subactor/README.md) and
51-
[`../docs/subactor-deployment.md`](../docs/subactor-deployment.md).
49+
Subactor operators: use **`subactor/deployment`** (HOME), not this toolkit repo.
50+
See [`../docs/subactor-deployment.md`](../docs/subactor-deployment.md).
5251

5352
## Notes
5453

examples/subactor/01-plesk-edge-verify/migration.yaml

Lines changed: 0 additions & 58 deletions
This file was deleted.

examples/subactor/01-plesk-edge-verify/redeploy.yaml

Lines changed: 0 additions & 5 deletions
This file was deleted.

examples/subactor/02-founder-origin-verify/migration.yaml

Lines changed: 0 additions & 67 deletions
This file was deleted.

examples/subactor/02-founder-origin-verify/redeploy.yaml

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)