# Configuration du serveur web pour GeCEP

Ce document explique comment configurer correctement votre serveur web pour exécuter l'application GeCEP.

## Prérequis

- PHP 7.4 ou supérieur
- MySQL 5.7 ou supérieur
- Apache avec mod_rewrite activé
- Extensions PHP : PDO, PDO_MySQL, JSON, Session, MBString, FileInfo

## Configuration Apache

### Option 1 : Utiliser le dossier racine du projet

Si vous utilisez le dossier racine du projet comme DocumentRoot de votre serveur web, les fichiers `.htaccess` fournis s'occuperont de rediriger les requêtes vers le dossier `public/`.

Exemple de configuration VirtualHost :

```apache
<VirtualHost *:80>
    ServerName gecep.local
    DocumentRoot /chemin/vers/gecep
    
    <Directory /chemin/vers/gecep>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/gecep-error.log
    CustomLog ${APACHE_LOG_DIR}/gecep-access.log combined
</VirtualHost>
```

### Option 2 : Utiliser le dossier public comme DocumentRoot (recommandé)

Pour une configuration plus sécurisée, vous pouvez définir le dossier `public/` comme DocumentRoot de votre serveur web. Cela empêchera l'accès direct aux fichiers en dehors du dossier `public/`.

Exemple de configuration VirtualHost :

```apache
<VirtualHost *:80>
    ServerName gecep.local
    DocumentRoot /chemin/vers/gecep/public
    
    <Directory /chemin/vers/gecep/public>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/gecep-error.log
    CustomLog ${APACHE_LOG_DIR}/gecep-access.log combined
</VirtualHost>
```

## Configuration Nginx

Si vous utilisez Nginx au lieu d'Apache, voici un exemple de configuration :

```nginx
server {
    listen 80;
    server_name gecep.local;
    root /chemin/vers/gecep/public;
    
    index index.php index.html;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Ajustez selon votre version de PHP
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    location ~ /\.ht {
        deny all;
    }
    
    location ~ /\.(env|git|config|json|lock|md) {
        deny all;
    }
    
    location ~ ^/(app|config|logs|sql|vendor)/ {
        deny all;
    }
}
```

## Vérification de la configuration

Pour vérifier que votre serveur web est correctement configuré, vous pouvez accéder aux URLs suivantes :

1. `http://votre-domaine/public/test.php` - Affiche des informations détaillées sur la configuration PHP et teste la connexion à la base de données.
2. `http://votre-domaine/public/index.html` - Page de test statique qui devrait être remplacée par l'application PHP.
3. `http://votre-domaine/` - Devrait afficher la page d'accueil de l'application.

## Résolution des problèmes courants

### Erreur 404 - Page non trouvée

Si vous obtenez une erreur 404 lorsque vous accédez à l'application, vérifiez les points suivants :

1. Le module mod_rewrite est-il activé sur votre serveur Apache ?
   ```bash
   sudo a2enmod rewrite
   sudo systemctl restart apache2
   ```

2. La directive AllowOverride est-elle définie sur All dans votre configuration VirtualHost ?

3. Les fichiers .htaccess sont-ils présents à la racine du projet et dans le dossier public/ ?

### Erreur 500 - Erreur interne du serveur

Si vous obtenez une erreur 500, vérifiez les points suivants :

1. Les permissions des fichiers et dossiers sont-elles correctes ?
   ```bash
   sudo chown -R www-data:www-data /chemin/vers/gecep
   sudo chmod -R 755 /chemin/vers/gecep
   ```

2. Les extensions PHP requises sont-elles installées ?
   ```bash
   sudo apt-get install php7.4-mysql php7.4-json php7.4-mbstring php7.4-xml
   sudo systemctl restart apache2
   ```

3. Consultez les logs d'erreur Apache pour plus de détails :
   ```bash
   sudo tail -f /var/log/apache2/error.log
   ```

### Problèmes de connexion à la base de données

Si l'application ne parvient pas à se connecter à la base de données, vérifiez les points suivants :

1. Les informations de connexion dans le fichier .env sont-elles correctes ?
2. L'utilisateur MySQL a-t-il les permissions nécessaires sur la base de données ?
3. Le service MySQL est-il en cours d'exécution ?
   ```bash
   sudo systemctl status mysql
   ```

## Support

Si vous rencontrez des problèmes lors de la configuration du serveur web, veuillez consulter la documentation complète ou contacter l'équipe de support.
