# Installer English Studio sur Namecheap Stellar Plus

## 1. Préparer votre compte cPanel

- Activez HTTPS pour votre domaine et vérifiez son certificat.
- Choisissez **PHP 8.3 ou 8.4** dans « Select PHP Version ». L’application exige au minimum PHP 8.2.
- Activez les extensions : ctype, curl, dom, fileinfo, filter, hash, mbstring, openssl, pcre, PDO, pdo_mysql, session, tokenizer et xml. Plusieurs sont intégrées à PHP.
- Dans les options PHP, réglez `upload_max_filesize=20M` et `post_max_size=25M`. La limite de l’application reste 20 Mo par fichier.
- Activez l’accès SSH / Terminal. Vérifiez avec `php -v` que la commande utilise aussi une version compatible. Si nécessaire, demandez à Namecheap le chemin du binaire PHP correspondant.

Le ZIP comprend les dépendances PHP de production et les ressources compilées : **Composer et Node ne sont pas nécessaires pour cette première installation**. Ils sont utiles pour les futures mises à jour du code et des dépendances.

## 2. Extraire le projet hors du dossier public

Dans le gestionnaire de fichiers, activez l’affichage des fichiers cachés pour voir `.env.example` et `.htaccess`.

Déposez le dossier `english-studio` à cet emplacement :
```text
/home/VOTRE_COMPTE/english-studio/
```

Les fichiers `.env`, `artisan`, `vendor`, `app`, `database` et `storage` restent hors de la racine web.

### Option A — un domaine ou sous-domaine dont vous choisissez la racine

Si cPanel l’autorise, définissez la racine du domaine sur :
```text
/home/VOTRE_COMPTE/english-studio/public
```
Ne la définissez jamais sur le dossier `english-studio` complet. Conservez le fichier `public/index.php` fourni par Laravel.

### Option B — votre domaine principal utilise public_html

Conservez l’application dans `/home/VOTRE_COMPTE/english-studio`.

1. Copiez **uniquement le contenu du dossier public** dans `/home/VOTRE_COMPTE/public_html`, y compris `.htaccess`, `build`, `fonts`, `favicon.svg` et `teacher.png`.
2. Remplacez le `public_html/index.php` copié par le modèle `deployment/namecheap/index.php`.
3. Vérifiez que les deux dossiers sont voisins :
```text
/home/VOTRE_COMPTE/
├── english-studio/       application privée
└── public_html/          contenu de public + index.php adapté
```
Si votre nom de dossier diffère, ajustez la variable `$application` dans ce modèle.

**N’extrayez pas l’application entière dans public_html.** N’utilisez pas `php artisan storage:link` pour les fichiers pédagogiques : ils doivent rester privés.

Les liens du site partent de la racine du domaine. Utilisez un domaine ou sous-domaine dédié, plutôt qu’une installation sous `exemple.com/sous-dossier`.

## 3. Créer la base MySQL

Dans cPanel > MySQL Databases :
1. Créez une base.
2. Créez un utilisateur avec un mot de passe fort.
3. Associez cet utilisateur à la base avec les droits nécessaires.
4. Notez les noms complets préfixés par votre identifiant cPanel.

Dans le Terminal :
```sh
cd /home/VOTRE_COMPTE/english-studio
cp .env.example .env
```
Modifiez `.env` avec les valeurs réelles :
```dotenv
APP_ENV=production
APP_DEBUG=false
APP_URL=https://votre-domaine.com
APP_TIMEZONE=America/Toronto
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=prefixe_base
DB_USERNAME=prefixe_utilisateur
DB_PASSWORD="votre-mot-de-passe"
SESSION_SECURE_COOKIE=true
```
Adaptez le fuseau horaire et `STUDIO_CURRENCY` si nécessaire. Le fuseau des dates dans l’interface est actuellement America/Toronto ; pour une autre zone, adaptez aussi les fonctions de date des fichiers React.

## 4. Initialiser l’application

```sh
php artisan key:generate
php artisan migrate --force
php artisan db:seed --force
php artisan studio:teacher professeur@votre-domaine.com --name="Nom du professeur"
```

La dernière commande vous demande le mot de passe dans le Terminal, de façon masquée. Aucun mot de passe prédéfini n’existe. Choisissez au moins 10 caractères.

Pour une seconde personne autorisée à enseigner, relancez cette commande avec une autre adresse. Tous les comptes professeur disposent des mêmes droits de gestion de la plateforme.

Ne lancez pas `studio:demo` en production.

## 5. Configurer les courriels

Les messages du formulaire de contact sont stockés dans l’espace professeur. La récupération de mot de passe nécessite un serveur SMTP fonctionnel.

Dans cPanel > Email Accounts > Connect Devices, récupérez les paramètres réels de votre boîte :
```dotenv
MAIL_MAILER=smtp
MAIL_HOST=serveur-indique-par-namecheap
MAIL_PORT=587
MAIL_USERNAME=cours@votre-domaine.com
MAIL_PASSWORD="mot-de-passe-de-la-boite"
MAIL_FROM_ADDRESS=cours@votre-domaine.com
MAIL_FROM_NAME="English Studio"
```
Utilisez le port et le mode TLS indiqués par Namecheap. Pour le port 465 en TLS implicite, utilisez `MAIL_SCHEME=smtps`. Pour 587 avec STARTTLS, laissez `MAIL_SCHEME=null`.

