# 🚀 Guide d'Installation - Système de Gestion Bar/Maquis

## 📋 Prérequis

### Serveur Web
- **PHP** : 8.1 ou supérieur
- **MySQL** : 5.7 ou supérieur (ou MariaDB 10.3+)
- **Web Server** : Apache 2.4+ ou Nginx
- **Composer** : 2.0 ou supérieur
- **Git** : Pour cloner le projet

### Extensions PHP requises
```bash
php-bcmath
php-curl
php-dom
php-fileinfo
php-gd
php-json
php-mbstring
php-mysql
php-opcache
php-pdo
php-tokenizer
php-xml
php-zip
```

## 🔧 Installation étape par étape

### 1. Préparation du serveur

#### Mise à jour du système
```bash
sudo apt update && sudo apt upgrade -y
```

#### Installation des paquets nécessaires
```bash
sudo apt install -y nginx mysql-server php8.1-fpm php8.1-mysql php8.1-xml php8.1-curl php8.1-gd php8.1-mbstring php8.1-zip php8.1-bcmath unzip git
```

#### Installation de Composer
```bash
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```

### 2. Configuration de la base de données

#### Création de la base de données
```bash
sudo mysql -u root -p
```

```sql
CREATE DATABASE egestion CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'egestion_user'@'localhost' IDENTIFIED BY 'VotreMotDePasseSecurise123!';
GRANT ALL PRIVILEGES ON egestion.* TO 'egestion_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

### 3. Déploiement de l'application

#### Cloner le projet
```bash
cd /var/www
sudo git clone https://github.com/votre-repo/egestion.git
sudo chown -R www-data:www-data egestion
sudo chmod -R 755 egestion
```

#### Installation des dépendances
```bash
cd egestion
composer install --optimize-autoloader --no-dev
```

#### Configuration de l'environnement
```bash
cp .env.example .env
nano .env
```

**Configuration `.env` :**
```env
APP_NAME="E-Gestion Bar/Maquis"
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://votre-domaine.com

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=error

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=egestion
DB_USERNAME=egestion_user
DB_PASSWORD=VotreMotDePasseSecurise123!

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
```

#### Génération de la clé d'application
```bash
php artisan key:generate
```

#### Configuration des permissions
```bash
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
```

### 4. Migration et seeding de la base de données

#### Exécution des migrations
```bash
php artisan migrate --force
```

#### Seeding des données initiales
```bash
php artisan db:seed --force
```

#### Optimisation pour la production
```bash
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

### 5. Configuration du serveur web

#### Configuration Nginx

Créer le fichier de configuration :
```bash
sudo nano /etc/nginx/sites-available/egestion
```

**Contenu :**
```nginx
server {
    listen 80;
    server_name votre-domaine.com www.votre-domaine.com;
    root /var/www/egestion/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
```

#### Activation du site
```bash
sudo ln -s /etc/nginx/sites-available/egestion /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

#### Configuration Apache (alternative)

Si vous préférez Apache, créez le fichier :
```bash
sudo nano /etc/apache2/sites-available/egestion.conf
```

**Contenu :**
```apache
<VirtualHost *:80>
    ServerName votre-domaine.com
    ServerAlias www.votre-domaine.com
    DocumentRoot /var/www/egestion/public
    
    <Directory /var/www/egestion/public>
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/egestion_error.log
    CustomLog ${APACHE_LOG_DIR}/egestion_access.log combined
</VirtualHost>
```

### 6. Configuration SSL (HTTPS)

#### Installation de Certbot
```bash
sudo apt install certbot python3-certbot-nginx
```

#### Obtention du certificat SSL
```bash
sudo certbot --nginx -d votre-domaine.com -d www.votre-domaine.com
```

### 7. Configuration de la sécurité

#### Pare-feu
```bash
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable
```

#### Sécurisation de MySQL
```bash
sudo mysql_secure_installation
```

### 8. Configuration des tâches cron

#### Édition du crontab
```bash
sudo crontab -e
```

**Ajouter :**
```cron
* * * * * cd /var/www/egestion && php artisan schedule:run >> /dev/null 2>&1
```

### 9. Sauvegarde automatique

#### Script de sauvegarde
```bash
sudo nano /var/www/egestion/backup.sh
```

**Contenu :**
```bash
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/backups/egestion"
DB_NAME="egestion"
DB_USER="egestion_user"
DB_PASS="VotreMotDePasseSecurise123!"

