# Environment Configuration Guide

## 📁 .env File Structure (Simplified)

Nach der Konsolidierung vom 27.10.2024 gibt es nur noch **2 .env Files** im Root:

```
├── .env                    # Development (aktiv, gitignored)
└── .env.example            # Template für neue Entwickler
```

## 🏗️ Development Setup

### Initial Setup

```bash
# 1. Copy example file
cp .env.example .env

# 2. Anpassungen für lokale Entwicklung
# - DB Credentials
# - API Keys
# - Feature Flags
```

### Active File: `.env`

- ✅ Wird von Docker Compose verwendet
- ✅ Wird von PHP Application gelesen
- ❌ NICHT committen (gitignored)
- ✅ Jeder Entwickler hat eigene Version

## 🚀 Production Deployment

### Production .env Management

**WICHTIG**: Production `.env` wird **NICHT** aus dem Repository deployed!

### Single Source of Truth

```
Server: /home/deploy/michaelschiemer/shared/.env.production
```

Dieser File wird von **Ansible** automatisch erstellt aus:
```
deployment/infrastructure/templates/.env.production.j2
```

### Production Deployment Process

```bash
# Ansible Playbook erstellt automatisch die Production .env
cd deployment/infrastructure
ansible-playbook -i inventories/production/hosts.yml \
    playbooks/deploy-rsync-based.yml \
    --vault-password-file .vault_pass
```

**Ansible macht dabei**:
1. Template `.env.production.j2` rendern
2. Vault-verschlüsselte Secrets einsetzen
3. File nach `/home/deploy/michaelschiemer/shared/.env.production` deployen
4. Docker Compose mounted diesen File in Container

## 🔒 Security Best Practices

### Development

```bash
# .env niemals committen
git status
# Should show: .env (untracked) ✅

# Falls versehentlich staged:
git reset HEAD .env
```

### Production

- ✅ Secrets in Ansible Vault
- ✅ .env.production auf Server wird NICHT ins Repository committed
- ✅ Template `.env.production.j2` enthält nur Platzhalter
- ✅ Echte Werte werden zur Deploy-Zeit eingesetzt

## 📝 Adding New Environment Variables

### Development

```bash
# 1. Add to .env.example with placeholder
echo "NEW_API_KEY=your_api_key_here" >> .env.example

# 2. Add actual value to your local .env
echo "NEW_API_KEY=abc123..." >> .env
```

### Production

```bash
# 1. Add to Ansible Template
# File: deployment/infrastructure/templates/.env.production.j2
echo "NEW_API_KEY={{ vault_new_api_key }}" >> .env.production.j2

# 2. Add secret to Ansible Vault
ansible-vault edit deployment/infrastructure/group_vars/production/vault.yml
# Add: vault_new_api_key: "production_value"

# 3. Deploy
cd deployment/infrastructure
ansible-playbook -i inventories/production/hosts.yml \
    playbooks/deploy-rsync-based.yml \
    --vault-password-file .vault_pass
```

## 🗑️ Removed Files (Consolidation 27.10.2024)

Diese Files wurden gelöscht, da sie redundant/nicht verwendet wurden:

```
❌ .env.production              (Root - redundant)
❌ .env.production.example      (Root - nicht verwendet)
❌ .env.backup.20250912_133135  (Altes Backup)
❌ .env.analytics.example       (In .env.example integriert)
❌ .env.secrets.example         (In .env.example integriert)
❌ deployment/applications/environments/  (Gesamtes Directory gelöscht)
```

## ✅ Current State

### Local Development
- ✅ Einziges aktives File: `.env`
- ✅ Template: `.env.example`
- ✅ Klar und eindeutig

### Production
- ✅ Single Source: `/home/deploy/michaelschiemer/shared/.env.production` (auf Server)
- ✅ Verwaltet durch: Ansible Template `.env.production.j2`
- ✅ Secrets in: Ansible Vault
- ✅ Keine Duplikate

## 🔍 Verification

```bash
# Check local .env files
ls -la .env*
# Should show: .env, .env.example

# Check Ansible template exists
ls -la deployment/infrastructure/templates/.env.production.j2
# Should exist

# Check NO old files remain
find . -name ".env.production" -o -name ".env.*.example" | grep -v .env.example
# Should be empty
```

## 📞 Support

Bei Fragen zum .env Setup:
- Development: Siehe `.env.example`
- Production: Siehe `deployment/infrastructure/templates/.env.production.j2`
- Secrets: Kontaktiere DevOps Team für Ansible Vault Zugriff
