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-1.1.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-1.1.0-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ign8vault-1.1.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-1.1.0.tar.gz
Algorithm Hash digest
SHA256 e8ee86743e0e76c7a7ef244510ebbd2d2e06929b7d8ad8d31282e151a1bbafdd
MD5 2e83596953ccb29a50e112167d31ad20
BLAKE2b-256 c518aea1375575db32b1427b367a1bac467ce72466d762f0ab3b52ab26730d3d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ign8vault-1.1.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-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bd1881e2486cc0d2ae1f21059ad14c7a45b100f63779d774ec1e571625f15bcb
MD5 bb39433f1917ea3422ce29cb369562b4
BLAKE2b-256 a1d201bb49101ae8b1ba8dd75ce16be9d25efe9b2a9df0ab3ac178f2e34cebd2

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