Deployer automatiquement AstroJS sur son FTP au 'npm run build'
Kevin Lesieutre Cette configuration permet de déployer automatiquement ton site sur un serveur FTP après chaque build.
## Prérequis
- Un projet Astro fonctionnel
- Accès FTP à ton serveur d'hébergement (nom d'utilisateur, mot de passe, hôte)
## Étape 1 : Installer les dépendances nécessaires
Installe les packages `ftp-deploy` et `dotenv` qui sont nécessaires pour le déploiement FTP et la gestion des variables d'environnement :
```bash
npm install --save-dev ftp-deploy@2.4.7 dotenv
```
## Étape 2 : Créer un fichier de configuration d'environnement
Crée un fichier `.env.local` à la racine de ton projet avec les informations de connexion FTP :
```text
FTP_USER=ton_utilisateur_ftp
FTP_PASSWORD=ton_mot_de_passe_ftp
FTP_HOST=ton_serveur_ftp
FTP_REMOTE_ROOT=/
```
Remplace les valeurs par tes propres informations de connexion FTP.
**Important :** Ajoute `.env.local` à ton fichier `.gitignore` pour éviter de partager tes informations sensibles :
```text
.env.local
```
## Étape 3 : Créer le script de déploiement
Crée un fichier `deploy.cjs` à la racine de ton projet avec le contenu suivant :
```javascript
const FtpDeploy = require('ftp-deploy');
const dotenv = require('dotenv');
// Charger les variables d'environnement depuis .env.local
dotenv.config({ path: '.env.local' });
const ftpDeploy = new FtpDeploy();
const config = {
user: process.env.FTP_USER,
password: process.env.FTP_PASSWORD,
host: process.env.FTP_HOST,
port: 21,
localRoot: __dirname + '/dist/',
remoteRoot: process.env.FTP_REMOTE_ROOT || '/',
include: ['*', '**/*'],
exclude: [],
deleteRemote: false,
forcePasv: true
};
console.log('Démarrage du déploiement FTP...');
console.log(`Serveur: ${config.host}`);
console.log(`Utilisateur: ${config.user}`);
console.log(`Dossier local: ${config.localRoot}`);
console.log(`Dossier distant: ${config.remoteRoot}`);
ftpDeploy.deploy(config)
.then(res => console.log('Déploiement terminé avec succès!'))
.catch(err => {
console.error('Erreur lors du déploiement:', err);
process.exit(1);
});
```
**Note :** Nous utilisons l'extension `.cjs` pour indiquer que c'est un module CommonJS, ce qui est nécessaire si ton projet Astro est configuré avec `"type": "module"` dans le `package.json`.
## Étape 4 : Configurer les scripts dans package.json
Modifie ton fichier `package.json` pour ajouter ou mettre à jour les scripts de build et de déploiement :
```json
{
"scripts": {
"dev": "astro dev",
"build": "astro build && node deploy.cjs",
"preview": "astro preview",
"astro": "astro",
"deploy": "astro build && node deploy.cjs"
}
}
```
Avec cette configuration, tu peux maintenant exécuter `npm run build` ou `npm run deploy` pour construire ton site et le déployer automatiquement sur ton serveur FTP.
## Personnalisation avancée
### Exclure des fichiers du déploiement
Si tu souhaites exclure certains fichiers ou dossiers du déploiement, tu peux les spécifier dans le tableau `exclude` :
```javascript
exclude: [
'.git/**',
'node_modules/**',
'.github/**',
'**/*.map'
]
```
### Nettoyer le serveur distant
Par défaut, le script ne supprime pas les fichiers existants sur le serveur distant. Si tu souhaites que les fichiers qui n'existent plus localement soient également supprimés du serveur, tu peux définir `deleteRemote` sur `true` :
```javascript
deleteRemote: true
```
**Attention :** Utilise cette option avec précaution, car elle supprimera tous les fichiers sur le serveur distant qui ne sont pas présents dans ton build local.
## Dépannage
Si tu rencontres des problèmes de connexion FTP, vérifie les points suivants :
1. Assure-toi que les informations de connexion dans `.env.local` sont correctes
2. Vérifie que ton serveur FTP accepte les connexions externes
3. Si tu es derrière un pare-feu, assure-toi que le port 21 (FTP) est ouvert
### Erreurs de déploiement
Si le déploiement échoue avec des erreurs de permission, vérifie que l'utilisateur FTP a les droits d'écriture sur le dossier distant spécifié.
## Sécurité
- Ne partage jamais ton fichier `.env.local` contenant tes identifiants FTP
- Considère l'utilisation de FTPS (FTP sécurisé) si ton hébergeur le supporte
- Limite les permissions de l'utilisateur FTP au strict nécessaire sur ton serveur