Accounts and tokens
Everything you have to request, buy, or generate before the stacks run. Viking’s own list, with the
per-service key names, is Viking accounts and tokens. Secrets go only in
Run/_host/secrets/secrets.env, Run/<stack>/secrets/, or Run/nornir-net-mounts/secrets/
on the host that needs them (Host layout). Never commit them, paste them in tickets, or put
them in host.env or <stack>.run.env.
External accounts and requests
Item |
Where to get it |
What it is / scope |
Where it goes |
Needed for |
|---|---|---|---|---|
GitHub fine-grained PAT (servers) |
github.com > Settings > Developer settings > Personal access tokens > Fine-grained |
Packages: read. Contents: read on |
|
|
GitHub fine-grained PAT (dev box) |
same |
Packages: read and write ( |
dev box |
publishing images |
DNS record |
Pitt IT ticket |
Wildcard |
Pitt DNS |
every public name; |
Firewall rules |
Pitt IT ticket |
The per-host table in Firewall request |
Pitt network firewall |
public access, cross-host traffic |
Certificate, or ACME EAB credentials |
Pitt IT ticket (InCommon / Sectigo) |
Either a wildcard/SAN certificate with its key and intermediate chain, or an ACME EAB key id (KID), HMAC key, and the ACME server URL |
Certificate files: |
|
Let’s Encrypt |
nothing to request |
Only a contact email; no account, token, or payment |
|
|
Duende IdentityServer license |
duendesoftware.com (purchase or community license) |
License key file for the IdentityServer edition in use |
|
|
Pitt SMTP credentials |
Pitt IT |
Relay host, port, user, and password for outgoing mail |
|
Identity email (password reset, confirmations) |
SQL Server logins |
SQL Server DBA (or Pitt IT) |
One login per service with rights on its databases only |
|
|
NAS share account |
lab storage administrator |
SMB user that can read (and write, for builds) the volume shares |
|
|
Cursor API key (optional) |
cursor.com > settings |
Key for the self-hosted agent worker |
|
|
Slack bot token (optional) |
api.slack.com > Your apps > OAuth & Permissions |
Bot token ( |
the consuming stack’s |
optional notifications |
|
GitHub PAT with write access to |
GitHub Actions repository secret on |
repo Settings > Secrets and variables > Actions |
publishing these docs (Publishing the documentation) |
YubiKey code-signing certificate |
unchanged from the existing release process |
Hardware-held code-signing certificate |
the YubiKey; never on a server |
signing Viking client releases |
Generated secrets
These are random values you create, not accounts. stack.ps1 secrets new <stack> [KEY ...]
writes a 32-byte URL-safe random value for the stack’s registry-listed *_SECRET, *_TOKEN
and *_PASSWORD keys, for any key still holding a REPLACE_WITH_GENERATED... placeholder,
and for any key you name. It replaces the placeholder where it is (secrets/secrets.env, else
<stack>.run.env) or appends to secrets/secrets.env. Keys that already have a value are
kept, so it is safe to re-run; stack.ps1 doctor treats REPLACE_ME / REPLACE_WITH_...
values as empty. *_PASSWORD values get an Aa1! prefix to satisfy SQL Server complexity
rules. SQL_SERVER_PASSWORD and connection strings are never generated (they belong to existing
SQL logins). Empty optional client secrets are left alone, because empty means that client is
disabled: name the ones you want, for example
stack.ps1 secrets new viking-identity CORRECTION_SERVICE_CLIENT_SECRET.
Key |
Generate in |
Also copy to |
|---|---|---|
|
|
the clients that use them (Viking accounts and tokens) |
|
|
|
|
|
the gallery’s env in the Sam2Trainer repository (not a |
|
|
SBFSEM-tools configuration |
|
|
your browser ( |
|
|
people given the demo page |
|
|
nothing; production uses the external SQL Server |
Rotate a value by deleting its line and re-running secrets new, then update every consumer
and stack.ps1 <stack> restart each one.