Skip to main content

Spin up a production HashiCorp Vault + Consul stack in minutes — Hetzner Cloud, Cloudflare DNS, automated backups to Hetzner StorageBox.

Project description

ign8vault

Spin up a production HashiCorp Vault + Consul stack in minutes — Hetzner Cloud VPS, Cloudflare DNS, Let's Encrypt TLS, and daily restic backups to Hetzner StorageBox.

pipx install ign8vault
ign8vault quickstart   # full step-by-step guide

Quickstart

1. Install

pipx install ign8vault

2. Configure

ign8vault setenv

Walks you through every credential interactively with hints on where to find each value. Writes a .env file in the current directory. Run it again after provisioning to fill in VAULT_ADDR and VAULT_TOKEN.

Variable Where to get it
IGN8_DOMAIN Your base domain, e.g. example.com
IGN8_ADMIN_EMAIL Your email — used for Let's Encrypt notifications
IGN8_HETZNER_TOKEN console.hetzner.cloud → Project → Security → API Tokens
IGN8_CLOUDFLARE_TOKEN dash.cloudflare.com → Profile → API Tokens (Zone:DNS:Edit)
IGN8_CLOUDFLARE_ZONE_ID Cloudflare dashboard → select domain → Overview → right sidebar
IGN8_STORAGEBOX_HOST Hetzner StorageBox hostname — optional, skip for no backups
IGN8_STORAGEBOX_PASSWORD Hetzner account → StorageBox details

3. Provision

ign8vault up

Creates a Hetzner VPS, Cloudflare DNS records (vault.<domain> + consul.<domain>), installs Consul + Vault + nginx + TLS, and sets up daily backups. Credentials are saved to .ign8vault/vault-init.json — keep the unseal keys safe.

4. Finish configuration

ign8vault setenv

Re-run setenv to fill in VAULT_ADDR and VAULT_TOKEN from .ign8vault/vault-init.json. Existing values are preserved.

5. Create users (optional)

ign8vault adduser <username>

Creates a Vault userpass account and a scoped SSH-signing token. Use the printed token as VAULT_TOKEN for ign8vault sign.

6. Sign your SSH key

ign8vault sign

Generates an ed25519 keypair in ~/.ssh/signedssh/ and signs it via the Vault SSH CA. Re-run any time to renew (8-hour validity by default).

7. Configure a target host

ign8vault setupsshd --host <ip> --user <user> --password <pw>

Installs the Vault CA public key on the host, reloads sshd, and adds a ~/.ssh/config entry. After this, ssh <alias> works with your signed cert — no passwords, no per-host authorized_keys.

8. Connect

ssh <alias>

Tear down

ign8vault destroy

Deletes the Hetzner server and Cloudflare DNS records.


Commands

Command Description
ign8vault up Provision the full stack
ign8vault adduser <name> Create a Vault user + SSH-signing token
ign8vault sign Create/sign the SSH keypair
ign8vault setupsshd Configure a host to trust the Vault CA
ign8vault setenv Write Vault env vars to shell profile
ign8vault quickstart Print this guide in the terminal
ign8vault destroy Tear it all down

State

All local state is stored in .ign8vault/:

  • keys/ — server provisioning SSH keypair
  • vault-init.json — root token + unseal keys (chmod 600, keep safe)
  • state.json — Hetzner server ID (used by destroy)

Signed SSH keys live in ~/.ssh/signedssh/ and are separate from the provisioning state.

After a reboot

Vault requires 3 of the 5 unseal keys after every restart:

vault operator unseal   # run 3 times with different keys

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ign8vault-2.0.0.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ign8vault-2.0.0-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

Details for the file ign8vault-2.0.0.tar.gz.

File metadata

  • Download URL: ign8vault-2.0.0.tar.gz
  • Upload date:
  • Size: 18.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for ign8vault-2.0.0.tar.gz
Algorithm Hash digest
SHA256 cee0d48b01990352839fb16f8b0321610042ee6fa4c2f638f3c7c91e27f7c89a
MD5 633609df23ace29b436b4f2c100931b3
BLAKE2b-256 eefd02144e705a5f6d6f0d9c438537b2dccf5395cf976a2200060637dca87b0b

See more details on using hashes here.

File details

Details for the file ign8vault-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: ign8vault-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 20.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for ign8vault-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fb88a4c991efccf4e588a689a6cfa58db2c12f31b6da64157d927d7727ebb56f
MD5 297adf97de33b85f9d069220b2a3ab48
BLAKE2b-256 0e29773194fdb1c82887d7a87f203fa2d645bda2763528ac80a7591bc959dd88

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page