Add `core prod` command with full production infrastructure tooling: - `core prod status` — parallel SSH health checks across all hosts, Galera cluster state, Redis sentinel, Docker, LB health - `core prod setup` — Phase 1 foundation: Hetzner topology discovery, managed LB creation, CloudNS DNS record management - `core prod dns` — CloudNS record CRUD with idempotent EnsureRecord - `core prod lb` — Hetzner Cloud LB status and creation - `core prod ssh <host>` — SSH into hosts defined in infra.yaml New packages: - pkg/infra: config parsing, Hetzner Cloud/Robot API, CloudNS DNS API - infra.yaml: declarative production topology (hosts, LB, DNS, SSL, Galera, Redis, containers, S3, CDN, CI/CD, monitoring, backups) Docker: - Dockerfile.app (PHP 8.3-FPM, multi-stage) - Dockerfile.web (Nginx + security headers) - docker-compose.prod.yml (app, web, horizon, scheduler, mcp, redis, galera) Ansible playbooks (runnable via `core deploy ansible`): - galera-deploy.yml, redis-deploy.yml, galera-backup.yml - inventory.yml with all production hosts CI/CD: - .forgejo/workflows/deploy.yml for Forgejo Actions pipeline Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
36 lines
885 B
YAML
36 lines
885 B
YAML
# Ansible inventory for Host UK production
|
|
# Used by: core deploy ansible <playbook> -i playbooks/inventory.yml
|
|
all:
|
|
vars:
|
|
ansible_user: root
|
|
ansible_ssh_private_key_file: ~/.ssh/hostuk
|
|
|
|
children:
|
|
bastion:
|
|
hosts:
|
|
noc:
|
|
ansible_host: 77.42.42.205
|
|
private_ip: 10.0.0.4
|
|
|
|
app_servers:
|
|
hosts:
|
|
de:
|
|
ansible_host: 116.202.82.115
|
|
galera_node_name: de
|
|
galera_node_address: 116.202.82.115
|
|
de2:
|
|
ansible_host: 88.99.195.41
|
|
galera_node_name: de2
|
|
galera_node_address: 88.99.195.41
|
|
vars:
|
|
galera_cluster_name: hostuk-galera
|
|
galera_sst_method: mariabackup
|
|
db_name: hostuk
|
|
db_user: hostuk
|
|
redis_maxmemory: 512mb
|
|
|
|
builders:
|
|
hosts:
|
|
build:
|
|
ansible_host: 46.224.93.62
|
|
private_ip: 10.0.0.5
|