# Créer le répertoire de sauvegarde
mkdir -p $BACKUP_DIR

# Sauvegarde de la base de données
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/database_$DATE.sql

# Sauvegarde des fichiers uploadés
tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz -C /var/www/egestion storage/app/public

# Supprimer les sauvegardes de plus de 30 jours
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "Sauvegarde terminée : $DATE"
```

#### Rendre le script exécutable
```bash
sudo chmod +x /var/www/egestion/backup.sh
```

#### Ajouter au crontab pour une sauvegarde quotidienne
```bash
sudo crontab -e
```

**Ajouter :**
```cron
0 2 * * * /var/www/egestion/backup.sh >> /var/log/backup.log 2>&1
```

## 🔐 Comptes par défaut

Après l'installation, les comptes suivants sont créés :

### Administrateur
- **Email** : admin@egestion.com
- **Mot de passe** : admin123
- **Rôle** : Administrateur complet

### Manager
- **Email** : manager@egestion.com
- **Mot de passe** : manager123
- **Rôle** : Gestionnaire (accès aux charges et approvisionnements)

### Vendeur
- **Email** : vendeur@egestion.com
- **Mot de passe** : vendeur123
- **Rôle** : Vendeur (ventes et consultation uniquement)

## 🚨 Sécurité post-installation

### 1. Changer les mots de passe par défaut
```bash
php artisan tinker
```

```php
// Changer le mot de passe admin
$admin = \App\Models\Employee::where('email', 'admin@egestion.com')->first();
$admin->update(['password' => bcrypt('NouveauMotDePasseSecurise123!')]);

// Changer le mot de passe manager
$manager = \App\Models\Employee::where('email', 'manager@egestion.com')->first();
$manager->update(['password' => bcrypt('NouveauMotDePasseSecurise123!')]);

// Changer le mot de passe vendeur
$vendeur = \App\Models\Employee::where('email', 'vendeur@egestion.com')->first();
$vendeur->update(['password' => bcrypt('NouveauMotDePasseSecurise123!')]);

exit
```

### 2. Désactiver l'affichage des erreurs
Vérifier que `APP_DEBUG=false` dans le fichier `.env`

### 3. Configuration des logs
```bash
sudo chown -R www-data:www-data /var/www/egestion/storage/logs
sudo chmod -R 775 /var/www/egestion/storage/logs
```

## 🔧 Maintenance

### Mise à jour de l'application
```bash
cd /var/www/egestion
git pull origin main
composer install --optimize-autoloader --no-dev
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
sudo chown -R www-data:www-data storage bootstrap/cache
```

### Surveillance des logs
```bash
# Logs Nginx
sudo tail -f /var/log/nginx/error.log

# Logs Laravel
sudo tail -f /var/www/egestion/storage/logs/laravel.log

# Logs PHP-FPM
sudo tail -f /var/log/php8.1-fpm.log
```

### Monitoring de l'espace disque
```bash
# Vérifier l'espace disque
df -h

# Nettoyer les logs anciens
sudo find /var/log -name "*.log" -mtime +30 -delete
```

## 📞 Support

En cas de problème :
1. Vérifier les logs : `/var/www/egestion/storage/logs/laravel.log`
2. Vérifier les permissions : `ls -la /var/www/egestion/storage/`
3. Tester la base de données : `php artisan tinker`
4. Vérifier la configuration : `php artisan config:show`

## ✅ Checklist de vérification

- [ ] PHP 8.1+ installé
- [ ] MySQL configuré et accessible
- [ ] Composer installé
- [ ] Application déployée
- [ ] Variables d'environnement configurées
- [ ] Base de données migrée et seedée
- [ ] Permissions correctes
- [ ] Serveur web configuré
- [ ] SSL installé
- [ ] Pare-feu configuré
- [ ] Sauvegarde automatique configurée
- [ ] Mots de passe par défaut changés
- [ ] Application accessible via HTTPS

---

**🎉 Félicitations ! Votre système de gestion bar/maquis est maintenant opérationnel !** 