feat: Initialisation du projet mainframe
Ajout de la configuration docker, gitlab CI et autres fichiers. Suppression des fichiers compose et importmap obsolètes.
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -18,3 +18,6 @@
|
||||
/public/assets/
|
||||
/assets/vendor/
|
||||
###< symfony/asset-mapper ###
|
||||
|
||||
.idea
|
||||
node_modules
|
||||
|
||||
65
.gitlab/.gitlab-ci.yml
Normal file
65
.gitlab/.gitlab-ci.yml
Normal file
@@ -0,0 +1,65 @@
|
||||
image: tools-registry.esy-web.dev/mainframe/mainframe # Utilisation de l'image Docker spécifiée
|
||||
|
||||
stages:
|
||||
- install
|
||||
- test
|
||||
- build
|
||||
- analyse
|
||||
- deploy
|
||||
|
||||
# Services Docker définis globalement, disponibles pour tous les jobs
|
||||
services:
|
||||
- redis:7-alpine
|
||||
- postgres:16-alpine
|
||||
|
||||
install_dependencies:
|
||||
stage: install
|
||||
script:
|
||||
- echo "Starting installation stage..."
|
||||
- echo "Dependencies installed successfully."
|
||||
# tags:
|
||||
# - docker # Retiré car l'image est spécifiée globalement
|
||||
|
||||
run_tests:
|
||||
stage: test
|
||||
script:
|
||||
- echo "Starting testing stage..."
|
||||
- echo "Tests completed successfully."
|
||||
needs:
|
||||
- install_dependencies # Ce job dépend du job 'install_dependencies'
|
||||
# tags:
|
||||
# - docker # Retiré car l'image est spécifiée globalement
|
||||
|
||||
build_application:
|
||||
stage: build
|
||||
script:
|
||||
- echo "Starting build stage..."
|
||||
- echo "Application built successfully."
|
||||
needs:
|
||||
- run_tests # Ce job dépend du job 'run_tests'
|
||||
# tags:
|
||||
# - docker # Retiré car l'image est spécifiée globalement
|
||||
|
||||
analyse_code:
|
||||
stage: analyse
|
||||
script:
|
||||
- echo "Starting analysis stage..."
|
||||
- echo "Running SonarQube analysis..."
|
||||
- echo "Code analysis completed."
|
||||
needs:
|
||||
- build_application # Ce job dépend du job 'build_application'
|
||||
# tags:
|
||||
# - docker # Retiré car l'image est spécifiée globalement
|
||||
|
||||
deploy_application:
|
||||
stage: deploy
|
||||
script:
|
||||
- echo "Starting deployment stage..."
|
||||
- echo "Application deployed successfully."
|
||||
needs:
|
||||
- analyse_code # Ce job dépend maintenant du job 'analyse_code'
|
||||
# Ce job ne s'exécutera que sur la branche 'main'
|
||||
only:
|
||||
- main
|
||||
# tags:
|
||||
# - docker # Retiré car l'image est spécifiée globalement
|
||||
1
CODEOWNERS
Normal file
1
CODEOWNERS
Normal file
@@ -0,0 +1 @@
|
||||
* @shoko
|
||||
12
CONTRIBUTING.md
Normal file
12
CONTRIBUTING.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# 🤐 Politique de Contribution
|
||||
|
||||
Ce projet est strictement confidentiel et **n'accepte aucune contribution externe**.
|
||||
|
||||
Aucune demande d'accès, pull request ou proposition de modification ne sera acceptée.
|
||||
L'accès au code source est limité aux membres autorisés explicitement par SARL SITECONSEIL.
|
||||
|
||||
Toute tentative d'accès non autorisé ou de diffusion du contenu de ce projet pourra faire l'objet de poursuites légales.
|
||||
|
||||
---
|
||||
|
||||
Pour toute question, veuillez contacter : [s.com@siteconseil.fr]
|
||||
9
LICENSE
Normal file
9
LICENSE
Normal file
@@ -0,0 +1,9 @@
|
||||
Confidentialité : ULTRA SECRÈTE
|
||||
|
||||
Ce projet est strictement confidentiel.
|
||||
|
||||
Tous les droits sont réservés. Aucune partie de ce code, de cette documentation ou de tout autre contenu du projet ne peut être copiée, reproduite, distribuée, modifiée, traduite, transmise ou utilisée, sous quelque forme ou par quelque moyen que ce soit, sans l'autorisation écrite préalable explicite de [VOTRE NOM OU ENTREPRISE].
|
||||
|
||||
Toute utilisation non autorisée est strictement interdite et pourra faire l’objet de poursuites judiciaires.
|
||||
|
||||
© 2025 SARL SITECONSEIL. Tous droits réservés.
|
||||
129
README.md
Normal file
129
README.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# 🌅 Horizon - Application de gestion Esy-Web
|
||||
⚠️ **Confidentialité : ULTRA SECRÈTE**
|
||||
Ce projet est strictement confidentiel. Aucune diffusion, reproduction ou utilisation non autorisée n'est permise.
|
||||
|
||||
---
|
||||
|
||||
📌 **Description**
|
||||
Horizon est une application de gestion complète et centralisée conçue pour orchestrer l’ensemble de l’écosystème Esy-Web. Elle joue un rôle clé dans l’intégration, la maintenance et la supervision des différents services internes et externes.
|
||||
|
||||
## 🚨 Application critique
|
||||
|
||||
> **Horizon est une application critique pour le bon fonctionnement de l’ensemble de l’écosystème Esy-Web.**
|
||||
|
||||
Elle centralise des opérations essentielles telles que :
|
||||
- la supervision des services,
|
||||
- la gestion commerciale,
|
||||
- les accès utilisateurs,
|
||||
- la sécurité des données,
|
||||
- l'intégration avec des tiers (Cloudflare, DocuSign, etc.).
|
||||
|
||||
**Tout dysfonctionnement peut impacter directement la productivité, la conformité légale ou la sécurité des données du groupe.**
|
||||
C’est pourquoi chaque modification, mise à jour ou déploiement doit suivre un processus rigoureux de validation, tests et sauvegardes.
|
||||
|
||||
- **Déploiement uniquement via CI/CD GitLab contrôlé**
|
||||
- **Tests manuels obligatoires en environnement de préproduction**
|
||||
- **Double validation pour les mises en production critiques**
|
||||
- **Sauvegardes automatiques avant tout déploiement**
|
||||
- **Journalisation détaillée des accès et des opérations sensibles**
|
||||
|
||||
|
||||
|
||||
### Responsabilités principales :
|
||||
- Gestion du CMS Esy-Web et des services associés
|
||||
- Gestion de l’infrastructure (serveurs, configurations, supervision)
|
||||
- Gestion de l’intranet pour les ressources internes
|
||||
- Gestion commerciale (facturation, suivi client, prestations)
|
||||
- Sauvegardes automatisées et sécurité des données
|
||||
- API publique sécurisée pour l’interconnexion avec des systèmes tiers
|
||||
- Interface d’intégration avec des outils ou plateformes externes
|
||||
|
||||
Conçue pour être **modulaire**, **sécurisée** et **évolutive**, Horizon est l’outil central de pilotage de la plateforme Esy-Web.
|
||||
|
||||
---
|
||||
|
||||
🛠️ **Technologies utilisées**
|
||||
- **Symfony** (backend PHP)
|
||||
- **Bun** (gestionnaire de paquets JavaScript ultrarapide)
|
||||
- **Docker** (conteneurs de développement et déploiement)
|
||||
- **Terraform** (infrastructure as code)
|
||||
- **Ansible** (automatisation de configuration et de déploiement)
|
||||
- **Shell scripts** (bash/sh) (automatisations et outils système)
|
||||
- **Vault - HashiCorp** (chiffrement et déchiffrement des données sensibles)
|
||||
- **MinIO** (stockage S3 local)
|
||||
- **GitLab** (auto-hébergé pour gestion de code et CI/CD)
|
||||
- **Google Cloud Platform (GCP)** (infrastructure cloud)
|
||||
- **DocuSign** (signatures électroniques)
|
||||
- **Cloudflare** (DNS, DDoS, CDN)
|
||||
|
||||
---
|
||||
|
||||
🔧 **Architecture technique**
|
||||
|
||||
L'architecture d'Horizon repose sur une approche **DevOps centrée sur la sécurité**, la scalabilité, et la modularité :
|
||||
|
||||
- **Back-end** :
|
||||
- Framework Symfony (PHP 8.3)
|
||||
- Conteneurisé avec Docker
|
||||
- Configuration et déploiement automatisés via Ansible et Terraform
|
||||
|
||||
- **Sécurité & Données** :
|
||||
- Chiffrement de bout en bout avec **Vault**
|
||||
- Sauvegardes chiffrées et planifiées
|
||||
- Accès limité par rôles (RBAC)
|
||||
|
||||
- **Stockage** :
|
||||
- Objets et documents via **MinIO** (S3 compatible)
|
||||
- Bases de données sécurisées (PostgreSQL / CloudSQL)
|
||||
|
||||
- **CI/CD & DevOps** :
|
||||
- Pipelines GitLab CI intégrés
|
||||
- Tests automatisés, déploiements blue-green
|
||||
- Scripts shell pour la supervision et la maintenance
|
||||
|
||||
- **API & Interconnexion** :
|
||||
- API REST sécurisée (JWT + OAuth2)
|
||||
- Documentation Swagger hébergée
|
||||
- Accès aux API externes via gateway
|
||||
|
||||
- **Infrastructure** :
|
||||
- Hébergement cloud sur **Google Cloud Platform**
|
||||
- Pare-feux Cloudflare, WAF, CDN actif
|
||||
- Surveillance en temps réel (logs, alertes, santé système)
|
||||
|
||||
---
|
||||
|
||||
🎯 **Fonctionnalités clés**
|
||||
- Authentification sécurisée
|
||||
- Gestion des utilisateurs et des rôles
|
||||
- Tableau de bord personnalisable
|
||||
- Gestion du CMS Esy-Web
|
||||
- Interface intranet
|
||||
- Gestion commerciale (clients, devis, factures)
|
||||
- API publique sécurisée
|
||||
- Sauvegardes automatisées
|
||||
- Supervision des services
|
||||
|
||||
---
|
||||
|
||||
📅 **Version**
|
||||
Aucune version spécifique n’est actuellement définie pour ce projet.
|
||||
|
||||
---
|
||||
|
||||
🌐 **URL**
|
||||
- Application : [https://horizon.esy-web.dev](https://horizon.esy-web.dev)
|
||||
- Documentation API : [https://api-doc.esy-web.dev](https://api-doc.esy-web.dev)
|
||||
- API publique : [https://api.esy-web.dev](https://api.esy-web.dev)
|
||||
|
||||
---
|
||||
|
||||
👤 **Auteur**
|
||||
Développé par l'équipe de direction de **SARL SITECONSEIL**
|
||||
📫 Contact : **Serreau Jovann** – jovann@siteconseil.fr
|
||||
|
||||
---
|
||||
|
||||
📄 **Licence**
|
||||
**Non divulguée – usage restreint.** Toute utilisation extérieure est strictement interdite.
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
|
||||
services:
|
||||
###> doctrine/doctrine-bundle ###
|
||||
database:
|
||||
ports:
|
||||
- "5432"
|
||||
###< doctrine/doctrine-bundle ###
|
||||
|
||||
###> symfony/mailer ###
|
||||
mailer:
|
||||
image: axllent/mailpit
|
||||
ports:
|
||||
- "1025"
|
||||
- "8025"
|
||||
environment:
|
||||
MP_SMTP_AUTH_ACCEPT_ANY: 1
|
||||
MP_SMTP_AUTH_ALLOW_INSECURE: 1
|
||||
###< symfony/mailer ###
|
||||
25
compose.yaml
25
compose.yaml
@@ -1,25 +0,0 @@
|
||||
|
||||
services:
|
||||
###> doctrine/doctrine-bundle ###
|
||||
database:
|
||||
image: postgres:${POSTGRES_VERSION:-16}-alpine
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB:-app}
|
||||
# You should definitely change the password in production
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-app}
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-d", "${POSTGRES_DB:-app}", "-U", "${POSTGRES_USER:-app}"]
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 60s
|
||||
volumes:
|
||||
- database_data:/var/lib/postgresql/data:rw
|
||||
# You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
|
||||
# - ./docker/db/data:/var/lib/postgresql/data:rw
|
||||
###< doctrine/doctrine-bundle ###
|
||||
|
||||
volumes:
|
||||
###> doctrine/doctrine-bundle ###
|
||||
database_data:
|
||||
###< doctrine/doctrine-bundle ###
|
||||
184
docker-compose.yml
Normal file
184
docker-compose.yml
Normal file
@@ -0,0 +1,184 @@
|
||||
services:
|
||||
|
||||
# --- Service PHP ---
|
||||
# Conteneur pour exécuter l'application Symfony (requêtes web)
|
||||
php:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./docker/php/Dockerfile
|
||||
args:
|
||||
# Utilise l'UID/GID de l'hôte pour éviter les problèmes de permissions
|
||||
UID: ${UID:-1000}
|
||||
GID: ${GID:-1000}
|
||||
container_name: ecosplay_php
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- XDEBUG_MODE=coverage
|
||||
volumes:
|
||||
# Monte le code source de l'application dans le conteneur
|
||||
- ./:/srv/app
|
||||
# Monte le socket Docker pour permettre l'exécution de commandes docker depuis le conteneur
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- ./coverage:/opt/phpstorm-coverage
|
||||
depends_on:
|
||||
# S'assure que la base de données et Redis sont démarrés avant PHP
|
||||
- db
|
||||
- redis
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# --- Service Worker pour Symfony Messenger ---
|
||||
# Conteneur dédié à l'exécution des messages en arrière-plan
|
||||
messenger-worker:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./docker/php/Dockerfile
|
||||
args:
|
||||
UID: ${UID:-1000}
|
||||
GID: ${GID:-1000}
|
||||
container_name: ecosplay_messenger_worker
|
||||
restart: unless-stopped
|
||||
# Commande pour lancer le worker. 'async' est le nom du transport par défaut.
|
||||
command: php bin/console messenger:consume async --memory-limit=128M --time-limit=3600
|
||||
volumes:
|
||||
- ./:/srv/app
|
||||
# Monte aussi le socket Docker ici pour la cohérence
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# --- Service Frontend (Bun + Vite) ---
|
||||
# Conteneur pour compiler les assets JS/CSS en développement
|
||||
bun:
|
||||
image: oven/bun:1-slim
|
||||
container_name: ecosplay_bun
|
||||
restart: unless-stopped
|
||||
# Exécute les commandes avec l'utilisateur de l'hôte pour éviter les problèmes de permissions sur node_modules
|
||||
user: "${UID:-1000}:${GID:-1000}"
|
||||
working_dir: /usr/src/app
|
||||
volumes:
|
||||
- ./:/usr/src/app
|
||||
ports:
|
||||
# Port par défaut du serveur de développement Vite
|
||||
- "5173:5173"
|
||||
# Lance le serveur de développement Vite défini dans package.json
|
||||
command: bun run dev
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# --- Service Serveur Web (Caddy) ---
|
||||
# Serveur web moderne qui sert l'application et gère le PHP-FPM
|
||||
caddy:
|
||||
image: caddy:2-alpine
|
||||
container_name: ecosplay_caddy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Mappe le port 8000 de l'hôte au port 80 du conteneur
|
||||
- "8000:80"
|
||||
volumes:
|
||||
# Monte le fichier de configuration de Caddy
|
||||
- ./docker/caddy/Caddyfile:/etc/caddy/Caddyfile
|
||||
# Monte le code source pour servir les fichiers statiques
|
||||
- ./:/srv/app
|
||||
depends_on:
|
||||
- php
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# --- Service Base de Données principale (PostgreSQL) ---
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
container_name: ecosplay_db
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5432:5432"
|
||||
environment:
|
||||
POSTGRES_DB: app_db
|
||||
POSTGRES_USER: symfony_user
|
||||
POSTGRES_PASSWORD: ChangeMeInProd!
|
||||
volumes:
|
||||
# Volume nommé pour la persistance des données
|
||||
- db_data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# --- Service Cache/Messenger (Redis) ---
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: ecosplay_redis
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# --- Service de Test d'Emails (MailHog) ---
|
||||
# Intercepte tous les emails envoyés en développement
|
||||
mailhog:
|
||||
image: mailhog/mailhog:latest
|
||||
container_name: ecosplay_mailhog
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Port 1025 pour le serveur SMTP factice
|
||||
- "1025:1025"
|
||||
# Port 8025 pour l'interface web de MailHog
|
||||
- "8025:8025"
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# --- Service de Stockage Fichiers (MinIO) ---
|
||||
# Fournit une API compatible S3 pour le stockage de fichiers
|
||||
minio:
|
||||
image: minio/minio:RELEASE.2025-02-03T21-03-04Z
|
||||
container_name: ecosplay_minio
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
# Port 9000 pour l'API S3
|
||||
- "9000:9000"
|
||||
# Port 9001 pour la console web de MinIO
|
||||
- "9001:9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: minio_user
|
||||
MINIO_ROOT_PASSWORD: ChangeMeInProd!
|
||||
volumes:
|
||||
# Volume nommé pour la persistance des fichiers
|
||||
- minio_data:/data
|
||||
# Commande pour démarrer MinIO et lancer la console sur le bon port
|
||||
command: server /data --console-address ":9001"
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# --- Service de Gestion des Secrets (HashiCorp Vault) ---
|
||||
vault:
|
||||
image: hashicorp/vault:latest
|
||||
container_name: ecosplay_vault
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8210:8200" # Mappe le port 8210 de l'hôte au port 8200 du conteneur Vault
|
||||
- "8211:8201" # Mappe le port 8210 de l'hôte au port 8200 du conteneur Vault
|
||||
volumes:
|
||||
# Volume pour la persistance des données
|
||||
- vault_data:/vault
|
||||
# Volume pour monter notre fichier de configuration
|
||||
environment:
|
||||
VAULT_DEV_ROOT_TOKEN_ID: myroot
|
||||
VAULT_DEV_LISTEN_ADDRESS: 0.0.0.0:8201
|
||||
VAULT_LOCAL_CONFIG: '{"storage": {"file": {"path": "/vault/file"}}, "listener": [{"tcp": { "address": "0.0.0.0:8200", "tls_disable": true}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": true,"disable_mlock": false}'
|
||||
# Lance Vault en mode serveur avec notre fichier de configuration
|
||||
cap_add:
|
||||
- IPC_LOCK
|
||||
command: "server -dev"
|
||||
networks:
|
||||
- mainframe_network # Assignation au réseau commun
|
||||
|
||||
# Définition des volumes pour la persistance des données
|
||||
volumes:
|
||||
db_data: # Pour la base de données principale de Symfony
|
||||
minio_data: # Pour le stockage de fichiers MinIO
|
||||
vault_data: # Pour les données de HashiCorp Vault
|
||||
|
||||
# Définition des réseaux
|
||||
networks:
|
||||
mainframe_network: # Définition du réseau commun
|
||||
driver: bridge # Le type de driver le plus courant
|
||||
41
docker/caddy/Caddyfile
Normal file
41
docker/caddy/Caddyfile
Normal file
@@ -0,0 +1,41 @@
|
||||
# ./docker/caddy/Caddyfile
|
||||
|
||||
# Nous écoutons sur le port 80 (qui est mappé depuis le port 8000 de l'hôte)
|
||||
:80 {
|
||||
# La racine de votre application Symfony
|
||||
root * /srv/app/public
|
||||
|
||||
# Activation de la compression (optionnel)
|
||||
encode gzip zstd
|
||||
|
||||
# Gère les assets statiques directement (améliore les performances)
|
||||
file_server
|
||||
|
||||
# Passe toutes les requêtes non résolues par file_server à Symfony (index.php)
|
||||
php_fastcgi php:9000 { # 'php' est le nom de votre service PHP dans docker-compose
|
||||
# Transmet les en-têtes X-Forwarded-* reçus de Nginx à PHP-FPM
|
||||
# C'est CRUCIAL pour que Symfony détecte HTTPS
|
||||
env HTTPS on # Simule que la connexion est HTTPS pour PHP
|
||||
env HTTP_X_FORWARDED_PROTO {header.X-Forwarded-Proto} # Récupère le proto original de Nginx
|
||||
env HTTP_X_FORWARDED_HOST {header.X-Forwarded-Host} # Récupère l'hôte original de Nginx
|
||||
env HTTP_X_FORWARDED_PORT {header.X-Forwarded-Port} # Récupère le port original de Nginx
|
||||
env HTTP_X_REAL_IP {header.X-Real-IP} # Récupère l'IP réelle du client (si Nginx la passe)
|
||||
|
||||
# Assurez-vous que l'adresse IP de Nginx est aussi trustée par Symfony
|
||||
# via framework.trusted_proxies dans Symfony.
|
||||
}
|
||||
|
||||
# Journalisation des accès (utile pour le débogage)
|
||||
log {
|
||||
output stdout
|
||||
format json
|
||||
}
|
||||
|
||||
# Configuration des en-têtes CORS pour les requêtes OPTIONS du profiler
|
||||
# Note: Caddy a une directive 'header' mais c'est pour les réponses.
|
||||
# Pour gérer spécifiquement les OPTIONS en tant que preflight, c'est plus direct
|
||||
# de le faire via php_fastcgi si Symfony peut le gérer, ou avec une directive
|
||||
# 'handle' ou 'route' spécifique si Caddy doit répondre directement.
|
||||
# Pour l'instant, faisons confiance à Symfony pour gérer les CORS via NelmioCorsBundle
|
||||
# une fois que le protocole est correct.
|
||||
}
|
||||
90
docker/php/Dockerfile
Normal file
90
docker/php/Dockerfile
Normal file
@@ -0,0 +1,90 @@
|
||||
# Utiliser une image PHP 8.3 FPM (Ubuntu-based)
|
||||
FROM php:8.3-fpm
|
||||
|
||||
# Arguments pour les permissions de fichiers
|
||||
ARG UID
|
||||
ARG GID
|
||||
|
||||
# Mettre à jour et installer les dépendances système requises
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
# Outils de compilation et dépendances pour PHP extensions
|
||||
build-essential \
|
||||
libpq-dev \
|
||||
libzip-dev \
|
||||
libpng-dev \
|
||||
libjpeg-dev \
|
||||
libfreetype6-dev \
|
||||
libwebp-dev \
|
||||
libicu-dev \
|
||||
# Dépendance pour GMP (bibliothèque de développement)
|
||||
libgmp-dev \
|
||||
# Outils généraux
|
||||
zip \
|
||||
unzip \
|
||||
ffmpeg \
|
||||
jq \
|
||||
wget \
|
||||
nodejs \
|
||||
npm \
|
||||
postgresql-client \
|
||||
git \
|
||||
# Nettoyage des listes de paquets pour réduire la taille de l'image
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
# Installer le client HashiCorp Vault
|
||||
ENV VAULT_VERSION=1.17.1
|
||||
RUN wget https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip -O vault.zip && \
|
||||
unzip vault.zip -d /usr/local/bin && \
|
||||
rm vault.zip
|
||||
|
||||
# Installer le client MinIO (mc)
|
||||
RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc && \
|
||||
chmod +x /usr/local/bin/mc
|
||||
|
||||
RUN npm install -g mjml
|
||||
# Configurer et installer les extensions PHP
|
||||
# Utilisation de -j$(nproc) pour paralléliser la compilation et accélérer le build
|
||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
|
||||
&& docker-php-ext-install -j$(nproc) gd pdo pdo_pgsql zip gmp bcmath intl
|
||||
|
||||
# Installer Redis via pecl
|
||||
RUN pecl install redis && docker-php-ext-enable redis
|
||||
|
||||
# Installer Excimer via pecl
|
||||
RUN pecl install excimer && docker-php-ext-enable excimer
|
||||
|
||||
# Configuration et installation de Xdebug
|
||||
# Utilisation de --no-install-recommends pour éviter l'installation de paquets inutiles
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends git \
|
||||
&& mkdir -p /usr/src/php/ext/xdebug \
|
||||
&& git clone https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
|
||||
&& cd /usr/src/php/ext/xdebug \
|
||||
&& phpize \
|
||||
&& ./configure --enable-xdebug \
|
||||
&& make && make install \
|
||||
&& rm -rf /usr/src/php/ext/xdebug \
|
||||
&& apt-get autoremove -y build-essential git \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
RUN echo "zend_extension=xdebug" > /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
|
||||
RUN echo "xdebug.mode=develop,debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
|
||||
&& echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
|
||||
&& echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
|
||||
RUN mkdir -p /opt/phpstorm-coverage && \
|
||||
chmod -R 777 /opt/phpstorm-coverage
|
||||
|
||||
# Installer Composer globalement
|
||||
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||
|
||||
# Créer un utilisateur et un groupe non-root pour l'application
|
||||
# Utilisation de useradd/groupadd pour les systèmes basés sur Debian/Ubuntu
|
||||
RUN groupadd -g $GID appuser && \
|
||||
useradd -u $UID -g appuser -ms /bin/bash appuser
|
||||
|
||||
# Changer pour l'utilisateur non-root
|
||||
USER appuser
|
||||
|
||||
# Définir le répertoire de travail
|
||||
WORKDIR /srv/app
|
||||
1
docker/vault/config.json
Normal file
1
docker/vault/config.json
Normal file
@@ -0,0 +1 @@
|
||||
{"storage": {"file": {"path": "/vault/file"}}, "listener": [{"tcp": { "address": "0.0.0.0:8200", "tls_disable": true}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": true}
|
||||
4
docker/vault/entrypoint.sh
Normal file
4
docker/vault/entrypoint.sh
Normal file
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
# 'exec' remplace le processus du shell par celui de vault, ce qui est une bonne pratique.
|
||||
exec vault server -dev
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Returns the importmap for this application.
|
||||
*
|
||||
* - "path" is a path inside the asset mapper system. Use the
|
||||
* "debug:asset-map" command to see the full list of paths.
|
||||
*
|
||||
* - "entrypoint" (JavaScript only) set to true for any module that will
|
||||
* be used as an "entrypoint" (and passed to the importmap() Twig function).
|
||||
*
|
||||
* The "importmap:require" command can be used to add new entries to this file.
|
||||
*/
|
||||
return [
|
||||
'app' => [
|
||||
'path' => './assets/app.js',
|
||||
'entrypoint' => true,
|
||||
],
|
||||
'@hotwired/stimulus' => [
|
||||
'version' => '3.2.2',
|
||||
],
|
||||
'@symfony/stimulus-bundle' => [
|
||||
'path' => './vendor/symfony/stimulus-bundle/assets/dist/loader.js',
|
||||
],
|
||||
'@hotwired/turbo' => [
|
||||
'version' => '7.3.0',
|
||||
],
|
||||
];
|
||||
71
makefile
Normal file
71
makefile
Normal file
@@ -0,0 +1,71 @@
|
||||
# Makefile pour le projet Symfony e-cosplay-contest
|
||||
|
||||
# --- Configuration ---
|
||||
PHP_EXEC = docker compose exec php
|
||||
CONSOLE = $(PHP_EXEC) php bin/console
|
||||
|
||||
# --- Scripts d'automatisation ---
|
||||
# Note: Ces scripts sont complexes et utilisent '$$' pour échapper le '$' pour Make.
|
||||
|
||||
# --- Commandes Docker ---
|
||||
.PHONY: pull build start stop restart logs logs-php
|
||||
pull: ## Récupère les dernières images docker
|
||||
@docker compose pull
|
||||
build: ## Construit (ou reconstruit) les images docker du projet
|
||||
@docker compose build
|
||||
start: ## Démarre tous les services en mode détaché
|
||||
@docker compose up -d # Ajout de -d pour le mode détaché par défaut
|
||||
stop: ## Arrête tous les services
|
||||
@docker compose down
|
||||
restart: stop start ## Redémarre tous les services
|
||||
logs: ## Affiche les logs de tous les services
|
||||
@docker compose logs -f
|
||||
logs-php: ## Affiche les logs du service PHP
|
||||
@docker compose logs -f php
|
||||
|
||||
|
||||
# --- Commandes d'Initialisation ---
|
||||
init: ## Installation initiale du projet (sans Vault/MinIO)
|
||||
@make pull
|
||||
@make build
|
||||
@make start
|
||||
@make composer-install
|
||||
@sleep 5
|
||||
@make db-create
|
||||
@make migrate
|
||||
|
||||
|
||||
# --- Commandes Symfony & DB ---
|
||||
.PHONY: db-create entity migration migrate composer-install deps
|
||||
db-create: ## Crée la base de données
|
||||
@$(CONSOLE) doctrine:database:create --if-not-exists
|
||||
db-drop: ## Crée la base de données
|
||||
@$(CONSOLE) doctrine:database:drop --force
|
||||
entity: ## Lance la création/mise à jour d'une entité
|
||||
@$(CONSOLE) make:entity
|
||||
migration: ## Génère une nouvelle migration
|
||||
@$(CONSOLE) make:migration
|
||||
migrate: ## Applique les migrations
|
||||
@$(CONSOLE) doctrine:migrations:migrate --no-interaction
|
||||
composer-install: ## Installe les dépendances Composer
|
||||
@$(PHP_EXEC) composer install
|
||||
deps: composer-install ## Alias pour composer-install
|
||||
|
||||
dbtest_add: ## Crée la base de données
|
||||
@$(CONSOLE) doctrine:database:create --env=test
|
||||
dbtest_migrate: ## Crée la base de données
|
||||
@$(CONSOLE) doctrine:migrations:migrate --env=test --no-interaction
|
||||
dbtest_remove: ## Crée la base de données
|
||||
@$(CONSOLE) doctrine:database:drop --env=test --force
|
||||
|
||||
# --- Aide ---
|
||||
.PHONY: help
|
||||
help: ## Affiche cet écran d'aide
|
||||
@echo "Commandes disponibles pour e-cosplay-contest :"
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
gitlab_build:
|
||||
docker build -t tools-registry.esy-web.dev/mainframe/mainframe:php docker/php
|
||||
docker push tools-registry.esy-web.dev/mainframe/mainframe:php
|
||||
30
package.json
Normal file
30
package.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "e-cosplay-contest",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hotwired/stimulus": "^3.0.0",
|
||||
"@symfony/stimulus-bridge": "^3.2.0 || ^4.0.0",
|
||||
"@tailwindcss/postcss": "^4.1.10",
|
||||
"postcss": "^8.5.6",
|
||||
"postcss-scss": "^4.0.9",
|
||||
"rollup-plugin-javascript-obfuscator": "^1.0.4",
|
||||
"sass": "^1.89.2",
|
||||
"vite": "^7.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@grafikart/drop-files-element": "^1.0.9",
|
||||
"@hotwired/turbo": "^8.0.13",
|
||||
"@sentry/browser": "^9.34.0",
|
||||
"@tailwindcss/vite": "^4.1.10",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"tailwindcss": "^4.1.10"
|
||||
}
|
||||
}
|
||||
2
sonar-project.properties
Normal file
2
sonar-project.properties
Normal file
@@ -0,0 +1,2 @@
|
||||
sonar.projectKey=mainframe_mainframe_AZgSDOOmCw8KjT0jogWd
|
||||
sonar.qualitygate.wait=true
|
||||
Reference in New Issue
Block a user