A curated collection of self-hosted applications using Docker, Docker Compose, and Cloudflare DNS/Reverse Proxy.
Traffic flow to home server applications:
Internet
│
▼
Cloudflare DNS + WAF (Orange Cloud Proxy)
│ (HTTPS - Full Strict)
▼
Public IP (Dynamic DNS updated via apps/ddns)
│
▼
Router (Ports 80 / 443)
│
▼
apps/reverse-proxy (Nginx with Let's Encrypt SSL)
│
▼
Local Docker Applications (apps/*)
- Infrastructure as Code: Root /terraform manages Cloudflare DNS wildcard records (
*.cloudville.me,*.rishabmanocha.com), SSL settings (Full Strict), and WAF rules. - Dynamic DNS: apps/ddns runs
ddclientto refresh Cloudflare DNS A-records with the server's public IP. - Reverse Proxy & SSL: apps/reverse-proxy routes incoming traffic to internal application ports and handles SSL termination.
-
- SonarQube - Code quality platform
- Nexus - Repository manager
- Docker Registry - Private Docker registry
- Jupyter - Interactive computing environment
-
- pgAdmin - PostgreSQL management
- Ansible
- Docker Engine on target host
- SSH access to target host
- Terraform (for Cloudflare DNS/WAF management)
-
Clone the repository:
git clone https://github.com/your-username/anton-apps.git cd anton-apps -
Configure Ansible:
- Edit
ansible/inventories/<TARGET_NAME>.inito match your target hosts. - Install required Ansible collections:
ansible-galaxy collection install -r ansible/requirements.yml
- Edit
-
Deploy applications:
- To deploy all applications:
make deploy
- To deploy specific applications:
make deploy APPS=nextcloud,plex
- To deploy all applications:
Cloudflare DNS proxy, wildcard records, and security rules are configured in /terraform:
cd terraform
cp terraform.tfvars.example terraform.tfvars
# Edit terraform.tfvars with Cloudflare API Token, Zone IDs, and Public IP
terraform init
terraform applyThe repository includes a Makefile to simplify common operations:
make deploy- Deploy all applications (creates directories, uploads files, manages .env, restarts)make deploy APPS=name- Deploy specific applicationsmake dry-run- Preview changes without applying (check mode with diff)make stop APPS=name- Stop specific applicationsmake start APPS=name- Start specific applicationsmake restart APPS=name- Restart specific applicationsmake ping- Test connectivity to hostsmake check-nvidia- Check NVIDIA GPU status on hosts
All targets support LIMIT=hostname to target specific hosts.
Contributions to this collection are welcome! Here's how you can contribute:
-
Create a new directory for your application under
apps/:mkdir -p apps/new-app-name
-
Create the necessary files:
docker-compose.yml- Container configurationtemplate.env- Environment variable templateREADME.md- Documentation for your application
-
Test your application:
cd apps/new-app-name cp template.env .env # Edit .env with appropriate values docker compose up -d
-
Follow the .agents/skills/add-new-app/SKILL.md workflow to register the application in Ansible and
apps/reverse-proxy. -
Submit a pull request with your changes.
- Make your changes to the application in
apps/<app-name> - Test thoroughly
- Submit a pull request with your changes
This collection is licensed under the MIT License - see the LICENSE file for details.
This collection builds upon the work of many open source projects and Docker image maintainers. See individual application directories for specific acknowledgements and references.