Infrastructure as Code of asxp.io https://asxp.io
  • Python 44.6%
  • Jinja 29.1%
  • HCL 26.3%
Find a file
Sergei Poljanski 27ccdc4255 ansible: describe what runs on the servers
The roles had drifted far from production: Forgejo was pinned at 12
while 15.0.11 runs, its config lacked the mailer, packages and the real
database path, and several services existed only on the hosts. Running
a role would have rolled production back. Take the servers as the truth
and make the repository match them.

site.yaml now holds the desired state of both hosts:

 - base: unattended upgrades, fail2ban, Docker daemon config and the
   weekly image prune, as found on the hosts. New: a 500M journal cap,
   and the Docker systemd override is kept absent. That override once
   opened dockerd on tcp/2375 without authentication.
 - traefik: templates as deployed, version in a variable (v3.7.18).
   The Coraza WAF files are removed; no router ever used them.
 - forgejo: 15.0.11, app.ini generated from the live file with the
   secrets taken from the vault.
 - crawler_alert, sillytavern, minecraft, minecraft_fossils: added
   from the hosts.

Forgejo's canonical name becomes git.asxp.io; git.czsk.it stays as an
alias on the same router.

docker_service restarts a stack when its config changes, no longer
forces ownership on existing data directories, and hides template
diffs because they carry secrets. Containers listed in
service_graceful_stop are saved and stopped with a long timeout before
compose recreates them: Docker's 10 s default is too short for a
Minecraft world. Both game servers get stop_grace_period for the same
reason.

Removed: the full-deployment and runner playbooks with their prompts,
the Forgejo backup and restore roles for the old bare-metal host, and
inventory entries for services that were never deployed. SSH hardening
stays a manual playbook, since a mistake there locks everyone out.

New secrets (SMTP, RCON, CurseForge key) went into the vault.

Assisted-by: Claude:fable-5-2
2026-11-12 06:47:08 +04:00
ansible ansible: describe what runs on the servers 2026-11-12 06:47:08 +04:00
terraform terraform: never replace a running server 2026-11-12 06:47:08 +04:00
.gitignore add wg: sanya 2026-04-05 19:17:18 +03:00
README.md todo 2025-11-13 23:36:13 +02:00

asxp.io Infrastructure

Infrastructure as Code for asxp.io servers managed via Terraform, Ansible, and Forgejo CI/CD.

Servers

Server Type vCPU RAM Services
asxpio-ops CX22 2 4GB traefik, forgejo, grafana, prometheus, loki, static_sites
asxpio-services CX43 8 16GB forgejo_runner, immich, minecraft, valheim, factorio, prosody, coturn

Directory Structure

  • terraform/ - Cloud infrastructure provisioning (Hetzner Cloud)
  • ansible/ - Server bootstrap and configuration management
  • services/ - Docker Compose files for container orchestration
  • .forgejo/workflows/ - CI/CD pipeline automation (planned)

Migration TODO

Phase 0: Preparation

  • Terraform infrastructure code
  • Ansible inventory and playbooks
  • Create S3 buckets (hel1-primary, fsn1-secondary)
  • Provision servers via Terraform
  • Backup all services from bare metal

Phase 1: Core Infrastructure

  • Deploy WireGuard VPN on ops-server
  • Deploy Traefik reverse proxy
  • Deploy monitoring stack (Grafana, Prometheus, Loki)

Phase 2: Git & CI/CD

  • Migrate Forgejo from bare metal
  • Deploy Forgejo Runner on services-server

Phase 3: Media & Storage

  • Upload Immich photos to S3 (135GB)
  • Migrate Immich to services-server
  • [/] Configure S3 geo-replication (hel1 → fsn1) (Turn on service)

Phase 4: Gaming Services

  • Migrate Minecraft (20GB local + 80GB S3 backups)
  • Migrate Valheim (9.5GB)
  • Migrate Factorio (31MB)

Phase 5: Communication

  • Migrate Prosody XMPP
  • Migrate Turnserver

Phase 6: Final Services

  • Migrate static sites (asxp.io, czsk.it)
  • Configure automated backups to S3
  • DNS cutover and validation
  • Decommission bare metal (after 30 days)

Later

  • Setup Terraform to manage DNS