server-ovh-prod-01-main/docs/services-inventory.md

6.6 KiB

Services Inventory

Production server: 15.204.247.153

Migration complete. The source DigitalOcean VPS (hyperthrive-docker-services, 161.35.12.75) was deleted on 2026-06-24. Services originating from that VPS now run solely on this OVH host with no DigitalOcean fallback. ("Deployed: Previous" entries were migrated from the old VPS in earlier sessions.)

Exception — remetrics: remetrics and strapi-remetrics were migrated on 2026-06-24 from a separate DigitalOcean web droplet (147.182.131.217). That droplet is currently frozen and kept as a short-term rollback (NOT deleted) pending decommission — it is the only remaining DigitalOcean fallback.

Active Services

n8n (Hyperthrive Production)

  • Status: Running
  • Domain: n8n.hyperthrive.io
  • Port: 5678 (internal), exposed via Traefik HTTPS
  • Docker Network: traefik, internal
  • Container Image: docker.n8n.io/n8nio/n8n:1.71.3
  • Database: PostgreSQL 16 (local service_postgres)
  • Storage: Named volume n8n_storage
  • Key Environment Variables:
    • N8N_HOST=n8n.hyperthrive.io
    • N8N_PROTOCOL=https
    • EXECUTIONS_DATA_MAX_AGE=72
    • NODE_ENV=production
  • Special Features:
    • Community packages enabled
    • Webhook support via HTTPS
    • MCP route support with no-buffer middleware
    • Health check enabled
  • Traefik Config:
    • Main route: Host(n8n.hyperthrive.io) && !PathPrefix(/mcp)
    • MCP route: Host(n8n.hyperthrive.io) && PathPrefix(/mcp) with custom buffering headers
  • Deployed: 2026-05-14

n8n-test (Hyperthrive Testing)

  • Status: Running
  • Domain: testn8n.hyperthrive.io
  • Port: 5678 (internal), exposed via Traefik HTTPS
  • Docker Network: test_n8n_internal, traefik
  • Container Image: docker.n8n.io/n8nio/n8n:latest
  • Database: PostgreSQL 16 (local service_postgres)
  • Storage: Named volume test_n8n_storage
  • Key Environment Variables:
    • N8N_HOST=testn8n.hyperthrive.io
    • N8N_PROTOCOL=https
    • EXECUTIONS_DATA_MAX_AGE=72
    • NODE_ENV=production
  • Purpose: Testing and staging environment for n8n workflows
  • Traefik Config:
    • Route: Host(testn8n.hyperthrive.io)
  • Deployed: 2026-05-14

n8n-swanson (Personal n8n Instance)

  • Status: Running
  • Port: 5678
  • Container Image: n8nio/n8n:latest
  • Purpose: Personal/Jared's n8n instance
  • Deployed: Previous

Vaultwarden

  • Status: Running
  • Purpose: Password manager and vault
  • Deployed: Previous

Invoice Ninja

  • Status: Running
  • Purpose: Invoicing and billing system
  • Deployed: Previous

NocoDB

  • Status: Running
  • Purpose: No-code database platform
  • Deployed: Previous

LandHomeTeam

  • Status: Running
  • Purpose: Business-specific application
  • Deployed: Previous

BestSolarTech

  • Status: Running
  • Purpose: Business-specific application
  • Deployed: Previous

Forgejo

  • Status: Running
  • Purpose: Git repository platform
  • Deployed: Previous

Traefik

  • Status: Running
  • Purpose: Reverse proxy, SSL termination, routing
  • Version: v3.0+
  • Deployed: Previous

Watchtower

  • Status: Running
  • Purpose: Automated container updates
  • Deployed: Previous

remetrics (Rails Application)

  • Status: Running
  • Domain: remetrics.io, www.remetrics.io
  • Port: 3000 (internal), exposed via Traefik HTTPS
  • Docker Network: traefik, internal
  • Service Directory: ~/services/remetrics/
  • Containers:
    • remetrics-remetrics-1 — Rails web, image remetrics-web:staging-baked
    • remetrics-worker-1 — Sidekiq worker, image remetrics-worker:staging-baked
    • remetrics-db-1 — PostgreSQL (db remetrics_production, user estatioro)
    • redis (job queue / cache)
  • Database: PostgreSQL — remetrics_production (480 users migrated, zero data loss)
  • Traefik Config:
    • Routers for remetrics.io / www.remetrics.io use certresolver=cloudflare (ACME DNS-01)
  • Notes:
    • Web and worker images are baked to be GitHub-independent at boot (no bundle install / no git fetch at startup).
    • The Rails app fetches CMS content from a HARDCODED URL https://cms.remetrics.io (in app source strapi/article.rb and help_page.rb) — NOT env-configurable.
    • Sitemap refresh cron on OVH: ~/services/remetrics/sitemap_refresh.sh at 01:00 (replaces a broken DO cron that referenced a non-existent container).
  • Migration: From DigitalOcean web droplet 147.182.131.217 (frozen rollback, not deleted)
  • Deployed: 2026-06-24 (migrated from DigitalOcean)

strapi-remetrics (Strapi CMS)

  • Status: Running
  • Domain: cms.remetrics.io
  • Port: 1337 (internal), exposed via Traefik HTTPS
  • Docker Network: traefik
  • Service Directory: ~/services/strapi-remetrics/
  • Container: strapi-remetrics
  • Database: SQLite (local)
  • Storage: Media stored on GCS bucket remetrics-strapi
  • Traefik Config:
    • Router for cms.remetrics.io uses certresolver=cloudflare (ACME DNS-01)
  • Notes:
    • This is the CMS that the Rails remetrics app reads from via the hardcoded https://cms.remetrics.io URL.
    • strapi.remetrics.io (a legacy hostname) remains on the old DO box and is dead/unused — NOT served from OVH.
  • Migration: From DigitalOcean web droplet 147.182.131.217 (frozen rollback, not deleted)
  • Deployed: 2026-06-24 (migrated from DigitalOcean)

Automation & Utilities

backup.sh

  • Location: ~/services/backup.sh
  • Purpose: Automated backup of all service data (auto-discovers all services)
  • Schedule: Nightly at 02:00 EST (07:00 UTC)
  • See Disaster Recovery for restore procedures

container-health-monitor.sh

  • Location: ~/services/container-health-monitor.sh
  • Purpose: Health monitor for BestSolarTech containers only (misleading name — not server-wide)
  • Schedule: Every 10 minutes
  • See Health Monitoring for coverage details and gaps

daily-maintenance.sh

  • Location: ~/services/daily-maintenance.sh
  • Purpose: Daily maintenance for BestSolarTech only (misleading name — not server-wide)
  • Schedule: Daily at 04:30 EST (moved from 03:00 on 2026-06-25 to de-collide from Watchtower)

Known Gaps

mailpace.env — UNDOCUMENTED

  • Location: ~/services/mailpace.env (in the ~/services/ root)
  • An environment file for MailPace transactional email exists but no container is documented as using it.
  • TODO: Identify which service(s) consume this env file and add them to the inventory. MailPace may be referenced by an existing service's compose file via a path like env_file: ../mailpace.env.