Docker
ArtisanCMS fournit une configuration Docker complete : Dockerfile, docker-compose.yml et le repertoire docker/ pour les fichiers de configuration des services.
Architecture des services
Section intitulée « Architecture des services »| Service | Image | Role | Port |
|---|---|---|---|
| app | PHP 8.3-FPM (custom) | Application Laravel | 9000 (interne) |
| nginx | Nginx Alpine | Serveur web | 80, 443 |
| mysql | MySQL 8.0 | Base de donnees | 3306 |
| redis | Redis Alpine | Cache, sessions, queues | 6379 |
Demarrage rapide
Section intitulée « Demarrage rapide »cp .env.example .envdocker compose up -ddocker compose exec app composer installdocker compose exec app php artisan key:generatedocker compose exec app php artisan migrate --seeddocker compose exec app php artisan storage:linkdocker compose exec app npm ci && docker compose exec app npm run buildL’application est accessible sur http://localhost.
docker-compose.yml
Section intitulée « docker-compose.yml »services: app: build: . volumes: - .:/var/www/html - storage-data:/var/www/html/storage/app depends_on: [mysql, redis] environment: DB_HOST: mysql REDIS_HOST: redis CACHE_DRIVER: redis QUEUE_CONNECTION: redis
nginx: image: nginx:alpine ports: ["80:80", "443:443"] volumes: - .:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: [app]
mysql: image: mysql:8.0 environment: MYSQL_DATABASE: artisancms MYSQL_USER: artisancms MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} volumes: [mysql-data:/var/lib/mysql]
redis: image: redis:alpine volumes: [redis-data:/data]
volumes: mysql-data: redis-data: storage-data:Dockerfile
Section intitulée « Dockerfile »FROM php:8.3-fpm
RUN apt-get update && apt-get install -y \ libpng-dev libjpeg-dev libwebp-dev libfreetype6-dev \ libzip-dev libicu-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ && docker-php-ext-install pdo_mysql gd zip intl bcmath opcache
COPY --from=composer:latest /usr/bin/composer /usr/bin/composerRUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt-get install -y nodejs
WORKDIR /var/www/htmlCOPY . .RUN composer install --no-dev --optimize-autoloaderRUN npm ci && npm run buildRUN chown -R www-data:www-data storage bootstrap/cacheVariables d’environnement
Section intitulée « Variables d’environnement »DB_CONNECTION=mysqlDB_HOST=mysqlDB_DATABASE=artisancmsDB_USERNAME=artisancmsDB_PASSWORD=mot_de_passe_securise
CACHE_DRIVER=redisQUEUE_CONNECTION=redisSESSION_DRIVER=redisREDIS_HOST=redisVolumes et persistance
Section intitulée « Volumes et persistance »| Volume | Point de montage | Fonction |
|---|---|---|
mysql-data | /var/lib/mysql | Donnees de la base de donnees |
redis-data | /data | Cache et sessions persistantes |
storage-data | /var/www/html/storage/app | Medias uploades |
Image personnalisee
Section intitulée « Image personnalisee »docker build -t artisancms:latest .docker tag artisancms:latest registry.example.com/artisancms:latestdocker push registry.example.com/artisancms:latestDocker en production
Section intitulée « Docker en production »Recommandations pour la production :
- Restart policy :
restart: unless-stoppedsur chaque service. - Healthchecks : verifications de sante sur chaque conteneur.
- Secrets : Docker Secrets ou gestionnaire externe au lieu du
.env. - Ressources : limitez memoire et CPU par conteneur.
services: app: restart: unless-stopped deploy: resources: limits: memory: 512M healthcheck: test: ["CMD", "php-fpm-healthcheck"] interval: 30sMise a l’echelle
Section intitulée « Mise a l’echelle »Docker Swarm
Section intitulée « Docker Swarm »docker swarm initdocker stack deploy -c docker-compose.yml artisancmsdocker service scale artisancms_app=3Kubernetes
Section intitulée « Kubernetes »Convertissez la configuration avec Kompose ou creez des manifestes dedies. Configurez un Ingress Controller, des PersistentVolumeClaims et deploiez les bases de donnees en StatefulSets.