Git-driven automation for secure, self-reliant infrastructure.
Find a file
codex 5cafb648f9
All checks were successful
CI Smoke / source-contract (push) Successful in 13s
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Record the red S1 handoff after the attended Goss refresh.
The founder resolved 9a90aa9a. Both hosts now have the Goss surface.
Validation is still red, so T05 waits on decision 83263d8d.

Assistant: grok
Assistant-Session: 01a10938-ab49-7280-877a-c06f64c06ddd
2026-10-05 09:30:49 +02:00
.claude/rules docs: workplan-first agent guidance prose (CUST-WP-0055 T04 batch 3) 2026-07-08 17:15:30 +02:00
.forgejo/workflows Implement governed S1 backup recovery loop 2026-08-23 13:13:13 +02:00
.githooks Implement reproducible S1 handoff contracts 2026-08-23 12:02:23 +02:00
ansible Activate production Clock authority and verify host convergence 2026-09-15 23:13:42 +02:00
capabilities/playbooks Add playbook capability declaration for bootstrap 2026-05-22 14:49:29 +02:00
cloudinit feat(relocate): receive cloudinit and railiance-plan-host from railiance-cluster 2026-03-10 00:34:50 +01:00
contrib chore(rename): railiance-hosts → railiance-infra 2026-03-10 00:34:18 +01:00
docs Fix rotation review evidence and reconcile blocked S1 workplans 2026-09-27 18:47:55 +02:00
goss Implement reproducible S1 handoff contracts 2026-08-23 12:02:23 +02:00
history Document actual infrastructure scope and intent gaps 2026-08-23 10:45:02 +02:00
hosteurope added information on nydus dependency 2026-03-08 22:55:38 +01:00
infra/forgejo-restore-drill RAIL-HO-WP-0005-T09: Forgejo backup/restore drill assets and evidence 2026-07-04 11:26:50 +02:00
inventory Implement reproducible S1 handoff contracts 2026-08-23 12:02:23 +02:00
keys security: add admin ssh key 2025-09-14 00:39:03 +02:00
registry Draft capability entry (reuse-surface REUSE-WP-0017-T04, cohort 3) 2026-07-06 19:50:53 +02:00
reports chore: Goss verification reports 2026-03-09T164529Z 2026-03-09 16:45:29 +00:00
reviews Review attended login containment fix 2026-08-23 01:39:09 +02:00
schemas Implement reproducible S1 handoff contracts 2026-08-23 12:02:23 +02:00
scripts Fix rotation review evidence and reconcile blocked S1 workplans 2026-09-27 18:47:55 +02:00
secrets security: added encrypted hetzner api token 2025-09-13 22:23:24 +00:00
spec Prepare governed S1 offsite upload 2026-08-23 14:11:00 +02:00
state-hub-inbox Define S1 reef rollout handoff 2026-07-25 15:13:41 +02:00
terraform/hetzner Implement reproducible S1 handoff contracts 2026-08-23 12:02:23 +02:00
tests Fix rotation review evidence and reconcile blocked S1 workplans 2026-09-27 18:47:55 +02:00
tools Implement governed S1 backup recovery loop 2026-08-23 13:13:13 +02:00
workplans Record the red S1 handoff after the attended Goss refresh. 2026-10-05 09:30:49 +02:00
.custodian-brief.md chore(consistency): sync task status from DB [auto] 2026-10-05 02:51:08 +02:00
.gitignore Make S1 handoff read-only by default 2026-08-23 12:41:23 +02:00
.repo-classification.yaml Add .repo-classification.yaml (CUST-WP-0050 T11 agent first-pass) 2026-06-22 17:47:41 +02:00
.sops.yaml Implement reproducible S1 handoff contracts 2026-08-23 12:02:23 +02:00
AGENTS.md docs(agents): repoint remote State Hub URL to the in-cluster address 2026-08-25 00:21:48 +02:00
CLAUDE.md Normalize agent instructions and workplan frontmatter (STATE-WP-0067) 2026-06-22 23:16:28 +02:00
INTENT.md State that railiance-hosts is not a second substrate owner. 2026-09-24 09:56:52 +02:00
LICENSE Adopt Target Revenue Source License V1C1 (org-wide preliminary rollout) 2026-07-30 00:53:42 +02:00
Makefile Fix rotation review evidence and reconcile blocked S1 workplans 2026-09-27 18:47:55 +02:00
README.md Make S1 handoff read-only by default 2026-08-23 12:41:23 +02:00
sbom-tools.yaml chore(sbom): add system-level tool manifest for railiance-infra 2026-03-18 18:35:20 +01:00
SCOPE.md Make S1 handoff read-only by default 2026-08-23 12:41:23 +02:00
WORK-RECORDS.md chore(consistency): refresh the work-record index 2026-10-05 02:51:21 +02:00

