Go to file
Jared Swanson e7e6c47354 Document Invoice Ninja incidents and troubleshooting (2026-05-15)
Added troubleshooting procedures for three recent issues: client portal
500 errors from uninitialized pdf_variables, MariaDB healthcheck
failures from password desync, and duplicate Stripe gateways. Included
root causes, detailed fixes, and notes on the upstream pdf_variables
bug in Invoice Ninja 5.13.22.
2026-05-15 16:20:42 -04:00
configs Initial commit: Add server infrastructure, service configs, and documentation 2026-05-15 10:26:32 -04:00
docs Document Invoice Ninja incidents and troubleshooting (2026-05-15) 2026-05-15 16:20:42 -04:00
migrations Initial commit: Add server infrastructure, service configs, and documentation 2026-05-15 10:26:32 -04:00
scripts Initial commit: Add server infrastructure, service configs, and documentation 2026-05-15 10:26:32 -04:00
.gitignore Initial commit: Add server infrastructure, service configs, and documentation 2026-05-15 10:26:32 -04:00
CLAUDE.md Initial commit: Add server infrastructure, service configs, and documentation 2026-05-15 10:26:32 -04:00
README.md Initial commit: Add server infrastructure, service configs, and documentation 2026-05-15 10:26:32 -04:00
profile.yaml Initial commit: Add server infrastructure, service configs, and documentation 2026-05-15 10:26:32 -04:00

README.md

systems-prod-01 - OVHcloud VPS

Provider: OVHcloud VPS-3 (8 vCores, 24GB RAM, 200GB SSD) Location: Virginia, US East IP: 15.204.247.153

Quick Access

# Server access
ssh jared@15.204.247.153

# Traefik Dashboard
# URL: https://traefik.hyperthrive.app
# Login: admin / dH1CtZuVLBUMig7P

# Docker status
ssh jared@15.204.247.153 "docker ps"
ssh jared@15.204.247.153 "docker stats --no-stream"

# System health
ssh jared@15.204.247.153 "syshealth"
ssh jared@15.204.247.153 "logsummary"

Live Services

BestSolarTech.com - WordPress site migrated from DigitalOcean Traefik - Reverse proxy with automatic SSL Monitoring - Automated health checks & maintenance (see CLAUDE.md)

Status

Infrastructure Ready - Docker, Traefik, monitoring configured Automated Recovery - Health monitor runs every 10 min, daily maintenance at 3 AM 🔄 Migration In Progress - Migrating services from DigitalOcean

See migrations/migration-plan.md for detailed progress.

Project Structure

systems-prod-01/
├── README.md                          # This file
├── CLAUDE.md                          # AI assistant context
├── profile.yaml                       # Server specifications
├── credentials.md                     # Service credentials
├── configs/                           # Configuration templates
│   ├── service-template.yml           # Docker service template
│   ├── wordpress-docker-migration-guide.md  # WordPress migration lessons
│   └── traefik configs                # Reverse proxy setup
└── migrations/                        # Migration documentation
    ├── migration-plan.md              # Overall strategy & progress
    └── completed/                     # Finished migrations
        └── bestsolartech.md           # BestSolarTech details

Service Management

Deploy New Service

# Create service directory
ssh jared@15.204.247.153 "mkdir -p ~/services/SERVICE_NAME"

# Deploy with Docker Compose
scp docker-compose.yml jared@15.204.247.153:~/services/SERVICE_NAME/
ssh jared@15.204.247.153 "cd ~/services/SERVICE_NAME && docker compose up -d"

WordPress Quick Commands

# Update WordPress database URLs
ssh jared@15.204.247.153 "docker exec CONTAINER_DB mysql -u USER -pPASS -e \"
USE DATABASE;
UPDATE wp_options SET option_value = 'https://domain.com' WHERE option_name IN ('siteurl', 'home');
\""

# View container logs
ssh jared@15.204.247.153 "docker logs CONTAINER_NAME --tail 50"

Key Learnings

  • Use MariaDB 10.11 for WordPress migrations
  • Disable Real Simple SSL plugin when using Traefik
  • Escape $$ in Docker Compose environment variables
  • Use || operator for multiple Traefik host rules

For detailed guidance, see configs/wordpress-docker-migration-guide.md