Starter d'infrastructure Docker reutilisable pour applications PHP avec Caddy comme proxy edge, HTTPS automatise, MySQL, Redis, cron jobs et support optionnel de Cloudflare Tunnel. Concu pour le developpement local, le staging et les deploiements self-hosted.
Ce depot fournit une base d'infrastructure prete a cloner, adapter et reutiliser pour des projets web qui ont besoin d'une stack simple, lisible et modulaire.
L'objectif n'est pas de livrer une application metier, mais un socle d'execution capable de servir de point de depart pour :
- une application PHP classique
- une plateforme web multi-domaines ou multi-sous-domaines
- un environnement local partage par une equipe
- un environnement de staging ou de preproduction
- une base self-hosted avec HTTPS automatise
Le projet reste volontairement compact :
- un
docker-compose.ymlcentral - des configurations lisibles par service dans
.docker/ - un fichier
.envpour piloter le runtime - un edge layer base sur Caddy
Ce starter cherche a offrir un bon equilibre entre simplicite et capacite d'evolution.
Il a ete pense pour :
- demarrer vite
- rester comprehensible sans surcouche inutile
- permettre une adaptation facile a plusieurs contextes
- eviter de publier des secrets ou des donnees runtime
- fournir une base propre pour un depot public ou prive
Caddy joue le role de point d'entree HTTP/HTTPS de la stack.
Il gere :
- la terminaison TLS
- les redirections HTTP vers HTTPS
- le routage par domaine et sous-domaine
- les certificats automatiques via DNS challenge
- le forwarding vers l'application PHP
MySQL fournit la persistence relationnelle.
Cas d'usage typiques :
- donnees applicatives
- tables metier
- stockage principal des ressources persistantes
Redis est prevu pour :
- cache applicatif
- sessions
- queues
- stockage temporaire
Le service cron permet d'isoler les taches planifiees dans un conteneur dedie.
Cela facilite :
- les executions periodiques
- la separation des responsabilites
- l'evolution des jobs sans polluer le conteneur principal
Un template de tunnel est inclus pour les environnements qui souhaitent :
- exposer SSH de facon controlee
- router le domaine principal via un tunnel
- centraliser l'entree reseau sans ouvrir directement tous les ports
Internet / Tunnel
|
v
Caddy
|
v
PHP application
| |
v v
MySQL Redis
.
|-- .docker/
| |-- caddy/
| | |-- Caddyfile
| | |-- Dockerfile
| | `-- caddyfile.json
| |-- cloudflared/
| | `-- config/
| | `-- config.yml.template
| |-- cron/
| | |-- Dockerfile
| | `-- task
| |-- logs/
| |-- mysql/
| | |-- Dockerfile
| | |-- my.cnf
| | `-- sql/
| `-- nginx/
| |-- default.conf
| `-- oricode.com.conf
|-- .env.example
|-- .gitignore
|-- AUTHORS.md
|-- CONTRIBUTING.md
|-- LICENSE
|-- README.en.md
|-- README.md
|-- SECURITY.md
`-- docker-compose.yml
.docker/caddy/Contient la configuration edge, TLS et reverse proxy..docker/cloudflared/Contient le template de tunnel..docker/cron/Contient l'image et la definition des taches cron..docker/logs/Sert de point de montage pour les logs locaux..docker/mysql/Contient la configuration MySQL et l'emplacement prevu pour les scripts SQL..docker/nginx/Conserve des configurations Nginx de reference ou de compatibilite.
Copy-Item .env.example .envRenseigne au minimum :
- les credentials MySQL
- les informations Redis si necessaire
- les variables de domaine
- les variables Cloudflare si tu veux TLS DNS challenge ou tunnel
Avant le premier lancement, verifie :
docker-compose.yml.docker/caddy/Caddyfile.docker/cloudflared/config/config.yml.template.env
docker compose up -d --builddocker compose downLe template .env.example est la source de reference.
DB_CONNECTIONDriver de connexion applicatif.DB_HOSTHost MySQL accessible depuis les conteneurs.DB_PORTPort interne MySQL.FORWARD_DB_PORTPort expose cote machine.DB_DATABASEBase creee au demarrage.DB_USERNAMEUtilisateur applicatif.DB_PASSWORDMot de passe applicatif et root dans cette version de la stack.
REDIS_HOSTHost Redis.REDIS_PASSWORDMot de passe Redis si active.REDIS_PORTPort interne Redis.FORWARD_REDIS_PORTPort expose cote machine.REDIS_CLIENTClient attendu par l'application.
CLOUDFLARE_API_TOKENToken utilise pour le DNS challenge.CLOUDFLARE_API_MAIL_PRIMARYEmail principal lie a l'automatisation TLS.CLOUDFLARE_API_MAILEmail secondaire consomme par certaines parties de la stack.FORWARD_CADDY_PORTPort HTTP de l'host.FORWARD_CADDY_SSL_PORTPort HTTPS de l'host.
DOCKER_DB_CONTAINER_NAMENom du conteneur MySQL.WWWGROUPGID dans les conteneurs.WWWUSERUID dans les conteneurs.WWWWORKDIRChemin de travail monte dans le runtime web.
TUNNEL_UUIDIdentifiant du tunnel.DOMAINDomaine principal.HOST_HOSTNAMEPrefixe de hostname pour certains endpoints techniques.
Les fichiers principaux sont :
Le Caddyfile est la version la plus simple a maintenir.
Le JSON peut etre utile si tu veux :
- comparer une configuration exportee
- conserver une version machine-readable
- preparer une transition vers une autre forme de generation de config
Le template .docker/cloudflared/config/config.yml.template peut etre adapte selon ton usage.
Exemples :
- exposer une entree SSH securisee
- router le domaine principal vers le reverse proxy
- router un wildcard vers le meme edge layer
Fichiers associes :
Le dossier .docker/mysql/sql/ peut servir a stocker :
- scripts d'initialisation
- donnees de seed
- patchs SQL de bootstrap
Redis reste volontairement minimaliste pour servir de service de support facilement remplacable ou etendable.
Le service cron repose sur :
Tu peux l'utiliser pour :
- jobs periodiques
- maintenance
- synchronisations internes
- file d'attente simple si ton app s'appuie sur cron
Le depot est prepare pour rester partageable sans embarquer de donnees sensibles.
Le .gitignore couvre notamment :
.env.idea/- les certificats et donnees ACME
- les donnees runtime Caddy
- les logs
- les donnees locales MySQL
- les donnees locales Redis
- ne jamais committer un vrai
.env - ne jamais committer de certificats generes
- ne jamais committer de cles privees
- limiter les permissions du token Cloudflare
- faire tourner les secrets si une fuite est suspectee
- verifier l'historique Git avant publication d'un depot public
Pour la politique de signalement, voir SECURITY.md.
Cette base peut convenir pour :
- un projet mono-domaine
- un SaaS multi-tenant par sous-domaines
- une stack de demo ou de staging
- un environnement de dev d'equipe
- un template d'infrastructure reutilisable
Tu peux personnaliser :
- les domaines
- les sous-domaines
- les images Docker
- les ports exposes
- les volumes montes
- la strategie TLS
- les routes Caddy
- les jobs cron
Avant de pousser publiquement :
- verifier que
.envn'est pas tracke - verifier que les certificats ne sont pas trackes
- verifier que les fichiers runtime ne sont pas trackes
- verifier que les domaines exposes sont volontaires
- verifier que les chemins montes sont suffisamment generiques
- verifier que l'historique Git ne contient pas d'anciens secrets
Modifie :
FORWARD_CADDY_PORTFORWARD_CADDY_SSL_PORT
Modifie :
FORWARD_DB_PORTFORWARD_REDIS_PORT
Verifier :
- le token Cloudflare
- les droits du token
- la zone DNS
- le domaine configure dans
.env - la configuration Caddy
Verifier :
TUNNEL_UUIDDOMAINHOST_HOSTNAME- le template cloudflared
- la resolution DNS
Les contributions sont bienvenues. Voir CONTRIBUTING.md.
Ce projet est distribue sous licence MIT. Voir LICENSE.
- Website: https://www.adrielzimbril.com/
- GitHub: https://github.com/adrielzimbril
Ce depot est un socle d'infrastructure technique. Il ne cherche pas a masquer la complexite derriere trop d'outillage, mais a fournir une base claire, publiable et facilement recontextualisable pour des projets web modernes.