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 keypairvault-init.json— root token + unseal keys (chmod 600, keep safe)state.json— Hetzner server ID (used bydestroy)
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d86b7f310fff3c787a0e7a316001fa49c2d16bce45ce166ff4c17e0461ea6488
|
|
| MD5 |
514738f5f33c23e7988c292d7e74dffd
|
|
| BLAKE2b-256 |
a1816fe0c97bb6cd9fbbf3e93854ca90ae5f9f37a18851c74d877ff863327fb5
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d0d469e6038cbebb3b09a7c9bfc8f4d5fe4e056cc3794e82a7b9072b6f72839
|
|
| MD5 |
aa57019dc60c80e218a0021f24869ca4
|
|
| BLAKE2b-256 |
f8eabb1e5266ac7d16764c6e8695745bd790c6b0620e03ddd011835db8c7cb4c
|