void 0.23.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS_TEMPLATE.md +1 -1
- package/README.md +19 -106
- package/dist/{account-cmd-C84Ee8cO.mjs → account-cmd-DcR1ywt8.mjs} +5 -5
- package/dist/{auth-CSkdO2Bb.mjs → auth-7wuZ5ob8.mjs} +22 -49
- package/dist/auth-CdgZ9uag.mjs +2 -0
- package/dist/{auth-link-CioEg6uY.mjs → auth-link-Z6E5DYvM.mjs} +5 -6
- package/dist/{auth-router-BsR981d4.mjs → auth-router-BdM4avI8.mjs} +7 -7
- package/dist/{build-cmd-LzvNJORH.mjs → build-cmd-CEE7D-hM.mjs} +7 -8
- package/dist/{cache-C4MvnrMH.mjs → cache-TcZnBLtH.mjs} +6 -7
- package/dist/{cancel-deploy-abUxpP2n.mjs → cancel-deploy-CYoZmcmR.mjs} +4 -6
- package/dist/{cf-access-P0iZnu0q.mjs → cf-access-AHKBzmuu.mjs} +4 -48
- package/dist/{cf-access-DRsQRe6k.mjs → cf-access-TWNzXltp.mjs} +3 -11
- package/dist/cf-build-output-ChY6-XWP.mjs +2 -0
- package/dist/cli/cli.mjs +49 -46
- package/dist/cli/cloudflare-operation-process.mjs +16 -7
- package/dist/cli/env-schema-probe.mjs +3 -3
- package/dist/client-B4Me-9HE.mjs +2 -0
- package/dist/{client-RV8NVeB8.mjs → client-RsPo8wsP.mjs} +129 -33
- package/dist/{cloudflare-cmd-BcrVyTmJ.mjs → cloudflare-cmd-bhwCxAN6.mjs} +2 -2
- package/dist/{cloudflare-connect-B8uPZ4nx.mjs → cloudflare-connect-CuhRgk3k.mjs} +2 -2
- package/dist/{cloudflare-operations-AiWashgg.mjs → cloudflare-operations-BhbK6yTq.mjs} +1 -1
- package/dist/{cloudflare-operations-fxHb-byx.mjs → cloudflare-operations-CjaV4lZi.mjs} +2 -2
- package/dist/{connect-Bd4kJd9U.mjs → connect-DCvUmPXY.mjs} +13 -10
- package/dist/{create-project-Boczwj5r.mjs → create-project-C734I-Mu.mjs} +1 -1
- package/dist/{create-project-bMf6ffLZ.mjs → create-project-eAPgYq35.mjs} +13 -13
- package/dist/{db-8uG64XLl.mjs → db-C07GEdKF.mjs} +27 -30
- package/dist/{delete-NvbiyeJf.mjs → delete-pKMVsrpJ.mjs} +5 -6
- package/dist/deploy-BDu1vhSH.mjs +2 -0
- package/dist/{deploy-DzAIwqNU.mjs → deploy-DfsAe-T0.mjs} +9567 -9215
- package/dist/{dev-inbox-P0u4tM8Y.mjs → dev-inbox-D64ZKUod.mjs} +5 -6
- package/dist/{domain-y5Tvydvo.mjs → domain-D3uA9ize.mjs} +8 -8
- package/dist/{email-B3umsW75.mjs → email-z3o2cwjH.mjs} +8 -8
- package/dist/{env-BS6qYHDb.mjs → env-3Q8-_2IH.mjs} +7 -9
- package/dist/{env-types-C2_bIk_b.mjs → env-types-D5kds_OZ.mjs} +1 -1
- package/dist/{env-validation-DbTg7-ar.mjs → env-validation-cZBvGWaP.mjs} +1 -1
- package/dist/{env-validation-BPn7vk-V.mjs → env-validation-vBSQ8gw5.mjs} +3 -3
- package/dist/gen-ById9r2j.mjs +2 -0
- package/dist/{gen-B580--vC.mjs → gen-NjwoG9FK.mjs} +2 -4
- package/dist/{github-cmd-v45BdfKX.mjs → github-cmd-DquUq-b1.mjs} +15 -24
- package/dist/{headers-DWi2IXWx.mjs → headers-2rKda9Y6.mjs} +1 -1
- package/dist/help-DPGBwomV.mjs +2 -0
- package/dist/{help-daGKjXGk.mjs → help-DRZXC4fj.mjs} +8 -4
- package/dist/{inbound-aVHEUhKo.mjs → inbound-fRkqcXaC.mjs} +1 -1
- package/dist/index.d.mts +18 -14
- package/dist/index.mjs +2176 -2110
- package/dist/{info-B97bTX9N.mjs → info-BmA3_IFZ.mjs} +1 -3
- package/dist/{init-Bvy7zrBo.mjs → init-DT7yuuyl.mjs} +28 -27
- package/dist/{link-CDqqCjFl.mjs → link-CXOlqh2F.mjs} +6 -7
- package/dist/{list-CZj0dzKY.mjs → list-eEWVJEPn.mjs} +8 -9
- package/dist/{local-d1-2CMnpuW_.mjs → local-d1-Df4XpwhW.mjs} +1 -1
- package/dist/log-vqY3pqwI.mjs +29 -0
- package/dist/login-C98-sw79.mjs +2 -0
- package/dist/{login-UZKFM_u7.mjs → login-pWQHYVu2.mjs} +12 -10
- package/dist/{logs-CUZ6t9t3.mjs → logs-DnxVX7TR.mjs} +11 -13
- package/dist/migrate-CEu2X5DB.mjs +2 -0
- package/dist/{migrate-DHul7PRV.mjs → migrate-CV1on-yJ.mjs} +2 -4
- package/dist/{operator-args-CLgKGlwU.mjs → operator-args-CAVcmwUt.mjs} +12 -5
- package/dist/{operator-auth-8KnOVXVd.mjs → operator-auth-CkmTE3rt.mjs} +2 -2
- package/dist/{operator-client-DUwumHpQ.mjs → operator-client-LmwjxT6q.mjs} +3 -3
- package/dist/{operator-cmd-DBA6dl0m.mjs → operator-cmd-d-IEKgNk.mjs} +6 -6
- package/dist/{output-Dm_A4Tbv.mjs → output-BBsUwdyT.mjs} +22 -14
- package/dist/pages/client.d.mts +3 -0
- package/dist/pages/client.mjs +120 -29
- package/dist/pages/index.mjs +1 -1
- package/dist/{platform-args-BJdRtlLq.mjs → platform-args-Bzf8JPc2.mjs} +11 -3
- package/dist/platform-args-Cq6EjQro.mjs +2 -0
- package/dist/{platform-auth-config-B56E9YP1.mjs → platform-auth-config-0V0lA3pF.mjs} +7 -7
- package/dist/{platform-auth-protection-BDWO_aER.mjs → platform-auth-protection-DFeJ-JkK.mjs} +9 -9
- package/dist/{platform-auth-recovery-1gg4CSRe.mjs → platform-auth-recovery-ICy4muq6.mjs} +7 -7
- package/dist/{platform-cmd-Bt-1w6pY.mjs → platform-cmd-BPySFOew.mjs} +1 -1
- package/dist/{platform-cmd-DMcQStSc.mjs → platform-cmd-D7vSWMvV.mjs} +38 -28
- package/dist/platform-discovery-DDDUvnqp.mjs +27 -0
- package/dist/{platform-domain-BNkcz0OB.mjs → platform-domain-CUdY064e.mjs} +5 -5
- package/dist/{platform-lifecycle-BE6C_jxh.mjs → platform-lifecycle-BaUdTRPU.mjs} +1 -1
- package/dist/{platform-lifecycle-9OyBALhH.mjs → platform-lifecycle-Dm09JNkn.mjs} +4404 -3297
- package/dist/{platform-management-CjwLVQwN.mjs → platform-management-BSEc_ZeG.mjs} +48 -11
- package/dist/platform-management-Bp6aoH2C.mjs +2 -0
- package/dist/{platform-plans-config-BNGKGr4P.mjs → platform-plans-config-B0pOVQyW.mjs} +3 -3
- package/dist/{platform-recovery-D6KSpuFm.mjs → platform-recovery-WOZ95Uze.mjs} +4 -4
- package/dist/{platform-registry-QBa4DK32.mjs → platform-registry-KfNEF84O.mjs} +3 -3
- package/dist/{prepare-B5Mkic5u.mjs → prepare-39EvOhI6.mjs} +2 -4
- package/dist/prepare-CnjcTV2s.mjs +2 -0
- package/dist/{prepare-DOsL0CC9.mjs → prepare-DnaKBi--.mjs} +1 -1
- package/dist/{project-C0Fqu05O.mjs → project-BkbfDs0V.mjs} +15 -82
- package/dist/project-IOjBU8R6.mjs +2 -0
- package/dist/{project-cmd-CNzrqvBv.mjs → project-cmd-Bs5A392E.mjs} +21 -22
- package/dist/{project-team-DQOWPfQT.mjs → project-team-ohAWWaew.mjs} +8 -9
- package/dist/{project-token-CTDYU0Cc.mjs → project-token-CP01Jna6.mjs} +6 -9
- package/dist/{project-zero-trust-BNAkW-_0.mjs → project-zero-trust-BzkVgx35.mjs} +5 -6
- package/dist/prompts-6OSVA7DJ.mjs +2087 -0
- package/dist/prompts-ZAuJlyCj.mjs +2 -0
- package/dist/{provision-C4ORE7G7.mjs → provision-BEv0k-qz.mjs} +1 -1
- package/dist/{provision-CJFgTZY8.mjs → provision-Btj1jppf.mjs} +5 -7
- package/dist/{requests-MhxYnau8.mjs → requests-B3PBuGlX.mjs} +5 -6
- package/dist/{rollback-CJ6iSDoU.mjs → rollback-DDub9GsO.mjs} +9 -10
- package/dist/runtime/ai.mjs +3 -5
- package/dist/runtime/email/testing.mjs +2 -2
- package/dist/runtime/email.mjs +36 -18
- package/dist/runtime/remote/index.mjs +2 -2
- package/dist/runtime/routing.mjs +1 -1
- package/dist/{secret-Dli5fP0B.mjs → secret-3c72lY1U.mjs} +15 -16
- package/dist/{skills-D1II1Juz.mjs → skills-BPQUGClu.mjs} +1 -1
- package/dist/{subcommand-prompt-CY1C4fvl.mjs → subcommand-prompt-Dhom39bd.mjs} +40 -32
- package/dist/sveltekit.d.mts +1 -1
- package/dist/sveltekit.mjs +4 -9
- package/dist/{wrangler-7K-bW_DL.mjs → wrangler-DhUerFkW.mjs} +10 -15
- package/package.json +22 -23
- package/sandbox.Dockerfile +1 -1
- package/skills/void/SKILL.md +6 -1
- package/skills/void/docs/guide/ai.md +24 -86
- package/skills/void/docs/guide/auth.md +0 -2
- package/skills/void/docs/guide/database/d1.md +7 -7
- package/skills/void/docs/guide/deployment.md +58 -102
- package/skills/void/docs/guide/edge/headers.md +1 -1
- package/skills/void/docs/guide/email/domains.md +5 -1
- package/skills/void/docs/guide/email/sending.md +1 -1
- package/skills/void/docs/guide/env-vars.md +1 -5
- package/skills/void/docs/guide/index.md +19 -18
- package/skills/void/docs/guide/kv.md +0 -2
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +49 -47
- package/skills/void/docs/guide/pages-routing/overview.md +2 -2
- package/skills/void/docs/guide/platform/administration/email.md +0 -2
- package/skills/void/docs/guide/platform/administration/operations.md +11 -22
- package/skills/void/docs/guide/platform/administration/plans.md +1 -5
- package/skills/void/docs/guide/platform/administration/zero-trust.md +24 -9
- package/skills/void/docs/guide/platform/development/schema-ci.md +7 -1
- package/skills/void/docs/guide/platform/installation/ci.md +1 -1
- package/skills/void/docs/guide/platform/installation/credentials.md +10 -3
- package/skills/void/docs/guide/platform/installation/domains.md +8 -3
- package/skills/void/docs/guide/platform/installation/first-deployment.md +2 -2
- package/skills/void/docs/guide/platform/installation/maintenance.md +37 -5
- package/skills/void/docs/guide/platform/installation/prerequisites.md +87 -14
- package/skills/void/docs/guide/platform/installation/setup.md +80 -10
- package/skills/void/docs/guide/quickstart.md +37 -80
- package/skills/void/docs/guide/remote-dev.md +1 -1
- package/skills/void/docs/guide/sandboxes.md +36 -46
- package/skills/void/docs/guide/self-hosted-platform.md +20 -0
- package/skills/void/docs/guide/websockets.md +0 -2
- package/skills/void/docs/integrations/frameworks/overview.md +2 -2
- package/skills/void/docs/integrations/frameworks/sveltekit.md +40 -25
- package/skills/void/docs/integrations/nodejs-bun-deno.md +7 -2
- package/skills/void/docs/reference/api/resources.md +27 -0
- package/skills/void/docs/reference/api.md +1 -1
- package/skills/void/docs/reference/cli/auth.md +4 -3
- package/skills/void/docs/reference/cli/database.md +1 -1
- package/skills/void/docs/reference/cli/deploy.md +21 -1
- package/skills/void/docs/reference/cli/platform-installation.md +42 -27
- package/skills/void/docs/reference/cli/platform-operations.md +4 -8
- package/skills/void/docs/reference/cli/platform-zero-trust.md +14 -0
- package/skills/void/docs/reference/cli/platform.md +5 -0
- package/skills/void/docs/reference/config.md +1 -1
- package/skills/void/docs/reference/resource-inference.md +11 -8
- package/dist/auth-CCjt0hcq.mjs +0 -2
- package/dist/cf-build-output-_0HNWysu.mjs +0 -2
- package/dist/client-Cu7jWiF1.mjs +0 -2
- package/dist/deploy-bjXdFCtn.mjs +0 -2
- package/dist/dist-BuDuKZJv.mjs +0 -2
- package/dist/dist-CTBk70IR.mjs +0 -1310
- package/dist/gen-BVaUUumi.mjs +0 -2
- package/dist/help-DofyZuY7.mjs +0 -2
- package/dist/log-ChfPKsVd.mjs +0 -26
- package/dist/login-DYt_An22.mjs +0 -2
- package/dist/migrate-8_2u55MD.mjs +0 -2
- package/dist/platform-args-D3RXyR6h.mjs +0 -2
- package/dist/platform-management-CnyTdcWX.mjs +0 -2
- package/dist/prepare-cgvDMtSb.mjs +0 -2
- package/dist/project-BuUwfj6f.mjs +0 -2
- package/skills/void/docs/guide/env-migration.md +0 -109
- package/dist/{cf-build-output-BPqOT964.mjs → cf-build-output-U8o1Gl6X.mjs} +1 -1
|
@@ -8,6 +8,14 @@ Project Zero Trust puts Cloudflare Access in front of the hostnames of projects
|
|
|
8
8
|
|
|
9
9
|
This is separate from the Access login and protection for the platform API. Projects deployed directly to Cloudflare are not affected.
|
|
10
10
|
|
|
11
|
+
Choose app access during `void platform install`, or configure it later using this page. The installer reuses the platform policy or helps you select separate company rules, and finishes setup before opening traffic.
|
|
12
|
+
|
|
13
|
+
If you choose public apps in an account with Default-Deny, Void manages scoped
|
|
14
|
+
public rules instead. New projects and custom domains remain public automatically.
|
|
15
|
+
Keep these rules enabled while Default-Deny is on; removing them can block traffic.
|
|
16
|
+
Public-only installations need no identity providers or company policies until you
|
|
17
|
+
choose to protect apps. To renew their token in Admin, leave the policy fields blank.
|
|
18
|
+
|
|
11
19
|
## Requirements
|
|
12
20
|
|
|
13
21
|
- A Cloudflare Zero Trust organization in the account that hosts the platform, with the identity providers and reusable Access policies you want to use. Select at least one Allow policy that matches people by identity. Void rejects Bypass and Service Auth policies, and rules that allow Everyone or any service token.
|
|
@@ -116,22 +124,29 @@ If a project must accept such requests:
|
|
|
116
124
|
|
|
117
125
|
Void creates and owns these self-hosted applications in your Zero Trust organization:
|
|
118
126
|
|
|
119
|
-
| Application
|
|
120
|
-
|
|
|
121
|
-
| Shared project application
|
|
122
|
-
| Public
|
|
123
|
-
|
|
|
124
|
-
|
|
|
127
|
+
| Application | Covers | Policy | Exists |
|
|
128
|
+
| --------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------ |
|
|
129
|
+
| Shared project application | `*.<your domain>` and this installation's `workers.dev` testing URLs | Your selected policies and identity providers | Once for protected-app configurations |
|
|
130
|
+
| Public app management check | A reserved, unused dispatch check path | Deny Everyone; verifies management permissions without opening hostnames | Once, instead of the shared wildcard in public-only mode |
|
|
131
|
+
| Public exception | One public project's `<slug>.<your domain>` and `workers.dev` testing URL | A Bypass policy for Everyone, named `Void project is public` | One for each public project |
|
|
132
|
+
| Custom domain application | All managed custom domains of one project | Company policies for protected projects; Bypass for public ones | One for each project with managed custom domains |
|
|
133
|
+
| Health check exception | `void-platform-health.<your domain>/health` | A Bypass policy for Everyone, named `Void platform health check` | Once, while Zero Trust is enabled on an installation with a domain |
|
|
134
|
+
|
|
135
|
+
Installations configured through the installer also manage public custom-domain
|
|
136
|
+
rules. Their custom-domain application changes policy when a project switches
|
|
137
|
+
between public and protected access.
|
|
125
138
|
|
|
126
|
-
|
|
139
|
+
If the installer already configured the same health-check exception, Zero Trust
|
|
140
|
+
reuses it. Disabling project Zero Trust leaves that existing exception in place
|
|
141
|
+
so platform health checks continue to work.
|
|
127
142
|
|
|
128
143
|
The number of applications Void needs is:
|
|
129
144
|
|
|
130
145
|
```text
|
|
131
|
-
|
|
146
|
+
1 + health-check applications + public projects + projects with managed custom domains
|
|
132
147
|
```
|
|
133
148
|
|
|
134
|
-
|
|
149
|
+
The first application is the shared company policy or the public-app management check. Count a health exception once, including when it is shared with the installer. For example, 40 projects with one health exception, 10 public projects, and 5 projects with managed custom domains need 1 + 1 + 10 + 5 = 17 applications. Void stops with an error when the account has more than 500 Access applications.
|
|
135
150
|
|
|
136
151
|
#### Recognizing Void's Applications
|
|
137
152
|
|
|
@@ -14,7 +14,13 @@ vp run --filter @voidcloud/api db:generate
|
|
|
14
14
|
|
|
15
15
|
Review the generated SQL and migration journal before committing them. Released migrations are append-only. An upgrade applies new migrations while the previous Workers may still serve requests, so schema changes must remain compatible with that code.
|
|
16
16
|
|
|
17
|
-
`platform/packages/api/drizzle/compatibility.json` records which earlier runtimes have been verified against the new schema. Add an edge only after testing that compatibility. The runtime build checks that the migration files and recorded schema history agree.
|
|
17
|
+
`platform/packages/api/drizzle/compatibility.json` records which earlier runtimes have been verified against the new schema. Add an edge only after testing that compatibility. The runtime build checks that the migration files and recorded schema history agree.
|
|
18
|
+
|
|
19
|
+
## Runtime artifact contract
|
|
20
|
+
|
|
21
|
+
`@void/platform` contains installation manifests, resource naming, discovery contracts, Worker configuration, and deployable bundles under the `./installer` export. Platform source lives in `platform/packages/`.
|
|
22
|
+
|
|
23
|
+
Runtime artifacts include migration SQL, its journal, and a rollback compatibility manifest. Drizzle authoring snapshots remain in the source tree. Migrations are forward-only; compatibility edges in `platform/packages/api/drizzle/compatibility.json` must be tested against the earlier runtime before publication. The build verifies schema lineage and hashes the journal and SQL files.
|
|
18
24
|
|
|
19
25
|
## CI in a Fork
|
|
20
26
|
|
|
@@ -49,7 +49,7 @@ void platform install \
|
|
|
49
49
|
--yes
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
Mutations require `--yes` in CI; a read-only `--plan` does not. Custom runtimes also require `--runtime <directory>`. For a new installation, run `--plan` with the same account, name, and domain options as the unattended install. If you use `--auth-config`, pass the same file to both commands. Register
|
|
52
|
+
Mutations require `--yes` in CI; a read-only `--plan` does not. Custom runtimes also require `--runtime <directory>`. For a new installation, run `--plan` with the same account, name, and domain options as the unattended install. If you use `--auth-config`, pass the same file to both commands. Register `<platform-api-url>/auth/callback` when creating a login provider's OAuth or OIDC client manually; automatic Access setup manages its own application. A custom API hostname is optional.
|
|
53
53
|
|
|
54
54
|
:::
|
|
55
55
|
|
|
@@ -8,15 +8,20 @@ Keep one password-manager entry for this platform. Paste the saved values into t
|
|
|
8
8
|
|
|
9
9
|
## Cloudflare API Tokens {#runtime-token-permissions}
|
|
10
10
|
|
|
11
|
-
For a domain installation,
|
|
11
|
+
For a domain installation or Cloudflare Access setup, the installer guides you through creating separate management and runtime tokens using Cloudflare's [API token setup](https://developers.cloudflare.com/fundamentals/api/get-started/create-token/). Its links preselect the permissions and suggest names based on your platform's display name. Scope the tokens to your selected account and, when using a domain, its zone, save them in your password manager, and paste them into the masked CLI prompts.
|
|
12
12
|
|
|
13
|
-
For workers.dev testing with the default API hostname, browser login can authorize
|
|
13
|
+
For workers.dev testing with the default API hostname, browser login can authorize
|
|
14
|
+
infrastructure setup. Void also checks account-wide Access requirements; if the
|
|
15
|
+
current credential cannot read them, the installer asks for a scoped Access token.
|
|
16
|
+
Protected apps and public apps under Default-Deny need an ongoing app-management
|
|
17
|
+
token, stored encrypted. Access setup requires a management token even on
|
|
18
|
+
workers.dev. Skip zone permissions until you add a domain.
|
|
14
19
|
|
|
15
20
|
Browser login does not grant AI Gateway access. Include **Account → AI Gateway → Edit** on the runtime token so Void can verify and create that resource.
|
|
16
21
|
|
|
17
22
|
The management token lets your CLI install and maintain the platform. The runtime token is stored as a Worker secret so the platform can deploy apps after you close your terminal. They are separate credentials.
|
|
18
23
|
|
|
19
|
-
|
|
24
|
+
Compare each token's form with the permission checklist below, and select the indicated account and zone for a domain installation. The installer saves a management token entered at the prompt in this installation’s encrypted local checkpoint and reuses it on resume. Upgrades, repairs, and other lifecycle maintenance also use that saved management token. During installation, a rejected token can be replaced at the prompt. An explicit `CLOUDFLARE_API_TOKEN` or `CF_API_TOKEN` takes precedence. Keep your password-manager copy for maintenance or another machine; scripts supply it through `CLOUDFLARE_API_TOKEN`.
|
|
20
25
|
|
|
21
26
|
::: details Permissions to select for each token
|
|
22
27
|
|
|
@@ -39,6 +44,8 @@ Use the following permissions for the core platform. Cloudflare may label write
|
|
|
39
44
|
| Zone | Workers Routes | Edit | — |
|
|
40
45
|
| Zone | Cache Purge | — | Purge |
|
|
41
46
|
|
|
47
|
+
When Void configures Access in the installation account, the initial management-token link also selects **Account → Access: Apps and Policies → Edit** and **Account → Access: Organizations, Identity Providers, and Groups → Read**. Protection adds **Account → Access: Service Tokens → Edit**. When the authentication configuration or saved setup selects existing applications, the link requests Read access instead of Edit. These permissions belong to the management token; the runtime token does not need them.
|
|
48
|
+
|
|
42
49
|
The management token also needs **Zone Edit** with authority to create zones if you ask Void to create the zone. If it already exists, use the selected zone with Zone Read and DNS Edit. Nested application domains additionally need **SSL and Certificates: Read** on the management token. A custom runtime that enables custom project domains needs **SSL and Certificates: Edit** on the runtime token; the core runtime does not enable that feature.
|
|
43
50
|
|
|
44
51
|
Void checks access before provisioning. If it reports a missing permission, update the token's permissions for the selected account or zone and retry.
|
|
@@ -66,9 +66,14 @@ void platform repair <installation-id> --dashboard-url https://dash.example.com
|
|
|
66
66
|
|
|
67
67
|
The origin must contain no credentials, path, query, or fragment. Void saves it
|
|
68
68
|
for login callbacks and keeps it across upgrades and repairs. The command does
|
|
69
|
-
not create a dashboard Worker or DNS records
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
not create a dashboard Worker or DNS records. Follow the source app’s
|
|
70
|
+
[standalone dashboard preparation](https://github.com/voidzero-dev/void/tree/main/platform/packages/dashboard#standalone-deployment)
|
|
71
|
+
to deploy your own copy with an unused Worker name, your dashboard hostname,
|
|
72
|
+
and the installed API Worker’s service binding. Set its `API_URL` to the public
|
|
73
|
+
API origin, `DASHBOARD_URL` to the dashboard origin, and `SITE_DOMAIN` to the
|
|
74
|
+
installation’s application domain. Omit the option to keep the saved origin.
|
|
75
|
+
The dashboard provides sign-in, linked login methods, and sign-out; use the CLI
|
|
76
|
+
for user project and team management.
|
|
72
77
|
|
|
73
78
|
If Access protects the platform, its application must cover this dashboard
|
|
74
79
|
origin too. Configure the origin when installing protection. To change it on an
|
|
@@ -33,8 +33,8 @@ void project token create --name ci --expires-in 30
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Store the printed `VOID_TOKEN` and `VOID_API_URL` in the CI secret manager, then
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
run `void connect "$VOID_API_URL" --no-login` before deploying in each fresh CI
|
|
37
|
+
environment. Project files do not replace this connection step. Rotate with `void project token renew <id>` and revoke with
|
|
38
38
|
`void project token revoke <id>`. A human login token is not a CI credential.
|
|
39
39
|
|
|
40
40
|
If Cloudflare Access protects the platform, Access proof and the project
|
|
@@ -28,6 +28,13 @@ existing gate, verify that its service policy admits the installation token and
|
|
|
28
28
|
that the application covers the printed API and proxy origins. A Cloudflare
|
|
29
29
|
management API token does not authenticate an Access-protected HTTP request.
|
|
30
30
|
|
|
31
|
+
For automatic setup, resuming also creates or verifies an Access exception
|
|
32
|
+
limited to `/health` on the reserved dispatch health hostname. Void still requires
|
|
33
|
+
its private probe token on that endpoint; requests without it cannot reach an
|
|
34
|
+
application. This lets installation check routing while employee protection and
|
|
35
|
+
account-wide Default-Deny remain enabled. It does not bypass Access for an entire
|
|
36
|
+
Worker or for deployed apps.
|
|
37
|
+
|
|
31
38
|
For externally supplied credentials, set `VOID_ACCESS_CREDENTIALS` from your
|
|
32
39
|
secret manager to an object keyed by each exact API/proxy origin, with
|
|
33
40
|
`CF_ACCESS_CLIENT_ID` and `CF_ACCESS_CLIENT_SECRET` in each entry. Then rerun
|
|
@@ -56,7 +63,7 @@ Repair recreates missing infrastructure that the installer owns. It does not res
|
|
|
56
63
|
|
|
57
64
|
### Upgrade the platform
|
|
58
65
|
|
|
59
|
-
Keep the platform runtime current when updating the Void CLI.
|
|
66
|
+
Keep the platform runtime current when updating the Void CLI.
|
|
60
67
|
|
|
61
68
|
Use the installed CLI's packaged runtime to upgrade:
|
|
62
69
|
|
|
@@ -80,10 +87,6 @@ manager so they can also restore a missing Worker during repair.
|
|
|
80
87
|
|
|
81
88
|
Database migrations only move forward. Void checks compatibility before upgrading and tells you if an intermediate release is needed. If deployment fails, it attempts to restore the previous Workers against the compatible database schema. Retrying does not repeat completed migrations.
|
|
82
89
|
|
|
83
|
-
Upgrades automatically enable managed Sandboxes. The platform runtime token needs Account / Containers: Edit and Account / Cloudchamber: Edit, and the Cloudflare account must use Workers Paid before its first Sandbox application deploy. The upgrade itself does not probe Containers access, so platforms that do not deploy Sandbox applications need no additional plan or permissions.
|
|
84
|
-
|
|
85
|
-
When upgrading from a release that used tenant-owned Sandbox containers, the upgrade may first ask you to finish the legacy cleanup. Follow the [`sandbox-drain` instructions](../../../reference/cli/platform-operations.md#operator-system), then rerun the upgrade. Administrator login remains available during that maintenance step.
|
|
86
|
-
|
|
87
90
|
After a successful upgrade, you can restore a declared-compatible earlier runtime without reversing migrations:
|
|
88
91
|
|
|
89
92
|
```sh
|
|
@@ -95,6 +98,35 @@ Keep the earlier runtime files if you need rollback. If the installed version is
|
|
|
95
98
|
|
|
96
99
|
:::
|
|
97
100
|
|
|
101
|
+
### Follow upgrade and rollback progress
|
|
102
|
+
|
|
103
|
+
Watching progress is optional: a running upgrade or rollback proceeds through
|
|
104
|
+
the CLI without action on the status page. During maintenance, navigating the
|
|
105
|
+
admin UI automatically redirects to `/admin/status`. You can also open it
|
|
106
|
+
directly on your platform API origin and sign in as an administrator.
|
|
107
|
+
|
|
108
|
+
The read-only page shows the saved operation, source and target versions, and
|
|
109
|
+
the traffic state reported by the API. It refreshes automatically every five
|
|
110
|
+
seconds while visible. If updates fail, it keeps the last confirmed snapshot
|
|
111
|
+
and marks it as out of date. Normal administrator changes remain paused.
|
|
112
|
+
|
|
113
|
+
Sign-in and status remain available while the API and authentication database
|
|
114
|
+
are reachable. An operation completing
|
|
115
|
+
does not confirm every project's health. A disabled installation keeps traffic
|
|
116
|
+
paused after an upgrade or rollback.
|
|
117
|
+
|
|
118
|
+
If an operation fails or waits for DNS or Sandbox drain work, the CLI prints
|
|
119
|
+
the recovery instructions and command needed to resume. Resolve the reported
|
|
120
|
+
problem, then resume with the same runtime files. For a custom rollback, retain
|
|
121
|
+
the source runtime files too. `void platform status <id>` also prints locally saved progress
|
|
122
|
+
before checking the live API; this local checkpoint can be out of date if another
|
|
123
|
+
administrator changed the installation.
|
|
124
|
+
|
|
125
|
+
When application traffic is paused, visitors receive a temporary-unavailability
|
|
126
|
+
page with a **Try again** link. API requests and form submissions still receive
|
|
127
|
+
HTTP 503 responses. Void does not automatically replay requests; visitors who
|
|
128
|
+
submitted a form should check its result before submitting it again.
|
|
129
|
+
|
|
98
130
|
### Manage an installation from another machine
|
|
99
131
|
|
|
100
132
|
Use `discover` to restore the administrator's local installation records:
|
|
@@ -8,7 +8,7 @@ To run a Void platform, you need:
|
|
|
8
8
|
|
|
9
9
|
- A Cloudflare account with Workers for Platforms and R2 enabled.
|
|
10
10
|
- An empty hosted PostgreSQL database.
|
|
11
|
-
- An account with your chosen login provider
|
|
11
|
+
- An account with your chosen login provider: GitHub, Google, OIDC, or Cloudflare Access.
|
|
12
12
|
- A domain for your apps, or `workers.dev` for testing. You can [add a domain later](/guide/platform/installation/domains#adding-a-domain).
|
|
13
13
|
|
|
14
14
|
Void creates the Workers, storage, queues, routing, and database tables through the CLI.
|
|
@@ -19,9 +19,10 @@ Workers for Platforms requires a paid plan. Your database and Cloudflare usage a
|
|
|
19
19
|
|
|
20
20
|
In the [Cloudflare dashboard](https://dash.cloudflare.com/), select the account where you want the platform to live:
|
|
21
21
|
|
|
22
|
-
1. Open **Workers
|
|
23
|
-
2. Open **
|
|
24
|
-
3.
|
|
22
|
+
1. Open **Workers & Pages** once to let Cloudflare provision Workers for the account.
|
|
23
|
+
2. Open **Workers for Platforms** and enable its plan. Review [Workers for Platforms pricing](https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/platform/pricing/) before confirming.
|
|
24
|
+
3. Open **R2 Object Storage** and complete its activation. Void creates the bucket later.
|
|
25
|
+
4. For a domain installation, choose a domain you own, such as `example.app`. If you need one, register it with your preferred registrar. Use a spare domain's root: apps will be served at `my-app.example.app`. For workers.dev testing, skip this step and the DNS setup below.
|
|
25
26
|
|
|
26
27
|
If that domain is already in this Cloudflare account, use its existing zone. Otherwise, [add the domain to Cloudflare](https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/) and follow the nameserver instructions until the zone is active. A zone is Cloudflare's DNS configuration for a domain; creating one does not buy the domain.
|
|
27
28
|
|
|
@@ -36,7 +37,7 @@ pnpm add --global void
|
|
|
36
37
|
void platform install --plan
|
|
37
38
|
```
|
|
38
39
|
|
|
39
|
-
Sign in to Cloudflare when prompted, then choose an installation name and account. `--plan` previews the resources without changing them or requiring runtime secrets.
|
|
40
|
+
Sign in to Cloudflare when prompted, then choose an installation name and account. `--plan` previews the resources without changing them or requiring runtime secrets. Completed plans save your choices locally. Run `void platform install` again to select a saved plan; Void checks the current Cloudflare state before asking you to apply it.
|
|
40
41
|
|
|
41
42
|
For a domain installation, use these answers. Testing mode skips the application domain, zone, and catch-all questions:
|
|
42
43
|
|
|
@@ -51,7 +52,7 @@ For a domain installation, use these answers. Testing mode skips the application
|
|
|
51
52
|
|
|
52
53
|
Choose an unused installation name in your account. For example, `team` creates resources such as `void-team-api` and `void-team-proxy`.
|
|
53
54
|
|
|
54
|
-
The preview
|
|
55
|
+
The preview lists the credentials you will need. Review [Credentials](/guide/platform/installation/credentials), then run the install command printed at the end. The guided installation provides setup links and the login callback when needed.
|
|
55
56
|
|
|
56
57
|
You can select either path directly:
|
|
57
58
|
|
|
@@ -72,22 +73,94 @@ Use any PostgreSQL provider that accepts connections from your computer and Clou
|
|
|
72
73
|
2. Open the provider's connection details and select the primary database. Use a direct connection or a session-mode pooler, not transaction pooling. The connection must work from both your computer and Cloudflare.
|
|
73
74
|
3. Copy the PostgreSQL connection URL, including the password and SSL settings, into your password manager. Paste only the URL—not a surrounding `psql` command—into Void's `PostgreSQL DATABASE_URL` prompt, as the provider gives it, including SSL settings such as `sslmode=verify-full`. A Hyperdrive that Void creates trusts only public certificate authorities, so if your database uses a private certificate authority, use a separately managed Hyperdrive, as described below.
|
|
74
75
|
|
|
75
|
-
| Provider
|
|
76
|
-
|
|
|
77
|
-
| [PlanetScale Postgres](https://planetscale.com/docs/postgres/connecting)
|
|
78
|
-
| [Neon](https://neon.com/docs/get-started-with-neon/connect-neon)
|
|
79
|
-
| [Supabase](https://supabase.com/docs/guides/database/connecting-to-postgres) | Open **Connect** and use the direct connection where IPv6 is available, or the **Session pooler** on port `5432` for IPv4 connectivity. Do not select the transaction pooler on `6543`. Replace the password placeholder with your database password. |
|
|
80
|
-
|
|
81
|
-
For a dedicated Supabase project, [disable the Data API](https://supabase.com/docs/guides/api/securing-your-api#disable-the-data-api) so the platform's tables are not exposed through Supabase's auto-generated endpoints. Void uses the PostgreSQL connection, not Supabase API keys.
|
|
76
|
+
| Provider | Connection setup |
|
|
77
|
+
| ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
78
|
+
| [PlanetScale Postgres](https://planetscale.com/docs/postgres/connecting) | Choose **Postgres**, not Vitess/MySQL. Open **Connect**, create role credentials, and use the direct primary connection on port `5432`, not PgBouncer on `6432`. |
|
|
79
|
+
| [Neon](https://neon.com/docs/get-started-with-neon/connect-neon) | Open **Connect**, select the database and owner role, and turn **connection pooling off**. |
|
|
82
80
|
|
|
83
81
|
Once installation claims the database, continue using that same database for resume and maintenance commands. Uninstall never deletes external PostgreSQL.
|
|
84
82
|
|
|
83
|
+
### Use a provider CLI
|
|
84
|
+
|
|
85
|
+
You can create the database and retrieve its connection URL from either provider's CLI instead of its dashboard.
|
|
86
|
+
|
|
87
|
+
::: details PlanetScale Postgres
|
|
88
|
+
|
|
89
|
+
Install the latest [PlanetScale CLI](https://planetscale.com/docs/cli/planetscale-environment-setup). On macOS, use `brew install pscale`; the installation guide also covers Linux and Windows.
|
|
90
|
+
|
|
91
|
+
Sign in and list your organizations and regions:
|
|
92
|
+
|
|
93
|
+
```sh
|
|
94
|
+
pscale auth login
|
|
95
|
+
pscale org list
|
|
96
|
+
pscale region list --org <organization>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Replace `<organization>` with your organization slug and choose a region. List the available Postgres cluster sizes and their prices for that region:
|
|
100
|
+
|
|
101
|
+
```sh
|
|
102
|
+
pscale size cluster list --org <organization> --engine postgresql --region <region>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Create a dedicated Postgres database with your chosen cluster size, then create a role with permission to create and migrate Void's tables:
|
|
106
|
+
|
|
107
|
+
```sh
|
|
108
|
+
pscale database create void-platform \
|
|
109
|
+
--org <organization> \
|
|
110
|
+
--engine postgresql \
|
|
111
|
+
--region <region> \
|
|
112
|
+
--cluster-size <cluster-size> \
|
|
113
|
+
--wait
|
|
114
|
+
|
|
115
|
+
pscale role create void-platform main void_owner \
|
|
116
|
+
--org <organization> \
|
|
117
|
+
--inherited-roles postgres
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Save the **DATABASE URL** printed by the role-creation command in your password manager and paste it into Void's `PostgreSQL DATABASE_URL` prompt. Use the direct primary connection on port `5432` with `sslmode=verify-full`. The role's password is shown when it is created, so save it before closing the terminal.
|
|
121
|
+
|
|
122
|
+
See PlanetScale's [database commands](https://planetscale.com/docs/cli/database) and [role commands](https://planetscale.com/docs/cli/role) for more options.
|
|
123
|
+
|
|
124
|
+
:::
|
|
125
|
+
|
|
126
|
+
::: details Neon
|
|
127
|
+
|
|
128
|
+
Install the latest [Neon CLI](https://neon.com/docs/cli/install) and sign in:
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
pnpm add --global neon@latest
|
|
132
|
+
neon login
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Create a dedicated project, database, and owner role. Replace `<region-id>` with one of Neon's [supported regions](https://neon.com/docs/cli/projects#create), such as `aws-us-east-2`:
|
|
136
|
+
|
|
137
|
+
```sh
|
|
138
|
+
neon projects create --name void-platform \
|
|
139
|
+
--database void_platform \
|
|
140
|
+
--role void_owner \
|
|
141
|
+
--region-id <region-id>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Use the project ID from the output to retrieve a direct primary connection URL with TLS certificate verification:
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
neon connection-string --project-id <project-id> \
|
|
148
|
+
--database-name void_platform \
|
|
149
|
+
--role-name void_owner \
|
|
150
|
+
--endpoint-type read_write \
|
|
151
|
+
--ssl verify-full
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Save the printed URL in your password manager and paste it into Void's `PostgreSQL DATABASE_URL` prompt. Keep this connection unpooled. See Neon's [connection-string command](https://neon.com/docs/cli/connection-string) for more options.
|
|
155
|
+
|
|
156
|
+
:::
|
|
157
|
+
|
|
85
158
|
### Use an existing Hyperdrive
|
|
86
159
|
|
|
87
160
|
The installer can create Hyperdrive for you or use one you manage separately. For an existing configuration:
|
|
88
161
|
|
|
89
162
|
1. Point it at the dedicated platform database using a runtime user, and disable SQL result caching.
|
|
90
|
-
2. Select it in the installer and
|
|
163
|
+
2. Select it in the installer and review the database, host, port, and runtime user.
|
|
91
164
|
3. Supply a database owner connection at the PostgreSQL URL prompt so Void can apply migrations.
|
|
92
165
|
|
|
93
166
|
To create one first, choose **Set up a separately managed Hyperdrive** and follow the printed instructions or [Cloudflare’s setup guide](https://developers.cloudflare.com/hyperdrive/get-started/). Rerun the installer once it is ready. Void leaves its configuration under your control. For unattended setup, use the Hyperdrive variables in [Install from CI](/guide/platform/installation/ci).
|
|
@@ -4,13 +4,19 @@ outline: deep
|
|
|
4
4
|
|
|
5
5
|
# Install and Configure Login
|
|
6
6
|
|
|
7
|
+
Press Enter to accept a suggested zone or display name, or type to replace it. Enter your own installation name and application domain; examples such as `company` and `example.com` are placeholders.
|
|
8
|
+
|
|
7
9
|
For workers.dev testing, start the interactive install and choose your login method below:
|
|
8
10
|
|
|
9
11
|
```sh
|
|
10
12
|
void platform install --workers-dev
|
|
11
13
|
```
|
|
12
14
|
|
|
13
|
-
For a domain installation,
|
|
15
|
+
For a domain installation or Access setup, Void guides you to create a management API token and paste it into a masked prompt. Browser login can preview DNS, but cannot change it or configure Access. The token-creation link preselects the permissions for your choices; scope the token to your account and, when using a domain, its zone. No shell environment variable is needed for interactive installation.
|
|
16
|
+
|
|
17
|
+
::: details Use an existing management token from the shell
|
|
18
|
+
|
|
19
|
+
Set `CLOUDFLARE_API_TOKEN` to use an existing token instead of the prompt. In Bash or zsh, read it without displaying it or putting its value in command history:
|
|
14
20
|
|
|
15
21
|
```sh
|
|
16
22
|
printf 'Cloudflare management API token: '
|
|
@@ -20,7 +26,7 @@ export CLOUDFLARE_API_TOKEN
|
|
|
20
26
|
void platform install
|
|
21
27
|
```
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
In PowerShell:
|
|
24
30
|
|
|
25
31
|
```powershell
|
|
26
32
|
$env:CLOUDFLARE_API_TOKEN = [System.Net.NetworkCredential]::new('', (Read-Host 'Cloudflare management API token' -AsSecureString)).Password
|
|
@@ -29,14 +35,66 @@ void platform install
|
|
|
29
35
|
|
|
30
36
|
:::
|
|
31
37
|
|
|
32
|
-
After reviewing `--plan`, run the command printed under **Next
|
|
38
|
+
After reviewing `--plan`, run `void platform install` and select your saved plan, or run the command printed under **Next, run this command to install the platform**. Both carry your choices into installation and check the current Cloudflare state. Review the refreshed plan. At **Apply this plan?**, **Yes** is selected; press Enter to continue to the credential prompts, or choose **No** to stop. Void opens the relevant setup pages and provides fallback links in the terminal. It reuses values you have already supplied.
|
|
39
|
+
|
|
40
|
+
Saved plans contain your installation choices, including paths to any authentication configuration or custom runtime. They contain no secrets or approval to install. Declining the plan or cancelling management-token setup keeps those choices for your next attempt.
|
|
33
41
|
|
|
34
42
|
## Choose login methods
|
|
35
43
|
|
|
36
|
-
The installer offers GitHub, Google, generic OIDC, and Cloudflare Access login.
|
|
44
|
+
The installer offers GitHub, Google, generic OIDC, and Cloudflare Access login. Select all methods you want to enable; none are selected initially.
|
|
37
45
|
Cloudflare Access protection is a separate choice from Access login. The
|
|
38
46
|
GitHub OAuth steps below apply when you select GitHub login.
|
|
39
47
|
|
|
48
|
+
## Choose who can access apps
|
|
49
|
+
|
|
50
|
+
The installer asks **Who should be able to access deployed apps?**
|
|
51
|
+
|
|
52
|
+
- **Same people allowed by the platform’s Access policy** reuses your selected company identities and policies. This is recommended when platform Access protection is enabled.
|
|
53
|
+
- **Anyone — public apps** allows public visits.
|
|
54
|
+
- **Choose a different Access policy** selects separate company rules for apps. Without platform protection, this option is **Set up Cloudflare Access protection**.
|
|
55
|
+
|
|
56
|
+
The plan shows the default app access. Void finishes and verifies app access before
|
|
57
|
+
opening application traffic; new projects inherit the selected default automatically.
|
|
58
|
+
If setup stops, use the printed resume command. Existing installations retain their
|
|
59
|
+
administrator settings during upgrades.
|
|
60
|
+
|
|
61
|
+
App protection uses the account hosting your platform. If platform login or
|
|
62
|
+
protection uses another account, select equivalent identity providers and policies
|
|
63
|
+
in the hosting account when prompted. Use the app domain’s apex or a workers.dev
|
|
64
|
+
hostname for the API so it stays outside the app wildcard.
|
|
65
|
+
|
|
66
|
+
Void checks account-wide Default-Deny during setup. For public apps in an account
|
|
67
|
+
that requires Access rules, it creates rules for each app and its verified custom
|
|
68
|
+
domains. Other subdomains keep their existing access rules. It leaves account-wide
|
|
69
|
+
Default-Deny enabled and does not bypass the platform API or proxy.
|
|
70
|
+
|
|
71
|
+
App rules need **Access: Apps and Policies Edit** and **Organizations, Identity
|
|
72
|
+
Providers, and Groups Read**. Void stores this management token encrypted for future
|
|
73
|
+
apps and domain changes. The installer asks before retaining a setup-only token for
|
|
74
|
+
that purpose, or guides you to create a dedicated token. Public apps without
|
|
75
|
+
Default-Deny need no ongoing Access-management credential.
|
|
76
|
+
|
|
77
|
+
For scripts, use `--app-access public|platform|custom`. Supply
|
|
78
|
+
`VOID_PLATFORM_APP_ACCESS_TOKEN` when app rules are needed, or add an `appAccess`
|
|
79
|
+
section to your `--auth-config` file:
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"appAccess": {
|
|
84
|
+
"mode": "custom",
|
|
85
|
+
"identityProviderIds": ["hosting-account-identity-provider-id"],
|
|
86
|
+
"policyIds": ["hosting-account-company-policy-id"],
|
|
87
|
+
"tokenEnv": "APP_ACCESS_API_TOKEN"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Keep the file’s existing `connections` configuration. For `mode: "platform"`,
|
|
93
|
+
same-account identity and policy selections are reused. Headless setup requires an
|
|
94
|
+
explicit app-management token; it never silently retains an installer-only token.
|
|
95
|
+
|
|
96
|
+
## Finish login configuration
|
|
97
|
+
|
|
40
98
|
For Google, create an OAuth client and register the printed callback URL. You
|
|
41
99
|
can restrict it to named Google Workspace domains. For OIDC or Access login,
|
|
42
100
|
provide the issuer URL, client ID, and client secret. Select **Company-approved
|
|
@@ -86,6 +144,10 @@ with GitHub or another login method. With company-approved signup, a colleague
|
|
|
86
144
|
who passes the company gate can create an ordinary account using GitHub even
|
|
87
145
|
when their GitHub email differs from their company email.
|
|
88
146
|
|
|
147
|
+
Your identity provider determines how employees sign in, such as through Okta or
|
|
148
|
+
Google Workspace. Your Access policies determine who can reach the platform and
|
|
149
|
+
which MFA or device requirements apply.
|
|
150
|
+
|
|
89
151
|
Automatic setup uses an existing Zero Trust organization, selected identity
|
|
90
152
|
providers, and existing company policies. Void creates dedicated applications
|
|
91
153
|
and a scoped service token for protected installation checks. It preserves your
|
|
@@ -94,9 +156,13 @@ company policies, including device and MFA requirements.
|
|
|
94
156
|
The setup credential needs **Access: Apps and Policies Write** and
|
|
95
157
|
**Access: Organizations, Identity Providers, and Groups Read** in the identity
|
|
96
158
|
account. Creating protection also needs **Access: Service Tokens Write**.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
159
|
+
For setup in the installation account, the initial management-token link includes
|
|
160
|
+
these permissions. Void checks Access reads before provisioning and reuses that
|
|
161
|
+
management token during Access setup, so you do not need a second API token.
|
|
162
|
+
For applications in another account, provide a token scoped to that identity
|
|
163
|
+
account when asked. Scripts can supply an explicit override through
|
|
164
|
+
`VOID_PLATFORM_ACCESS_SETUP_TOKEN`. The platform's runtime token does not need
|
|
165
|
+
Access management permissions. See Cloudflare's
|
|
100
166
|
[Access API](https://developers.cloudflare.com/api/resources/zero_trust/subresources/access/subresources/applications/)
|
|
101
167
|
and [service-token permissions](https://developers.cloudflare.com/api/resources/zero_trust/subresources/access/subresources/service_tokens/methods/create/).
|
|
102
168
|
|
|
@@ -117,7 +183,9 @@ Keep the file's `connections` list from the example above, or use a connection
|
|
|
117
183
|
with `{"id":"access","kind":"cloudflare-access","label":"Company Access"}`
|
|
118
184
|
to create Access login as well. Omit `protection` for login-only setup.
|
|
119
185
|
|
|
120
|
-
To connect applications managed elsewhere, select **
|
|
186
|
+
To connect applications managed elsewhere, select **Use Access applications your company already manages**.
|
|
187
|
+
Enter the account that owns the Access applications; it can differ from the
|
|
188
|
+
account hosting Void.
|
|
121
189
|
Scripts use `mode: "existing"`, optional `accountId`, and `loginApplicationId`
|
|
122
190
|
and/or `protectionApplicationId`. For login, set `loginClientSecretEnv`. For
|
|
123
191
|
protection, supply `serviceToken` with `id`, `clientIdEnv`, and `clientSecretEnv`
|
|
@@ -148,7 +216,7 @@ The installer collects your runtime token, PostgreSQL URL, login-provider creden
|
|
|
148
216
|
|
|
149
217
|
Once installation finishes, open the printed admin dashboard link. For GitHub-only setup, sign in as the administrator selected during installation. For configurable login, use the one-time `/setup` code to confirm the administrator’s identity. Use the printed API URL to [connect and deploy an app](/guide/platform/installation/first-deployment).
|
|
150
218
|
|
|
151
|
-
|
|
219
|
+
If you supplied a management token through the shell, remove it when finished:
|
|
152
220
|
|
|
153
221
|
```sh
|
|
154
222
|
unset CLOUDFLARE_API_TOKEN
|
|
@@ -164,10 +232,12 @@ If Void created a zone, it stops in `waiting-for-dns` and prints nameservers. Se
|
|
|
164
232
|
void platform install --resume --name <installation-id>
|
|
165
233
|
```
|
|
166
234
|
|
|
167
|
-
|
|
235
|
+
Resume reuses the saved management token and asks for one if it is missing or rejected by Cloudflare. You can override it through `CLOUDFLARE_API_TOKEN`. When using a source build, also pass the same `--runtime` directory. Resume uses the saved checkpoint and original secrets; do not start a second installation or generate replacement keys. If setup stopped before a checkpoint was saved, rerun `void platform install` and select your saved plan, or rerun the original command.
|
|
168
236
|
|
|
169
237
|
You can also rerun `void platform install` and choose **Continue setup** for an unfinished installation. For non-interactive recovery, use `--resume --name <id>`. Manage completed platforms with `platform status`, `repair`, or `upgrade`.
|
|
170
238
|
|
|
239
|
+
Resume restores your selected Hyperdrive. If that selection is missing from the saved checkpoint, add `--hyperdrive <existing-id>` when resuming, using the same configuration you originally selected.
|
|
240
|
+
|
|
171
241
|
If Cloudflare rejects a saved runtime token during continued credential setup, Void opens the token page and asks for a replacement in the same run. Network or service failures do not discard saved tokens. Tokens supplied through the environment must be corrected there instead.
|
|
172
242
|
|
|
173
243
|
:::
|