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

cp .env.example .env   # fill in your credentials

Required variables:

Variable Description
IGN8_DOMAIN Base domain, e.g. example.com
IGN8_ADMIN_EMAIL Let's Encrypt contact email
IGN8_HETZNER_TOKEN Hetzner Cloud API token
IGN8_CLOUDFLARE_TOKEN Cloudflare API token
IGN8_CLOUDFLARE_ZONE_ID Cloudflare Zone ID
IGN8_STORAGEBOX_HOST e.g. u310424.your-storagebox.de
IGN8_STORAGEBOX_PASSWORD StorageBox password

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. Set shell environment

ign8vault setenv

Writes VAULT_ADDR and VAULT_TOKEN to your shell profile.

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.16.tar.gz (16.1 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.16-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ign8vault-1.0.16.tar.gz
  • Upload date:
  • Size: 16.1 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.16.tar.gz
Algorithm Hash digest
SHA256 d86b7f310fff3c787a0e7a316001fa49c2d16bce45ce166ff4c17e0461ea6488
MD5 514738f5f33c23e7988c292d7e74dffd
BLAKE2b-256 a1816fe0c97bb6cd9fbbf3e93854ca90ae5f9f37a18851c74d877ff863327fb5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ign8vault-1.0.16-py3-none-any.whl
  • Upload date:
  • Size: 18.4 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.16-py3-none-any.whl
Algorithm Hash digest
SHA256 3d0d469e6038cbebb3b09a7c9bfc8f4d5fe4e056cc3794e82a7b9072b6f72839
MD5 aa57019dc60c80e218a0021f24869ca4
BLAKE2b-256 f8eabb1e5266ac7d16764c6e8695745bd790c6b0620e03ddd011835db8c7cb4c

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