# Chapitre 3 : Déploiement
## 1. Variables d'environnement
### Développement
```bash
# mobile/.env.development
VITE_API_URL=http://localhost/dolibarr/custom/monmodule/pwa/api.php
```
### Production
```bash
# mobile/.env.production
VITE_API_URL=https://mondomaine.com/custom/monmodule/pwa/api.php
```
## 2. Build de production
```bash
cd mobile
# Installer les dépendances
npm install
# Build de production
npm run build
```
Les fichiers sont générés dans `mobile/dist/`.
## 3. Déployer les fichiers
Copier le contenu de `mobile/dist/` vers `pwa/dist/` :
```bash
# Depuis le dossier mobile/
cp -r dist/* ../pwa/dist/
```
Ou utiliser un script npm :
```json
{
"scripts": {
"build": "vite build",
"deploy": "vite build && cp -r dist/* ../pwa/dist/"
}
}
```
## 4. Structure finale
```
monmodule/
├── pwa/
│ ├── api.php
│ └── dist/
│ ├── index.html
│ └── assets/
│ ├── index-abc123.js
│ └── index-def456.css
└── ...
```
## 5. Configuration serveur
### Apache (.htaccess)
Dans `pwa/dist/.htaccess` :
```apache
RewriteEngine On
RewriteBase /custom/monmodule/pwa/dist/
# Rediriger vers index.html pour le routage React
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
# Cache des assets
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
```
### Nginx
```nginx
location /custom/monmodule/pwa/dist/ {
try_files $uri $uri/ /custom/monmodule/pwa/dist/index.html;
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
```
## 6. Accès à l'application
L'application est accessible à :
```
https://mondomaine.com/custom/monmodule/pwa/dist/
```
## 7. PWA (Progressive Web App)
### Manifest
Créer `public/manifest.json` :
```json
{
"name": "Mon Application",
"short_name": "MonApp",
"description": "Description de l'application",
"start_url": "/custom/monmodule/pwa/dist/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#1976d2",
"icons": [
{
"src": "images/icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "images/icon-512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
```
### Service Worker (optionnel)
Pour le mode offline, utiliser `vite-plugin-pwa` :
```bash
npm install vite-plugin-pwa
```
```javascript
// vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { VitePWA } from 'vite-plugin-pwa';
export default defineConfig({
plugins: [
react(),
VitePWA({
registerType: 'autoUpdate',
manifest: {
name: 'Mon Application',
short_name: 'MonApp',
theme_color: '#1976d2'
}
})
]
});
```
## 8. Checklist de déploiement
- [ ] Variables d'environnement de production configurées
- [ ] Build exécuté sans erreur
- [ ] Fichiers copiés dans pwa/dist/
- [ ] .htaccess configuré (Apache)
- [ ] API accessible (test avec curl)
- [ ] Application accessible dans le navigateur
- [ ] Login fonctionnel
- [ ] HTTPS activé
## 9. Debug en production
### Logs Dolibarr
```php
// Dans un controller
dol_syslog("Debug: " . json_encode($payload), LOG_DEBUG);
```
Les logs sont dans `documents/dolibarr.log`.
### Console navigateur
En production, les erreurs JavaScript sont visibles dans la console du navigateur (F12).
[[:15_training:module9-integration:frontend|← Chapitre précédent]] | [[:15_training:module9-integration:start|Retour au module]] | [[:15_training:module10-fonctionnalites-avancees:start|Module suivant : Fonctionnalités avancées →]]