# ๐Ÿ› ๏ธ Development Guide *Development environment setup and contribution guidelines for the homelab project* ## ๐ŸŽฏ Overview This guide covers setting up a development environment for contributing to the homelab infrastructure, including local testing, GitOps workflows, and best practices. ## ๐Ÿš€ Quick Start ### Prerequisites - Docker and Docker Compose - Git with SSH key configured - Text editor (VS Code recommended) - Basic understanding of REDACTED_APP_PASSWORD ### Environment Setup ```bash # Clone the repository git clone https://git.vish.gg/Vish/homelab.git cd homelab # Set up development environment ./scripts/setup-dev-environment.sh # Validate compose files ./scripts/validate-compose.sh ``` ## ๐Ÿ—๏ธ Development Workflow ### 1. Local Development ```bash # Create feature branch git checkout -b feature/new-service # Make changes to compose files # Test locally if possible docker-compose -f hosts/vms/seattle/new-service.yml up -d # Validate configuration docker-compose -f hosts/vms/seattle/new-service.yml config ``` ### 2. Testing Changes - **Syntax Validation**: Use `validate-compose.sh` script - **Local Testing**: Test compose files locally when possible - **Documentation**: Update relevant documentation - **Security Review**: Check for security implications ### 3. GitOps Deployment ```bash # Commit changes git add . git commit -m "feat: add new service deployment" # Push to repository git push origin feature/new-service # Create pull request for review ``` ## ๐Ÿ“ Repository Structure ### Directory Organization ``` homelab/ โ”œโ”€โ”€ hosts/ # Host-specific configurations โ”‚ โ”œโ”€โ”€ synology/ # Synology NAS deployments โ”‚ โ”‚ โ”œโ”€โ”€ atlantis/ # Primary NAS (DS1823xs+) โ”‚ โ”‚ โ””โ”€โ”€ calypso/ # Secondary NAS (DS723+) โ”‚ โ”œโ”€โ”€ vms/ # Virtual machine deployments โ”‚ โ”‚ โ”œโ”€โ”€ seattle/ # Main VM services โ”‚ โ”‚ โ””โ”€โ”€ homelab_vm/ # Secondary VM services โ”‚ โ”œโ”€โ”€ physical/ # Physical server deployments โ”‚ โ”‚ โ””โ”€โ”€ concord_nuc/ # Intel NUC services โ”‚ โ””โ”€โ”€ edge/ # Edge device deployments โ”‚ โ””โ”€โ”€ raspberry-pi-5-vish/ โ”œโ”€โ”€ docs/ # Documentation โ”œโ”€โ”€ scripts/ # Automation scripts โ”œโ”€โ”€ grafana/ # Grafana configurations โ”œโ”€โ”€ prometheus/ # Prometheus configurations โ””โ”€โ”€ deployments/ # Special deployments ``` ### File Naming Conventions - **Compose Files**: `service-name.yml` or `service-name.yaml` - **Configuration**: `service-name.conf` or `config/` - **Documentation**: `README.md` or `SERVICE_NAME.md` - **Scripts**: `action-description.sh` ## ๐Ÿณ Docker Compose Guidelines ### Best Practices ```yaml version: '3.8' services: service-name: image: organization/image:tag # Always specify tags container_name: service-name # Consistent naming restart: unless-stopped # Restart policy environment: - PUID=1000 # User/group IDs - PGID=1000 - TZ=America/Los_Angeles # Timezone volumes: - ./config:/config # Relative paths - /data/service:/data # Absolute for data ports: - "8080:8080" # Explicit port mapping networks: - homelab # Custom networks labels: - "traefik.enable=true" # Reverse proxy labels - "com.centurylinklabs.watchtower.enable=true" networks: homelab: external: true ``` ### Security Considerations - **User IDs**: Always set PUID/PGID - **Secrets**: Use Docker secrets or external files - **Networks**: Use custom networks, avoid host networking - **Volumes**: Minimize host volume mounts - **Images**: Use official images when possible ## ๐Ÿ”ง Development Tools ### Recommended Extensions (VS Code) - **Docker**: Container management - **YAML**: Syntax highlighting and validation - **GitLens**: Git integration and history - **Markdown**: Documentation editing - **Remote SSH**: Remote development ### Useful Scripts ```bash # Validate all compose files ./scripts/validate-compose.sh # Check service status ./scripts/verify-infrastructure-status.sh # Test NTFY notifications ./scripts/test-ntfy-notifications.sh # Generate service documentation ./scripts/generate_service_docs.py ``` ## ๐Ÿ“ Documentation Standards ### Markdown Guidelines - Use clear headings and structure - Include code examples with syntax highlighting - Add links to related documentation - Keep content up-to-date with changes ### Service Documentation Each service should include: - **Purpose**: What the service does - **Configuration**: Key configuration options - **Access**: How to access the service - **Troubleshooting**: Common issues and solutions - **Dependencies**: Required services or configurations ## ๐Ÿ”„ GitOps Integration ### Portainer Configuration - **Repository**: https://git.vish.gg/Vish/homelab.git - **Branch**: main (production deployments) - **Webhook**: Automatic deployment on push - **Compose Path**: Relative paths from repository root ### Deployment Process 1. **Push to Repository**: Changes committed to main branch 2. **Webhook Trigger**: Portainer receives webhook notification 3. **Stack Update**: Affected stacks automatically redeploy 4. **Health Check**: Monitor deployment status 5. **Rollback**: Available through Git history ## ๐Ÿงช Testing Procedures ### Pre-Deployment Testing ```bash # Syntax validation docker-compose -f service.yml config # Security scan docker-compose -f service.yml config | docker run --rm -i hadolint/hadolint # Local testing (if applicable) docker-compose -f service.yml up -d docker-compose -f service.yml logs docker-compose -f service.yml down ``` ### Post-Deployment Validation - **Service Health**: Check container status in Portainer - **Connectivity**: Verify service accessibility - **Logs**: Review container logs for errors - **Monitoring**: Check Grafana dashboards for metrics ## ๐Ÿ” Security Development ### Security Checklist - [ ] No hardcoded secrets in compose files - [ ] Proper user/group ID configuration - [ ] Network isolation where appropriate - [ ] Regular image updates via Watchtower - [ ] SSL/TLS termination at reverse proxy - [ ] Access control via Authentik SSO ### Vulnerability Management - **Image Scanning**: Regular vulnerability scans - **Update Policy**: Automated updates via Watchtower - **Security Patches**: Prompt application of security updates - **Access Review**: Regular review of service access ## ๐Ÿšจ Troubleshooting ### Common Issues 1. **Port Conflicts**: Check for conflicting port assignments 2. **Volume Permissions**: Ensure proper file permissions 3. **Network Issues**: Verify network configuration 4. **Resource Limits**: Check CPU/memory constraints 5. **Image Availability**: Verify image exists and is accessible ### Debugging Tools ```bash # Container inspection docker inspect container-name # Network debugging docker network ls docker network inspect network-name # Volume inspection docker volume ls docker volume inspect volume-name # Log analysis docker logs container-name --tail 100 -f ``` ## ๐Ÿ“Š Monitoring Integration ### Metrics Collection - **Node Exporter**: System metrics on all hosts - **cAdvisor**: Container metrics - **Custom Metrics**: Application-specific metrics - **Health Checks**: Service availability monitoring ### Dashboard Development - **Grafana**: Create dashboards for new services - **Prometheus**: Define custom metrics and alerts - **Documentation**: Document dashboard usage ## ๐Ÿค Contributing ### Pull Request Process 1. **Fork Repository**: Create personal fork 2. **Feature Branch**: Create descriptive branch name 3. **Make Changes**: Follow development guidelines 4. **Test Thoroughly**: Validate all changes 5. **Update Documentation**: Keep docs current 6. **Submit PR**: Include detailed description ### Code Review - **Security Review**: Check for security implications - **Best Practices**: Ensure adherence to guidelines - **Documentation**: Verify documentation updates - **Testing**: Confirm adequate testing ## ๐Ÿ“š Additional Resources ### External Documentation - [Docker Compose Reference](https://docs.docker.com/compose/) - [Portainer Documentation](https://docs.portainer.io/) - [Prometheus Configuration](https://prometheus.io/docs/prometheus/latest/configuration/) - [Grafana Documentation](https://grafana.com/docs/) ### Internal Resources - [GitOps Deployment Guide](../admin/gitops-deployment-guide.md) - [Monitoring Setup](../admin/monitoring-setup.md) - [Operational Status](../admin/operational-status.md) - [Infrastructure Documentation](../infrastructure/INFRASTRUCTURE_OVERVIEW.md) --- **Last Updated**: February 24, 2026 **Development Environment**: Docker-based with GitOps integration **Status**: โœ… **ACTIVE** - Ready for contributions