Skip to main content

Repository Structure

vps-apps/
├── .github/
│ └── workflows/ # CI/CD workflows (Deploy, Provision, Backup, etc.)
├── ansible/ # Ansible playbooks and encrypted secrets
│ ├── playbook.yml # Main provisioning & deploy playbook
│ └── secrets.yml # Encrypted secret store (Ansible Vault)
├── scripts/ # Automation scripts
│ ├── configure-authentik.sh # Provision Authentik providers/apps
│ ├── configure-guacamole.sh # Setup Guacamole connections
│ ├── configure-kuma.sh # Setup Uptime Kuma monitors
│ ├── configure-listmonk.sh # Setup mailing lists
│ ├── configure-minio.sh # Setup S3 buckets
│ ├── configure-postgres.sh # Setup DB users/schemas
│ ├── sync-vault.py # Sync VPS .env back to Ansible Vault
│ └── vault-set.sh # Sync local .env to Ansible Vault
├── traefik/ # Reverse proxy (Core)
├── authentik/ # Identity provider & SSO (Core)
├── postgres/ # Shared PostgreSQL database (Core)
├── homepage/ # Public landing page
├── agent/ # OpenClaw AI agent gateway
├── kuma/ # Uptime Kuma monitoring
├── listmonk/ # Newsletter & mailing list
├── minio/ # S3 compatible storage
├── monitoring/ # Prometheus + Grafana
├── n8n/ # Workflow automation
├── portainer/ # Docker management
├── devex/ # DevEx platform (FastAPI + React)
├── learnmlops/ # MLOps learning platform
├── learniac/ # Web dev learning platform
├── learnk8s/ # Kubernetes learning platform
├── pythondsa/ # Python DSA course
├── systemdesign/ # System Design course
├── roadmap/ # Static roadmap page
├── docs/ # Documentation site (this site)
├── statuspage/ # Public status page sync
├── terraform/ # Cloudflare DNS management
└── GEMINI.md # Gemini CLI instructions

Conventions

  • Isolation: Each app lives in its own directory with docker-compose.yml and .env.example.
  • Security: .env files and data/ directories are gitignored.
  • Networking: All apps connect to the external Docker network traefik-net.
  • DNS: Standard pattern is <appname>.ops4life.com.
  • Secrets: Managed via ansible/secrets.yml (AES256 encrypted).