railiance-infra

Tagline: Git-driven automation for secure, self-reliant servers.

railiance-infra is the canonical S1 ownership repo for the Railiance infrastructure substrate. It manages two adopted Host Europe servers through source-backed inventory, Ansible convergence, and recurring Goss verification. A separate Terraform and cloud-init path provisions only records explicitly declared as provider-managed Hetzner resources. Selected provider material lives in-repo encrypted with SOPS/age; host convergence does not distribute the private age key.

Future reef-* repos will model purpose-bound substrate boundaries such as reef-railiance or reef-ops-workstations, but the source-backed S1 inventory, hardening baseline, and OS convergence facts stay here.

Quickstart

  1. Clone Repo: clone the repo
  2. Prerequisites: terraform >= 1.7, ansible >= 2.16, age, sops.
  3. Secrets Management: Generate master key (age), provide it to sops and provide your SSH key.
  4. Setup Provider: Create account, select payment option, establish API token.
  5. Provisioning: Validate inventory; plan/apply only provider-managed Hetzner records. Adopted Host Europe records are never Terraform resources.
  6. Convergence: Setup security and tooling with ansible.

🚀 0. Clone Repo

First, clone this repository to your workstation:

git clone https://<your-gitea-host>/coulomb/railiance-infra.git
cd railiance-infra

📦 1. Prerequisites

To use railiance-infra, make sure you have the following tools installed on your workstation:

Example installation (Ubuntu/Debian)

# System tools
sudo apt update
sudo apt install -y git make ansible

# Terraform
sudo apt install -y wget unzip
wget https://releases.hashicorp.com/terraform/1.9.5/terraform_1.9.5_linux_amd64.zip
unzip terraform_1.9.5_linux_amd64.zip
sudo mv terraform /usr/local/bin/

# age 
sudo apt install age 

# SOPS Get the latest release (example: v3.10.2 — check GitHub for updates)
wget https://github.com/getsops/sops/releases/download/v3.10.2/sops_3.10.2_amd64.deb
sudo apt install ./sops_3.10.2_amd64.deb

🔑 2. Secrets Management

Generate Age Masterkey and establish SOPS

This project uses SOPS with age for secret encryption.
To set up your own key and configure SOPS, follow the guide here:

➡️ Managing Age Keys

SSH Access Preparations

Learn how to add your SSH key and test connectivity after provisioning:

➡️ SSH Access & Connectivity Test

TL;DR

  • put your public key into keys/admin_ssh.pub

💻 3. Setup Provider

You need register an account and set it up for API access:

  • register
  • choose payment method
  • generate api-key
  • store api-key in secrets safely

🚀 4. Provisioning

How to declare hosts and bring them up on Hetzner:

➡️ Provisioning Servers

TL;DR

  • Run make validate-inventory after editing inventory/servers.yaml.
  • Put Hetzner-only fields under provisioning on a lifecycle_mode: provider-managed record.
  • Review make tf-plan; an apply additionally requires APPROVE_TF_APPLY=YES.
  • One-shot helper: scripts/hcloud_new_server.sh --type ... --region ....

💻 5. Convergence

For adopted or newly provisioned servers, railiance-infra uses Ansible to converge hosts into a secure, baseline state.
This includes admin user setup, SSH hardening, firewall rules, essential tooling, and secret handling.

📖 See the full guide here: Convergence Documentation

Routine make verify and make s1-handoff runs are read-only on managed hosts. Updating the installed Goss surface is deliberately separate and requires an exact APPROVE_VERIFY_REFRESH value; see Server Verification.