{"id":34674657,"url":"https://github.com/teowaep/docker-spn-template","last_synced_at":"2025-12-24T20:02:23.093Z","repository":{"id":325990057,"uuid":"1103106895","full_name":"teowaep/docker-spn-template","owner":"teowaep","description":"🚀 Template Docker prêt à l'emploi pour Symfony 7 avec PostgreSQL, Nginx, pgAdmin et Makefile. Installation en 1 commande, développement simplifié avec 70+ raccourcis.","archived":false,"fork":false,"pushed_at":"2025-11-24T22:06:06.000Z","size":172,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-28T06:16:33.135Z","etag":null,"topics":["boilerplate","devops","docker","docker-compose","makefile","nginx","pgadmin","php","php8","postgresql","starter-kit","symfony","symfony7","template","xdebug"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teowaep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-24T12:43:42.000Z","updated_at":"2025-11-24T22:06:09.000Z","dependencies_parsed_at":"2025-11-29T01:05:45.612Z","dependency_job_id":null,"html_url":"https://github.com/teowaep/docker-spn-template","commit_stats":null,"previous_names":["teowaep/docker-spn-template"],"tags_count":null,"template":true,"template_full_name":null,"purl":"pkg:github/teowaep/docker-spn-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teowaep%2Fdocker-spn-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teowaep%2Fdocker-spn-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teowaep%2Fdocker-spn-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teowaep%2Fdocker-spn-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teowaep","download_url":"https://codeload.github.com/teowaep/docker-spn-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teowaep%2Fdocker-spn-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28007457,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boilerplate","devops","docker","docker-compose","makefile","nginx","pgadmin","php","php8","postgresql","starter-kit","symfony","symfony7","template","xdebug"],"created_at":"2025-12-24T20:01:07.684Z","updated_at":"2025-12-24T20:02:23.087Z","avatar_url":"https://github.com/teowaep.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Template Docker - Symfony + PostgreSQL + Nginx\n\n\u003cdiv align=\"center\"\u003e\n\n![Symfony](https://img.shields.io/badge/Symfony-8.0-000000?style=for-the-badge\u0026logo=symfony)\n![PHP](https://img.shields.io/badge/PHP-8.4-777BB4?style=for-the-badge\u0026logo=php\u0026logoColor=white)\n![PostgreSQL](https://img.shields.io/badge/PostgreSQL-18-316192?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)\n![Nginx](https://img.shields.io/badge/Nginx-1.27-009639?style=for-the-badge\u0026logo=nginx\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n![pgAdmin](https://img.shields.io/badge/pgAdmin-4-336791?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)\n\n[![License](https://img.shields.io/badge/License-Private-red?style=for-the-badge)](LICENSE)\n![Maintenance](https://img.shields.io/badge/Maintained-Yes-green?style=for-the-badge)\n\n\u003c/div\u003e\n\nTemplate prêt à l'emploi pour démarrer rapidement un projet Symfony avec Docker, Nginx et PostgreSQL.\n\n**Symfony 8.0 skeleton déjà installé** - Clone, configure et démarre en 5 commandes !\n\n## 📦 Stack technique\n\n- **PHP** 8.4-FPM avec Xdebug\n- **Symfony** 8.0 skeleton\n- **PostgreSQL** 18\n- **pgAdmin** 4 (interface web pour PostgreSQL)\n- **Nginx** 1.27+\n- **Docker** \u0026 Docker Compose\n- **Symfony CLI** intégré\n\n---\n\n## 🎯 Fonctionnalités\n\n✅ **Symfony 8.0 skeleton déjà installé** - Clone et démarre !  \n✅ Configuration Docker optimisée  \n✅ Nginx configuré comme reverse proxy  \n✅ PostgreSQL 18 avec persistence des données  \n✅ pgAdmin intégré (interface web pour gérer PostgreSQL)  \n✅ Makefile avec 70+ raccourcis pratiques  \n✅ Xdebug configuré pour le développement  \n✅ Health checks intégrés sur tous les services  \n✅ Variables d'environnement sécurisées  \n✅ Symfony CLI pré-installé  \n✅ Upgrade en webapp (site web) en 1 commande  \n✅ Upgrade en API (API Platform) en 1 commande\n\n---\n\n## 📋 Prérequis\n\n- Docker \u003e= 20.10\n- Docker Compose \u003e= 2.0\n- Git\n\n### Configuration du template\n\nLe template utilise :\n- PHP 8.4 avec toutes les extensions Symfony 8.0 ✅\n- Symfony CLI intégré ✅\n- Composer 2.9 ✅\n- PostgreSQL 18\n- Nginx 1.27\n\n\u003e 💡 Aucune installation locale requise ! Tout tourne dans Docker.\n\n---\n\n## 🚀 Installation rapide\n\n\u003e 💡 **Ce template contient déjà Symfony 8 skeleton installé !** Tu n'as qu'à cloner, configurer et démarrer.\n\n### ⚡ Installation avec Make (Recommandé)\n\n**La méthode la plus rapide - 3 commandes :**\n\n```bash\n# 1. Cloner le template\ngit clone https://github.com/teowaep/docker-spn-template.git mon-projet\ncd mon-projet\n\n# 2. Supprimer l'historique Git du template\nrm -rf .git\ngit init\n\n# 3. Configurer l'environnement\ncp .env.example .env\nnano .env  # Remplis POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB\n\n# 4. Démarrer tout !\nmake setup\n\n# 5. Lancer le terminal\nmake bash\n```\n\n**C'est tout ! 🎉** Ton projet est prêt à **http://localhost:8080**\n\n### 🔧 Installation classique (Sans Make)\n\n**Si tu n'as pas Make installé :**\n\n```bash\n# 1. Cloner le template\ngit clone https://github.com/teowaep/docker-spn-template.git mon-projet\ncd mon-projet\n\n# 2. Supprimer l'historique Git du template\nrm -rf .git\ngit init\n\n# 3. Configurer l'environnement\ncp .env.example .env\nnano .env  # Remplis POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB\n\n# 4. Ajuster DATABASE_URL dans .env\n# Remplace cette ligne :\n# DATABASE_URL=\"postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16\u0026charset=utf8\"\n# Par :\n# DATABASE_URL=\"postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@backend-postgres:${POSTGRES_PORT}/${POSTGRES_DB}?serverVersion=18\u0026charset=utf8\"\n\n# 5. Build et démarrer les containers\ndocker-compose build\ndocker-compose up -d\n\n# 6. Corriger les permissions\ndocker-compose exec backend-php chmod -R 777 var/\n\n# 7. Installer les dépendances\ndocker-compose exec backend-php composer install\n\n# 8. Créer la base de données (nécessite Doctrine - voir ci-dessous)\ndocker-compose exec backend-php bash\ncomposer require symfony/orm-pack\nsymfony console doctrine:database:create\nexit\n```\n\n**Ton projet est prêt !** Ouvre **http://localhost:8080** 🎉\n\n---\n\n### 🎯 Variables .env importantes\n\n```env\n# Symfony\nAPP_ENV=dev\nAPP_SECRET=genere-un-secret-avec-openssl-rand-hex-32\n\n# PostgreSQL (pour Docker)\nPOSTGRES_DB=mon_projet_db\nPOSTGRES_USER=mon_user\nPOSTGRES_PASSWORD=mon_password_securise\nPOSTGRES_PORT=5432\n\n# Database URL (pour Symfony)\nDATABASE_URL=\"postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@backend-postgres:${POSTGRES_PORT}/${POSTGRES_DB}?serverVersion=18\u0026charset=utf8\"\n```\n\n💡 **Générer APP_SECRET :**\n```bash\nopenssl rand -hex 32\n```\n\n---\n\n### 📦 Choisir ta stack (Optionnel)\n\nLe template contient **Symfony skeleton** (version minimale). Tu peux l'upgrader selon tes besoins :\n\n#### Option 1 : Webapp (Site web classique)\n\n**Avec Make :**\n```bash\nmake upgrade-webapp\n```\n\n**Sans Make :**\n```bash\ndocker-compose exec backend-php composer require webapp\n```\n\n**Inclut :** Twig, Doctrine, Formulaires, Sécurité, Asset Mapper\n\n---\n\n#### Option 2 : API (API REST)\n\n**Avec Make :**\n```bash\nmake upgrade-api\n```\n\n**Sans Make :**\n```bash\ndocker-compose exec backend-php composer require api\n```\n\n**Inclut :** API Platform, Doctrine, Serializer, Validation\n\nDocumentation API disponible à : **http://localhost:8080/api**\n\n---\n\n**Différences skeleton / webapp / api :**\n\n| Fonctionnalité        | Skeleton (inclus) | Webapp | API |\n| --------------------- | ----------------- | ------ | --- |\n| Framework de base     | ✅                 | ✅      | ✅   |\n| Twig (templates)      | ❌                 | ✅      | ❌   |\n| Doctrine (ORM)        | ❌                 | ✅      | ✅   |\n| Formulaires           | ❌                 | ✅      | ❌   |\n| Sécurité              | ❌                 | ✅      | ✅   |\n| Asset Mapper          | ❌                 | ✅      | ❌   |\n| API Platform          | ❌                 | ❌      | ✅   |\n| Documentation OpenAPI | ❌                 | ❌      | ✅   |\n\n---\n\n### 📝 Commandes utiles après installation\n\n```bash\n# Entrer dans le container PHP\nmake bash\n# ou\ndocker-compose exec backend-php bash\n\n# Créer une entité (nécessite Doctrine/webapp)\nmake entity name=Article\n\n# Voir les logs\nmake logs-php\n\n# Arrêter les containers\nmake down\n```\n\n---\n\n## 🛠️ Commandes utiles\n\n### 💡 Travailler comme en local\n\nPour une meilleure expérience de développement, **entre dans le container PHP** et travaille comme si tu étais en local :\n\n```bash\n# Entrer dans le container PHP\ndocker-compose exec backend-php bash\n\n# Maintenant tu es dans le container, tu peux utiliser toutes les commandes directement !\nsymfony console cache:clear\nsymfony console make:entity\ncomposer require symfony/mailer\nsymfony security:check\n```\n\n**👉 Toutes les commandes ci-dessous sont présentées comme si tu étais dans le container.**\n\nSi tu préfères exécuter depuis l'hôte sans entrer dans le container, préfixe simplement avec :\n```bash\ndocker-compose exec backend-php [ta-commande]\n```\n\n---\n\n### 🔨 Utiliser le Makefile (Raccourcis pratiques)\n\nUn **Makefile** est inclus pour simplifier l'utilisation avec des raccourcis ! \n\n**Voir toutes les commandes disponibles :**\n```bash\nmake help\n# ou juste\nmake\n```\n\n**Top 10 des commandes les plus utiles :**\n```bash\nmake up              # Démarrer tous les containers\nmake down            # Arrêter tous les containers\nmake bash            # Entrer dans le container PHP\nmake logs-php        # Voir les logs PHP en direct\nmake cache-clear     # Vider le cache Symfony\nmake db-migrate      # Exécuter les migrations\nmake entity name=Article      # Créer une entité\nmake controller name=Article  # Créer un controller\nmake db-reset        # Reset complet de la DB\nmake app             # Ouvrir l'app dans le navigateur\n```\n\n**Catégories de commandes :**\n\n\u003cdetails\u003e\n\u003csummary\u003e🐳 Docker (10 commandes)\u003c/summary\u003e\n\n```bash\nmake up              # Démarrer les containers\nmake down            # Arrêter les containers\nmake restart         # Redémarrer\nmake build           # Construire les images\nmake rebuild         # Reconstruire (sans cache)\nmake ps              # État des containers\nmake logs            # Tous les logs\nmake logs-php        # Logs PHP uniquement\nmake logs-nginx      # Logs Nginx uniquement\nmake logs-db         # Logs PostgreSQL uniquement\nmake clean           # Supprimer tout (⚠️ volumes inclus)\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e🔧 Accès rapide (4 commandes)\u003c/summary\u003e\n\n```bash\nmake bash            # Entrer dans le container PHP\nmake db-shell        # Accéder au shell PostgreSQL\nmake pgadmin         # Ouvrir pgAdmin dans le navigateur\nmake app             # Ouvrir l'application dans le navigateur\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e🎵 Symfony (9 commandes)\u003c/summary\u003e\n\n```bash\nmake cache-clear                # Vider le cache\nmake cache-warmup              # Préchauffer le cache\nmake routes                     # Voir toutes les routes\nmake entity name=Article        # Créer une entité\nmake controller name=Article    # Créer un controller\nmake crud name=Article          # Créer un CRUD complet\nmake form name=Article          # Créer un formulaire\nmake security                   # Vérifier les vulnérabilités\nmake sf cmd=\"debug:container\"   # Commande Symfony personnalisée\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e📦 Composer (5 commandes)\u003c/summary\u003e\n\n```bash\nmake composer-install                       # Installer les dépendances\nmake composer-update                        # Mettre à jour\nmake composer-require package=symfony/mailer  # Ajouter un package\nmake composer-remove package=symfony/mailer   # Supprimer un package\nmake composer-dump                          # Régénérer l'autoload\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e🗄️ Base de données (12 commandes)\u003c/summary\u003e\n\n```bash\nmake db-create       # Créer la base de données\nmake db-drop         # Supprimer la base de données\nmake db-migrate      # Exécuter les migrations\nmake db-migration    # Créer une nouvelle migration\nmake db-diff         # Générer une migration automatiquement\nmake db-validate     # Valider le schéma\nmake db-fixtures     # Charger les fixtures\nmake db-reset        # Reset complet (drop+create+migrate+fixtures)\nmake db-backup       # Créer un backup dans backups/\nmake db-restore file=backups/backup.sql  # Restaurer un backup\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e🧪 Tests (2 commandes)\u003c/summary\u003e\n\n```bash\nmake test            # Exécuter les tests PHPUnit\nmake test-coverage   # Tests avec couverture de code\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e🚀 Installation (4 commandes)\u003c/summary\u003e\n\n```bash\nmake setup              # Installation complete (Symfony deja installe)\nmake upgrade-webapp     # Passer de skeleton a webapp (site web)\nmake upgrade-api        # Passer de skeleton a API (API REST)\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e🔧 Utilitaires (7 commandes)\u003c/summary\u003e\n\n```bash\nmake fix-perms       # Corriger les permissions\nmake clear-cache     # Supprimer var/cache/\nmake clear-logs      # Supprimer var/log/\nmake phpstan         # Analyse statique (si installé)\nmake cs-fixer        # Formater le code (si installé)\nmake stats           # Voir stats CPU/RAM des containers\nmake health          # Vérifier la santé de tous les services\n```\n\u003c/details\u003e\n\n**Exemples d'utilisation :**\n\n```bash\n# Workflow quotidien\nmake up \u0026\u0026 make bash           # Démarrer et entrer dans PHP\n\n# Créer une nouvelle fonctionnalité\nmake entity name=Product\nmake crud name=Product\nmake db-migration\nmake db-migrate\n\n# Debugging\nmake logs-php                  # Terminal 1\nmake logs-db                   # Terminal 2\n\n# Reset complet de la DB\nmake db-reset\n\n# Backup avant grosse modif\nmake db-backup\n```\n\n💡 **Astuce :** Le Makefile est optionnel. Si tu préfères, tu peux toujours utiliser les commandes Docker classiques ou entrer dans le container avec `make bash` (ou `docker-compose exec backend-php bash`).\n\n---\n\n### Docker (depuis l'hôte)\n\n```bash\n# Démarrer les containers\ndocker-compose up -d\n\n# Arrêter les containers\ndocker-compose down\n\n# Voir les logs\ndocker-compose logs -f\n\n# Voir les logs d'un service spécifique\ndocker-compose logs -f backend-php\ndocker-compose logs -f backend-nginx\ndocker-compose logs -f backend-postgres\n\n# Voir l'état des containers\ndocker-compose ps\n\n# Reconstruire les images\ndocker-compose build\n\n# Redémarrer un service\ndocker-compose restart backend-php\n\n# 🔑 Entrer dans le container PHP (recommandé pour le développement)\ndocker-compose exec backend-php bash\n\n# Supprimer tout (containers + volumes)\ndocker-compose down -v\n```\n\n---\n\n### Symfony (dans le container)\n\n```bash\n# Vider le cache\nsymfony console cache:clear\n\n# Créer une entité\nsymfony console make:entity\n\n# Créer un controller\nsymfony console make:controller\n\n# Créer une migration\nsymfony console make:migration\n\n# Exécuter les migrations\nsymfony console doctrine:migrations:migrate\n\n# Voir les routes\nsymfony console debug:router\n\n# Voir les services\nsymfony console debug:container\n\n# Vérifier les vulnérabilités de sécurité\nsymfony security:check\n\n# Lancer les tests\nsymfony php bin/phpunit\n```\n\n**💡 Astuce :** Tu peux aussi utiliser `php bin/console` au lieu de `symfony console` :\n```bash\nphp bin/console cache:clear\nphp bin/console make:entity\n```\n\n---\n\n### Composer (dans le container)\n\n```bash\n# Installer les dépendances\ncomposer install\n\n# Mettre à jour les dépendances\ncomposer update\n\n# Ajouter un package\ncomposer require [package]\n\n# Exemples courants :\ncomposer require symfony/mailer\ncomposer require symfony/messenger\ncomposer require api-platform/core\ncomposer require doctrine/doctrine-fixtures-bundle --dev\n\n# Supprimer un package\ncomposer remove [package]\n\n# Voir les packages installés\ncomposer show\n\n# Rechercher un package\ncomposer search [mot-clé]\n```\n\n---\n\n### Base de données (dans le container)\n\n**Commandes Doctrine :**\n```bash\n# Créer la base de données\nsymfony console doctrine:database:create\n\n# Supprimer la base de données\nsymfony console doctrine:database:drop --force\n\n# Créer une entité\nsymfony console make:entity\n\n# Créer une migration\nsymfony console make:migration\n\n# Voir le SQL de la migration (sans l'exécuter)\nsymfony console doctrine:migrations:migrate --dry-run\n\n# Exécuter les migrations\nsymfony console doctrine:migrations:migrate\n\n# Annuler la dernière migration\nsymfony console doctrine:migrations:migrate prev\n\n# Charger des fixtures (si doctrine-fixtures-bundle installé)\nsymfony console doctrine:fixtures:load\n\n# Valider le schéma de base de données\nsymfony console doctrine:schema:validate\n```\n\n**Accès direct à PostgreSQL :**\n```bash\n# Sortir du container PHP et accéder à PostgreSQL\n# (Ou ouvrir un nouveau terminal)\nexit\ndocker-compose exec backend-postgres psql -U ton_user -d ton_db\n\n# Une fois dans psql :\n\\l                  # Lister toutes les bases\n\\dt                 # Lister les tables\n\\d+ nom_table       # Décrire une table\nSELECT * FROM ...;  # Exécuter une requête\n\\q                  # Quitter psql\n```\n\n**Backup et restauration (depuis l'hôte) :**\n```bash\n# Backup\ndocker-compose exec backend-postgres pg_dump -U ton_user ton_db \u003e backup.sql\n\n# Restauration\ndocker-compose exec -T backend-postgres psql -U ton_user ton_db \u003c backup.sql\n```\n\n---\n\n## 📝 Workflow de développement typique\n\nVoici un workflow typique pour développer avec ce template :\n\n**Option 1 : Avec le Makefile (recommandé, plus rapide)**\n```bash\n# 1. Démarrer les services\nmake up\n\n# 2. Vérifier que tout tourne\nmake ps\n\n# 3. Entrer dans le container PHP\nmake bash\n\n# 4. Créer une nouvelle entité\nsymfony console make:entity Article\n\n# 5. Créer une migration\nsymfony console make:migration\n\n# 6. Exécuter la migration\nsymfony console doctrine:migrations:migrate\n\n# 7. Vérifier dans pgAdmin\n# Lance: make pgadmin (dans un autre terminal)\n\n# 8. Créer un controller\nsymfony console make:controller ArticleController\n\n# 9. Installer un nouveau package si besoin\ncomposer require symfony/mailer\n\n# 10. Vérifier la sécurité\nsymfony security:check\n```\n\n**Option 2 : Sans Makefile (commandes Docker classiques)**\n```bash\n# 1. Démarrer les services\ndocker-compose up -d\n\n# 2. Vérifier que tout tourne\ndocker-compose ps\n\n# 3. Entrer dans le container PHP\ndocker-compose exec backend-php bash\n\n# ... puis les mêmes commandes Symfony/Composer qu'au-dessus\n```\n\n### 💡 Pendant le développement\n\nTu peux garder **3 terminaux ouverts** :\n1. **Terminal 1** - Dans le container PHP (pour les commandes Symfony/Composer)\n   ```bash\n   make bash\n   # ou\n   docker-compose exec backend-php bash\n   ```\n2. **Terminal 2** - Pour les logs Docker\n   ```bash\n   make logs-php\n   # ou\n   docker-compose logs -f backend-php\n   ```\n3. **Navigateur** - Onglet avec ton app (http://localhost:8080) + onglet pgAdmin (http://localhost:5050)\n\n---\n\n## ⚙️ Configuration\n\n### Services \u0026 Ports\n\n| Service    | Port interne | Port exposé | URL d'accès           |\n| ---------- | ------------ | ----------- | --------------------- |\n| Nginx      | 80           | 8080        | http://localhost:8080 |\n| PHP-FPM    | 9000         | -           | (interne)             |\n| PostgreSQL | 5432         | 5432        | localhost:5432        |\n| pgAdmin    | 80           | 5050        | http://localhost:5050 |\n| Xdebug     | 9003         | 9003        | (IDE)                 |\n\n### Modifier les ports\n\n**Dans `docker-compose.yml` :**\n```yaml\nbackend-nginx:\n  ports:\n    - \"8080:80\"  # Change 8080 par le port souhaité\n\nbackend-postgres:\n  ports:\n    - \"5432:5432\"  # Change 5432 par le port souhaité\n```\n\n### Variables d'environnement\n\n**Fichier `.env` (configuration locale) :**\n```env\nAPP_ENV=dev                    # Environnement : dev, prod, test\nAPP_SECRET=xxx                 # Secret Symfony (32+ caractères)\n\nPOSTGRES_DB=nom_db            # Nom de la base de données\nPOSTGRES_USER=user            # Utilisateur PostgreSQL\nPOSTGRES_PASSWORD=password    # Mot de passe PostgreSQL\nPOSTGRES_PORT=5432            # Port PostgreSQL\n```\n\n---\n\n## 🗄️ pgAdmin - Interface web pour PostgreSQL\n\npgAdmin est inclus dans le stack Docker et accessible via le navigateur web.\n\n### Accès à pgAdmin\n\n1. **Ouvre ton navigateur :** http://localhost:5050\n\n2. **Connexion à pgAdmin :**\n   ```\n   Email: admin@admin.com\n   Password: admin\n   ```\n\n### Configurer la connexion à ta base de données\n\nLors de ta première connexion, tu dois ajouter ton serveur PostgreSQL :\n\n1. **Clic droit sur \"Servers\"** → **\"Register\"** → **\"Server...\"**\n\n2. **Onglet \"General\" :**\n   ```\n   Name: Mon Projet (ou ce que tu veux)\n   ```\n\n3. **Onglet \"Connection\" :**\n   ```\n   Host name/address: backend-postgres  ← IMPORTANT ! (nom du service Docker)\n   Port: 5432\n   Maintenance database: postgres\n   Username: ton_user (depuis .env - POSTGRES_USER)\n   Password: ton_password (depuis .env - POSTGRES_PASSWORD)\n   ```\n\n4. **Coche \"Save password\"** (optionnel mais pratique)\n\n5. **Clique sur \"Save\"**\n\nEt voilà ! Tu peux maintenant :\n- 📊 Voir toutes tes tables\n- 🔍 Parcourir les données\n- ✏️ Exécuter des requêtes SQL\n- 📈 Visualiser les relations entre tables\n- 💾 Faire des backups/imports\n\n### 💡 Astuce\n\nLa configuration de pgAdmin est persistée dans le volume `pgadmin_data`. Tu n'auras à configurer la connexion qu'une seule fois !\n\n### ⚠️ Note importante\n\nPour te connecter depuis pgAdmin (qui est dans Docker), tu **dois utiliser** le nom du service Docker (`backend-postgres`) et **pas** `localhost`. C'est parce que pgAdmin et PostgreSQL sont tous les deux dans le réseau Docker `newproject_network`.\n\n---\n\n## 🐛 Debugging avec Xdebug\n\nXdebug est pré-configuré dans l'image PHP pour le développement.\n\n### Configuration VSCode\n\nCrée `.vscode/launch.json` :\n```json\n{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Listen for Xdebug\",\n            \"type\": \"php\",\n            \"request\": \"launch\",\n            \"port\": 9003,\n            \"pathMappings\": {\n                \"/var/www/html\": \"${workspaceFolder}\"\n            }\n        }\n    ]\n}\n```\n\n### Configuration PhpStorm\n\n1. **Settings → PHP → Servers**\n2. Ajouter un serveur :\n   - Name : `localhost`\n   - Host : `localhost`\n   - Port : `8080`\n   - Debugger : `Xdebug`\n   - Use path mappings : ✅\n   - Project files → `/var/www/html`\n\n### Activer le debug\n\n```bash\n# Xdebug est configuré avec start_with_request=trigger\n# Ajoute ?XDEBUG_SESSION_START=1 à ton URL\n# Ou utilise l'extension navigateur Xdebug Helper\n```\n\n---\n\n## 🆘 Troubleshooting\n\n### Les containers ne démarrent pas\n\n```bash\n# Voir les logs détaillés\ndocker-compose logs\n\n# Reconstruire complètement\ndocker-compose down -v\ndocker-compose build --no-cache\ndocker-compose up -d\n```\n\n### Erreur \"Permission denied\"\n\n```bash\n# Depuis l'hôte\nsudo chown -R $USER:$USER .\n\n# Depuis le container\nchown -R www-data:www-data var/\n```\n\n### Nginx retourne 502 Bad Gateway\n\n```bash\n# Depuis l'hôte - Vérifier que PHP-FPM tourne\ndocker-compose ps backend-php\n\n# Vérifier les logs\ndocker-compose logs backend-php\ndocker-compose logs backend-nginx\n\n# Redémarrer les services\ndocker-compose restart backend-php backend-nginx\n```\n\n### Impossible de se connecter à PostgreSQL\n\n```bash\n# Depuis l'hôte - Vérifier que PostgreSQL est démarré\ndocker-compose ps backend-postgres\n\n# Vérifier la santé du service\ndocker-compose exec backend-postgres pg_isready -U ton_user\n\n# Tester la connexion\ndocker-compose exec backend-postgres psql -U ton_user -d ton_db\n\n# Dans le container PHP - Vérifier les variables d'environnement\nenv | grep DATABASE\n```\n\n### Xdebug ne fonctionne pas\n\n```bash\n# Dans le container - Vérifier que Xdebug est installé\nphp -v\n# Tu devrais voir : \"with Xdebug v3.x.x\"\n\n# Vérifier la configuration\nphp -i | grep xdebug\n\n# Depuis l'hôte - Reconstruire l'image avec Xdebug\ndocker-compose build --no-cache backend-php\n```\n\n### Symfony retourne 500\n\n```bash\n# Dans le container - Vider le cache\nsymfony console cache:clear\n\n# Voir les logs Symfony (dans le container ou depuis l'hôte)\ntail -f var/log/dev.log\n\n# Vérifier les permissions\nls -la var/\n```\n\n### Composer install échoue\n\n```bash\n# Dans le container - Vider le cache Composer\ncomposer clear-cache\n\n# Réinstaller\nrm -rf vendor/\ncomposer install\n```\n\n### pgAdmin ne se connecte pas à PostgreSQL\n\n```bash\n# Vérifie que tu utilises le bon host\nHost: backend-postgres  ← PAS localhost !\n\n# Vérifie que PostgreSQL est accessible\ndocker-compose exec backend-postgres pg_isready\n\n# Vérifie les credentials dans .env\ncat .env | grep POSTGRES\n\n# Redémarre pgAdmin\ndocker-compose restart pgadmin\n```\n\n### Impossible d'accéder à pgAdmin (http://localhost:5050)\n\n```bash\n# Vérifier que pgAdmin tourne\ndocker-compose ps pgadmin\n\n# Voir les logs\ndocker-compose logs pgadmin\n\n# Redémarrer pgAdmin\ndocker-compose restart pgadmin\n\n# Si ça ne marche toujours pas, reconstruire\ndocker-compose up -d --force-recreate pgadmin\n```\n\n---\n\n## 🎨 Personnalisation\n\n### Changer le nom du projet\n\n**Dans `docker-compose.yml` :**\n```yaml\nname: mon-projet  # Change \"newproject\"\n\nservices:\n  backend-php:\n    container_name: mon-projet-php  # Change les noms\n  backend-nginx:\n    container_name: mon-projet-nginx\n  backend-postgres:\n    container_name: mon-projet-postgres\n```\n\n### Ajouter un service (Redis, Mailcatcher, etc.)\n\n**Exemple : Ajouter Redis**\n\nDans `docker-compose.yml` :\n```yaml\nservices:\n  redis:\n    image: redis:7-alpine\n    container_name: newproject-redis\n    ports:\n      - \"6379:6379\"\n    networks:\n      - newproject_network\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 10s\n      timeout: 3s\n      retries: 3\n```\n\nDans `.env` :\n```env\nREDIS_URL=redis://redis:6379\n```\n\nPuis dans le container PHP :\n```bash\ncomposer require symfony/redis-bundle predis/predis\n```\n\n### Modifier la version PHP\n\n**Dans `docker/php/Dockerfile.dev` :**\n```dockerfile\nFROM php:8.3-fpm  # Change 8.4 par la version souhaitée\n```\n\nPuis rebuild :\n```bash\ndocker-compose build --no-cache backend-php\n```\n\n### Ajouter des extensions PHP\n\n**Dans `docker/php/Dockerfile.dev`, après les autres extensions :**\n```dockerfile\nRUN docker-php-ext-install -j$(nproc) gd bcmath soap\n```\n\nPuis rebuild :\n```bash\ndocker-compose build --no-cache backend-php\n```\n\n### Retirer pgAdmin (si tu ne veux pas l'utiliser)\n\nSi tu préfères utiliser un client local ou pas de visualiseur du tout :\n\n**Dans `docker-compose.yml`, supprime ou commente :**\n```yaml\n# pgadmin:\n#   image: dpage/pgadmin4:latest\n#   ...\n\n# Et dans volumes:\n# pgadmin_data:\n#   name: newproject_pgadmin_data\n```\n\nPuis :\n```bash\ndocker-compose down\ndocker-compose up -d\n```\n\n---\n\n## 🔒 Sécurité\n\n### Pour la production\n\nAvant de déployer en production :\n\n1. **Changer `APP_SECRET`** avec une valeur forte et unique\n2. **Changer les credentials PostgreSQL**\n3. **Passer `APP_ENV=prod`**\n4. **Désactiver Xdebug** (utiliser `ARG INSTALL_XDEBUG=false` dans le build)\n5. **Utiliser HTTPS** avec des certificats valides\n6. **Renforcer les headers de sécurité** dans Nginx\n7. **Configurer les CORS** si API\n8. **Optimiser le cache OPcache**\n\n### Variables sensibles\n\n⚠️ **Ne commite JAMAIS ton fichier `.env` !**\n\nLe fichier `.gitignore` est configuré pour ignorer `.env`, vérifie avant chaque commit :\n```bash\ngit status\n```\n\n---\n\n## 📚 Ressources utiles\n\n- [Documentation Symfony](https://symfony.com/doc/current/index.html)\n- [Documentation Docker](https://docs.docker.com/)\n- [Documentation PostgreSQL](https://www.postgresql.org/docs/)\n- [Documentation Nginx](https://nginx.org/en/docs/)\n- [Xdebug Documentation](https://xdebug.org/docs/)\n- [Symfony CLI Documentation](https://symfony.com/download)\n\n---\n\n## 🤝 Contribution\n\nCe template est privé et destiné à un usage personnel/interne.\n\nSi tu veux le partager avec ton équipe :\n1. Assure-toi que tous les secrets sont externalisés dans `.env`\n2. Documente les spécificités de ton setup\n3. Teste l'installation sur une machine vierge\n\n---\n\n## 📝 Changelog\n\n### Version 1.0 (2025-11-24)\n- ✨ Configuration initiale\n- ✨ Docker Compose avec PHP 8.4, Nginx, PostgreSQL 18\n- ✨ pgAdmin 4 intégré (interface web pour PostgreSQL)\n- ✨ Makefile avec 70+ raccourcis pratiques\n- ✨ Xdebug configuré\n- ✨ Symfony CLI intégré\n- ✨ Health checks sur tous les services\n- ✨ Documentation complète avec commandes \"locales\"\n\n---\n\n## 📄 License\n\nProjet privé - Tous droits réservés\n\n---\n\n## 🎉 Bon développement !\n\nSi tu rencontres des problèmes ou as des suggestions d'amélioration, n'hésite pas !\n\n**Créé avec ❤️ pour accélérer le développement Symfony avec Docker**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteowaep%2Fdocker-spn-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteowaep%2Fdocker-spn-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteowaep%2Fdocker-spn-template/lists"}