Ne publiez jamais le fichier `.env`. Testez « Mot de passe oublié » avec une adresse de test avant ouverture.

## 6. Configurer Vimeo

Dans le compte Vimeo du client :
1. Importez les vidéos.
2. Choisissez une confidentialité permettant la lecture intégrée sans connexion Vimeo des étudiants, par exemple « Embed only » selon votre forfait.
3. Autorisez l’intégration uniquement sur le domaine de votre site.
4. Désactivez les téléchargements si cette option est proposée.
5. Copiez l’URL complète dans la leçon depuis l’espace professeur.

Les liens pris en charge comprennent :
```text
https://vimeo.com/123456789
https://vimeo.com/123456789/ab12cd34
https://player.vimeo.com/video/123456789?h=ab12cd34
```
Ne retirez pas le code de confidentialité d’une vidéo non répertoriée. Le réglage « Private » peut empêcher vos étudiants de lire la vidéo : testez avec un compte étudiant.

Aucune clé API Vimeo n’est nécessaire. Dans cette version, l’importation des vidéos se fait dans Vimeo ; l’association à une leçon se fait dans votre plateforme.

La restriction de domaine complète les permissions du site. Elle ne constitue pas une garantie contre toute copie ou capture d’écran. Vérifiez les options réellement disponibles dans votre abonnement Vimeo.

## 7. Personnaliser et publier vos cours

- Dans `.env`, adaptez `STUDIO_NAME`, `STUDIO_INSTRUCTOR`, `STUDIO_CONTACT_EMAIL`, `STUDIO_CURRENCY` et les trois textes légaux.
- Remplacez la photo d’illustration dans `public/teacher.png` (et dans public_html si vous utilisez l’option B).
- Connectez-vous via `https://votre-domaine.com/connexion`.
- Créez les leçons, les ressources, les devoirs et les examens, puis publiez les niveaux.
- Vérifiez le parcours avec un compte étudiant distinct.

Après modification de `.env` :
```sh
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan studio:check
```

Les dossiers `storage` et `bootstrap/cache` doivent être accessibles en écriture au processus PHP de votre compte. Préférez les permissions adaptées à votre hébergement, généralement dossiers 755 et fichiers 644 ; évitez 777. Protégez `.env` en 600 ou 640 selon le fonctionnement PHP de votre compte.

## 8. Vérifications avant ouverture

- Inscription, connexion et déconnexion.
- Courriel de récupération de mot de passe réellement reçu.
- Nouvel étudiant en attente, activation puis suspension.
- Le niveau 2 inaccessible avant la réussite du niveau 1.
- Lecture Vimeo sur ordinateur et téléphone avec le compte étudiant.
- Lecture d’un audio et téléchargement d’un PDF après connexion.
- Refus d’un lien de ressource sans connexion ou avec un compte suspendu.
- Dépôt d’un devoir, correction du professeur et consultation du retour.
- Examen échoué puis réussi et déblocage du niveau suivant.
- Paiement enregistré et bonne date d’expiration.
- Navigation mobile et liens du footer.
- Informations légales réelles et adresse de contact correcte.

## Sauvegardes et maintenance

Sauvegardez ensemble la base MySQL, `storage/app/private` et la configuration `.env`. Conservez votre clé APP_KEY : la remplacer invalide notamment les sessions et les données chiffrées.

Lors d’une mise à jour, ne remplacez pas `.env`, vos fichiers privés ni vos données. Utilisez un environnement de préparation pour valider les modifications. Si vous modifiez React ou le CSS, exécutez `npm ci && npm run build` sur une machine de développement puis transférez les nouveaux fichiers `public/build`. Avec l’option B, mettez aussi à jour public_html.

Cette livraison a été testée avec SQLite en mémoire et compilée pour la production. La base MySQL réelle, les paramètres Namecheap, le SMTP et les restrictions Vimeo doivent être vérifiés sur votre compte.

## Dépannage rapide

- **Erreur 500** : consultez `storage/logs/laravel.log`, vérifiez PHP, APP_KEY, les paramètres MySQL et les permissions.
- **Erreur 404 sur les pages internes** : vérifiez la présence de `public/.htaccess` ou `public_html/.htaccess` et la racine web.
- **Écran sans styles** : vérifiez que `public/build` est bien copié et qu’aucun fichier `public/hot` ne subsiste.
- **Erreur 419** : vérifiez HTTPS, APP_URL et les cookies ; actualisez la page.
- **Fichier trop volumineux** : vérifiez la limite 20 Mo et les réglages PHP `upload_max_filesize` et `post_max_size`.
- **Vidéo indisponible** : vérifiez le domaine autorisé dans Vimeo et le code de confidentialité du lien.

