A comprehensive containerized shared infrastructure platform providing databases, monitoring, networking, and deployment tools for microservices development. Features include local DNS management, HTTPS certificates, tunnel management, and webhook automation.
- π Service Discovery (Consul) - Industry-standard service registration and discovery
- π Local DNS Server (dnsmasq) with wildcard
*.dev.localsupport - π HTTPS Certificates (mkcert) for all services with browser trust
- π Cloudflare Tunnel integration for secure external access
- π Webhook Management with automatic URL updates for GitHub/Atlassian
- π Comprehensive Monitoring with Prometheus, Grafana, and Loki
- π§ Development Orchestrator with port allocation and clean URLs
FuzeInfra runs two ways β pick one:
- Clone repository:
git clone --recursive https://github.com/izzywdev/FuzeInfra.git - Set up environment:
python scripts-tools/setup_environment.py - Generate certificates:
./tools/cert-manager/setup-local-certs.sh - Start infrastructure:
./infra-up.bat(Windows) or./infra-up.sh(Linux/Mac)
Note: Use
--recursiveto automatically clone the envmanager submodule. If already cloned, rungit submodule update --init --recursive.
Mirrors the EKS/Contabo prod deployment locally. Prereqs: docker, kind, kubectl, helm.
make kind-up # cluster + ingress + cert-manager + full chart
make kind-validate # prove every enabled service is Ready + reachable
make kind-test # functional smoke (pytest via port-forward)
make kind-down # tear downWindows (no make): .\k8s\kind\setup-kind.ps1. Deploy a subset with
make kind-profile PROFILE=minimal. Full guide:
docs/LOCAL_KUBERNETES.md.
FuzeInfra/
βββ docs/
β βββ templates/ # Project templates for applications
β βββ PROJECT_TEMPLATES.md # How to use templates
βββ scripts-tools/ # Infrastructure management tools
βββ monitoring/ # Monitoring configurations
βββ monitoring-shared/ # Shared monitoring configs
βββ envmanager/ # Environment management submodule (git submodule)
βββ docker-compose.FuzeInfra.yml # Main infrastructure services
βββ environment.template # Environment variables template
βββ README.md
# Run the interactive environment setup script
python scripts-tools/setup_environment.pyThe setup script will:
- Create a
.envfile from the template - Generate secure passwords for all services
- Allow customization of project settings
- Provide security reminders
# Copy the template and edit manually
cp environment.template .env
# Edit .env with your preferred settingsCOMPOSE_PROJECT_NAME: Project name (default: fuzeinfra)NETWORK_NAME: Docker network name (default: FuzeInfra)- Database credentials and ports
- Monitoring service credentials
- Security keys and tokens
See environment.template for all available options.
- PostgreSQL:
localhost:5432- Primary relational database - MongoDB:
localhost:27017- Document database - Redis:
localhost:6379- In-memory cache/store - Neo4j:
localhost:7474- Graph database - ChromaDB:
localhost:8003- Vector database for AI/ML applications
- Consul:
http://localhost:8500- Service registry with health checking and Web UI - Consul DNS:
localhost:8600- DNS interface for service queries
- Grafana:
http://localhost:3001- Dashboards and visualization - Prometheus:
http://localhost:9090- Metrics collection - Loki: Log aggregation
- Promtail: Log shipping
- Kafka:
localhost:9092- Event streaming - RabbitMQ:
localhost:5672- Message broker
- Airflow:
localhost:8082- Workflow orchestration and scheduling
- Consul UI: http://localhost:8500 | https://consul.dev.local (Service discovery and configuration)
- Airflow UI: http://localhost:8082 | https://airflow.dev.local (admin/[generated])
- Flower (Celery Monitor): http://localhost:5555
- Grafana: http://localhost:3001 | https://grafana.dev.local (admin/[generated])
- Prometheus: http://localhost:9090 | https://prometheus.dev.local
- MongoDB Express: http://localhost:8081 | https://mongo-express.dev.local (admin/[generated])
- Kafka UI: http://localhost:8080
- Neo4j Browser: http://localhost:7474 (neo4j/[generated])
- ChromaDB API: http://localhost:8003 (REST API for vector operations)
- DNS Management: http://localhost:8053 | https://dnsmasq.dev.local
- RabbitMQ Management: http://localhost:15672 | https://rabbitmq.dev.local
- π Service Discovery: Register and discover services dynamically with Consul
- π DNS Server: Automatic
*.dev.localdomain resolution - π HTTPS Support: Trusted certificates for all services
- π Tunnel Access: External webhook endpoints via Cloudflare
- π Enhanced Monitoring: Complete observability stack
# Start shared infrastructure first
./infra-up.sh # or infra-up.bat on WindowsCopy and customize project templates for your applications:
# Copy project startup scripts
cp docs/templates/project-up.sh.template ./your-project/project-up.sh
cp docs/templates/project-down.sh.template ./your-project/project-down.sh
# Customize for your project
# Edit PROJECT_NAME, ports, etc.Your application's docker-compose.yml should use the external network:
version: '3.8'
networks:
FuzeInfra:
external: true
services:
your-app:
build: .
networks:
- FuzeInfra
environment:
- POSTGRES_HOST=postgres
- REDIS_HOST=redis
- MONGODB_HOST=mongodb
- CHROMADB_HOST=chromadbRegister your service for discovery by other applications:
# Register your service with health checks
python tools/service-discovery/service-discovery.py register myproject \
--port 3000 \
--health-check /health \
--tags api,web \
--meta version=1.0.0
# Verify registration
python tools/service-discovery/service-discovery.py listDiscover other services dynamically (no hardcoded URLs):
// Node.js example - fuzereach discovering fuzeagent
const FuzeInfraServiceDiscovery = require('../FuzeInfra/tools/service-discovery/client-examples/nodejs-example.js');
const serviceDiscovery = new FuzeInfraServiceDiscovery();
// Dynamic service discovery
const fuzeagentUrl = await serviceDiscovery.getServiceUrl('fuzeagent');
const response = await fetch(`${fuzeagentUrl}/api/process`, { ... });# Python example - FastAPI service discovery
from consul_helper import ConsulHelper
service_discovery = ConsulHelper()
# Discover service dynamically
fuzeagent_url = service_discovery.get_service_url('fuzeagent')
response = requests.post(f"{fuzeagent_url}/api/process", json=data)Benefits:
- β No hardcoded service URLs
- π₯ Automatic health checking
- βοΈ Load balancing across instances
- π Works in Docker, local dev, and production
See tools/service-discovery/README.md for complete integration guide.
See docs/PROJECT_TEMPLATES.md and docs/PROJECT_INTEGRATION_GUIDE.md for detailed instructions.
./infra-up.sh/./infra-up.bat- Start infrastructure./infra-down.sh- Stop infrastructure
scripts-tools/env_manager.py- Manage environment variablesscripts-tools/setup_environment.py- Initial environment setupenvmanager/- Advanced environment management submodule (cross-platform)
scripts-tools/version_manager.py- Semantic versioningscripts-tools/ci_cd_manager.py- CI/CD utilities
tools/service-discovery/service-discovery.py- Service registration and discoverytools/service-discovery/consul-helper.py- Consul wrapper for programmatic access- Client libraries:
tools/service-discovery/client-examples/- Node.js and Python integration
tools/dns-manager/dns-manager.py- Local DNS managementtools/tunnel-manager/tunnel-manager.py- Webhook tunnel managementtools/cert-manager/setup-local-certs.sh- HTTPS certificate generation
docker/app/health_check.py- Infrastructure health checkstools/tunnel-manager/webhook_sync.py- Webhook monitoring and sync
- Never commit the
.envfile - it contains sensitive credentials - Change default passwords before production use
- Use the setup script to generate secure passwords
- Consider using secrets management in production environments
- The
.envfile is automatically added to.gitignore
This repository contains only generic infrastructure services that can be shared across multiple applications:
- Database services
- Monitoring and logging
- Message queues
- Caching layers
- Application-specific code belongs in separate repositories
- Each application connects to shared infrastructure via the
FuzeInfranetwork - Use project templates to maintain consistency
All services communicate through the FuzeInfra Docker network, enabling:
- Service discovery by name (e.g.,
postgres,redis) - Isolation from other Docker networks
- Easy scaling and management
The platform includes comprehensive monitoring:
- System metrics: CPU, memory, disk usage
- Service health: Database connectivity, message queue status
- Application metrics: Custom metrics via Prometheus
- Logs: Centralized logging via Loki/Promtail
- Dashboards: Pre-built Grafana dashboards
The repository includes a comprehensive test suite to verify all services are running correctly:
# Run complete test suite (recommended)
python scripts-tools/run_tests.py# Install test dependencies
pip install -r tests/requirements.txt
# Create network and start services
docker network create FuzeInfra
docker-compose -f docker-compose.FuzeInfra.yml up -d
# Run tests
pytest tests/ -v
# Cleanup
docker-compose -f docker-compose.FuzeInfra.yml down -v- Database services: PostgreSQL, MongoDB, Redis, Neo4j, Elasticsearch
- Messaging services: Kafka, RabbitMQ
- Monitoring stack: Prometheus, Grafana, Alertmanager, Loki
- Workflow orchestration: Airflow, Flower
- Web interfaces: Mongo Express, Kafka UI, RabbitMQ Management
- Tests run automatically on push to
mainbranch - Docker images are cached in GitHub Container Registry
- Full infrastructure validation in CI/CD pipeline
See tests/README.md for detailed testing documentation.
Current version: Check version.json
Use the version manager for releases:
cd scripts-tools
python version_manager.py current
python version_manager.py bump patch # or minor, major- Keep infrastructure generic - no application-specific code
- Update templates when adding new infrastructure services
- Maintain backward compatibility
- Update documentation for new features
- Test with multiple projects to ensure generality
This project is licensed under the MIT License - see the LICENSE file for details.