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.0.17.tar.gz (17.0 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.0.17-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ign8vault-1.0.17.tar.gz
Algorithm Hash digest
SHA256 af3e4dbdfbbfc2effd8453ce2b61d406d53c28dfdba3a72278356d6ed0c67d4d
MD5 5215326aba56f09481b0abfa525245b9
BLAKE2b-256 9b0fb8f5592e932715c101372bb74ffb8978b18bd780dcb8242f9b76240b07c5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ign8vault-1.0.17-py3-none-any.whl
  • Upload date:
  • Size: 19.3 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.0.17-py3-none-any.whl
Algorithm Hash digest
SHA256 44e71fb732a90cd674b67a793ecd64cf7f1229ee2a1f9b20d325dbeb49f5dfe2
MD5 acb8535d303ce7fef30f546dd32585d3
BLAKE2b-256 95def410ab81a850c6aea4f6af65382418abc439ce2ad73ec34852854460b139

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