Compare commits
2 Commits
4d6e744c7c
...
fc8e8484bf
| Author | SHA1 | Date | |
|---|---|---|---|
| fc8e8484bf | |||
| 03a473b19d |
152
README.MD
Normal file
152
README.MD
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
# PVNet Backup Tool
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
PVNet Backup Tool est une application en Go conçue pour automatiser les sauvegardes de bases de données SQL et de sites web hébergés sur des serveurs distants via SSH. L'outil permet de sélectionner un hôte à partir d'une configuration SSH, d'exécuter des sauvegardes, et de télécharger les fichiers de sauvegarde localement. Il supporte également la vérification des serveurs Apache.
|
||||||
|
|
||||||
|
## Fonctionnalités
|
||||||
|
|
||||||
|
- **Sélection de l'hôte SSH** : Choisissez parmi une liste d'hôtes configurés pour établir une connexion sécurisée.
|
||||||
|
- **Sauvegarde SQL** : Effectuez des dumps MySQL et téléchargez les fichiers de sauvegarde.
|
||||||
|
- **Sauvegarde de site web** : Téléchargez des répertoires complets de sites web hébergés sur le serveur distant.
|
||||||
|
- **Vérification du serveur Apache** : Option pour vérifier l'état des serveurs Apache.
|
||||||
|
- **Gestion des configurations via Excel** : Utilise un fichier Excel pour gérer les configurations spécifiques à chaque hôte.
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
- **Go** : Assurez-vous que Go est installé sur votre machine. [Télécharger Go](https://golang.org/dl/)
|
||||||
|
- **Fichiers de configuration SSH** : Accès SSH configuré pour les hôtes cibles.
|
||||||
|
- **Fichier `.env`** : Configurations des chemins et paramètres nécessaires.
|
||||||
|
- **Fichier Excel** : Contient les informations nécessaires pour les sauvegardes.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. **Cloner le dépôt**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://canguidev.fr/pvnet.git
|
||||||
|
cd pvnet
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Installer les dépendances**
|
||||||
|
|
||||||
|
Utilisez `go mod` pour installer les dépendances nécessaires.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go mod tidy
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Construire l'application**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go build -o pvnet main.go
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### Fichier `.env`
|
||||||
|
|
||||||
|
Créez un fichier `.env` à la racine du projet avec les variables suivantes :
|
||||||
|
|
||||||
|
```env
|
||||||
|
PATH_SSH=/Users/cangui/.ssh/julien_pvnet
|
||||||
|
PATH_SSH_CONF=/Users/cangui/.ssh/config
|
||||||
|
PATH_FOLDER_EXEL=/Users/cangui/Documents/Dev peso/Golang dev/test.xlsx
|
||||||
|
SHEET_SELECT="julien"
|
||||||
|
```
|
||||||
|
|
||||||
|
- **PATH_SSH** : Chemin vers votre clé SSH.
|
||||||
|
- **PATH_SSH_CONF** : Chemin vers le fichier de configuration SSH.
|
||||||
|
- **PATH_FOLDER_EXEL** : Chemin vers le fichier Excel contenant les configurations de sauvegarde.
|
||||||
|
- **SHEET_SELECT** : Nom de la feuille dans le fichier Excel à utiliser.
|
||||||
|
|
||||||
|
### Fichier Excel
|
||||||
|
|
||||||
|
Le fichier Excel doit contenir les en-têtes suivants :
|
||||||
|
|
||||||
|
- `host` : Nom de l'hôte.
|
||||||
|
- `path_save_sql` : Chemin local où sauvegarder les fichiers SQL.
|
||||||
|
- `path_save_site` : Chemin local où sauvegarder les fichiers du site.
|
||||||
|
- `path_site_serveur` : Chemin sur le serveur où se trouve le site.
|
||||||
|
- `mysql_login` : Nom d'utilisateur MySQL.
|
||||||
|
- `mysql_pasw` : Mot de passe MySQL.
|
||||||
|
- `name_base` : Nom de la base de données.
|
||||||
|
|
||||||
|
**Exemple :**
|
||||||
|
|
||||||
|
| host | path_save_sql | path_save_site | path_site_serveur | mysql_login | mysql_pasw | name_base |
|
||||||
|
|------------|------------------------------|------------------------------|----------------------|-------------|------------|-----------|
|
||||||
|
| example1 | /local/backup/sql/ | /local/backup/site/ | /var/www/html/site1 | user1 | password1 | db1 |
|
||||||
|
| example2 | /local/backup/sql/ | /local/backup/site/ | /var/www/html/site2 | user2 | password2 | db2 |
|
||||||
|
|
||||||
|
## Utilisation
|
||||||
|
|
||||||
|
1. **Exécuter l'application**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./pvnet
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Sélectionner un hôte**
|
||||||
|
|
||||||
|
Une liste d'hôtes configurés sera affichée. Utilisez les flèches pour sélectionner l'hôte désiré et appuyez sur Entrée.
|
||||||
|
|
||||||
|
3. **Choisir une action**
|
||||||
|
|
||||||
|
Après sélection de l'hôte, choisissez l'action à effectuer :
|
||||||
|
|
||||||
|
- **Backup SQL and download** : Effectue une sauvegarde SQL et télécharge le fichier.
|
||||||
|
- **Backup site** : Sauvegarde le site web et télécharge les fichiers.
|
||||||
|
- **Check serveur apache** : Vérifie l'état du serveur Apache.
|
||||||
|
|
||||||
|
4. **Processus de sauvegarde**
|
||||||
|
|
||||||
|
Selon l'action choisie, le programme exécutera les commandes nécessaires sur le serveur distant, effectuera les sauvegardes, et téléchargera les fichiers sur votre machine locale.
|
||||||
|
|
||||||
|
## Structure du Projet
|
||||||
|
|
||||||
|
```
|
||||||
|
pvnet/
|
||||||
|
├── main.go
|
||||||
|
├── .env
|
||||||
|
├── go.mod
|
||||||
|
├── go.sum
|
||||||
|
├── config/
|
||||||
|
│ └── ssh_config
|
||||||
|
├── backups/
|
||||||
|
│ ├── sql/
|
||||||
|
│ └── site/
|
||||||
|
└── excel/
|
||||||
|
└── test.xlsx
|
||||||
|
```
|
||||||
|
|
||||||
|
- **main.go** : Point d'entrée de l'application.
|
||||||
|
- **.env** : Fichier de configuration des chemins et paramètres.
|
||||||
|
- **config/ssh_config** : Fichier de configuration SSH.
|
||||||
|
- **backups/** : Répertoires où les sauvegardes seront stockées.
|
||||||
|
- **excel/test.xlsx** : Fichier Excel contenant les configurations de sauvegarde.
|
||||||
|
|
||||||
|
## Dépendances
|
||||||
|
|
||||||
|
L'application utilise plusieurs packages externes :
|
||||||
|
|
||||||
|
- [`github.com/joho/godotenv`](https://github.com/joho/godotenv) : Pour charger les variables d'environnement depuis le fichier `.env`.
|
||||||
|
- [`github.com/TwiN/go-choice`](https://github.com/TwiN/go-choice) : Pour afficher des choix interactifs dans le terminal.
|
||||||
|
- [`github.com/pkg/sftp`](https://github.com/pkg/sftp) : Pour les transferts de fichiers via SFTP.
|
||||||
|
- Packages internes : `canguidev.fr/pvnet/function` et `canguidev.fr/pvnet/simply-ssh` pour les fonctions personnalisées liées aux opérations SSH et aux manipulations Excel.
|
||||||
|
|
||||||
|
## Contribution
|
||||||
|
|
||||||
|
Les contributions sont les bienvenues ! Veuillez soumettre un pull request ou ouvrir une issue pour proposer des améliorations ou signaler des bugs.
|
||||||
|
|
||||||
|
## Licence
|
||||||
|
|
||||||
|
Ce projet est sous licence [MIT](LICENSE).
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
Pour toute question ou suggestion, veuillez contacter [cangui.dev@exemple.com](mailto:cangui.dev@exemple.com).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Remarque** : Assurez-vous que les chemins spécifiés dans le fichier `.env` et le fichier Excel sont corrects et que les permissions nécessaires sont accordées pour les opérations SSH et SFTP.
|
||||||
@ -7,7 +7,7 @@ import (
|
|||||||
"github.com/xuri/excelize/v2"
|
"github.com/xuri/excelize/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ReadExcel(path string)[]map[string]string {
|
func ReadExcel(path string,sheetSelect string)[]map[string]string {
|
||||||
|
|
||||||
// var sql []string
|
// var sql []string
|
||||||
// var pathSite []string
|
// var pathSite []string
|
||||||
@ -25,18 +25,9 @@ func ReadExcel(path string)[]map[string]string {
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
// Get value from cell by given worksheet name and cell reference.
|
|
||||||
cell, err := f.GetCellValue("julien", "A2")
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
fmt.Println("-------------------------------------")
|
|
||||||
fmt.Println(cell)
|
|
||||||
fmt.Println("-------------------------------------")
|
|
||||||
// Get all the rows in the Sheet1.
|
|
||||||
// Nom de la feuille
|
// Nom de la feuille
|
||||||
sheetName := "julien"
|
sheetName := sheetSelect
|
||||||
|
|
||||||
// Obtenir toutes les lignes
|
// Obtenir toutes les lignes
|
||||||
rows, err := f.GetRows(sheetName)
|
rows, err := f.GetRows(sheetName)
|
||||||
|
|||||||
57
main.go
57
main.go
@ -6,9 +6,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"canguidev.fr/pvnet/function"
|
"canguidev.fr/pvnet/function"
|
||||||
simplyssh "canguidev.fr/pvnet/simply-ssh"
|
simplyssh "canguidev.fr/pvnet/simply-ssh"
|
||||||
"github.com/TwiN/go-choice"
|
"github.com/TwiN/go-choice"
|
||||||
@ -17,21 +15,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
//var path string="/Users/cangui/.ssh/julien_pvnet"
|
|
||||||
///Users/cangui/Documents/Dev peso/Golang dev/test.xlsx
|
|
||||||
err := godotenv.Load()
|
err := godotenv.Load()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error loading .env file")
|
log.Fatal("Error loading .env file")
|
||||||
}
|
}
|
||||||
|
|
||||||
var pathSsh string = os.Getenv("PATH_SSH")
|
var pathSsh string = os.Getenv("PATH_SSH")
|
||||||
var pathConfigSsh = os.Getenv("PATH_SSH_CONF")
|
var pathConfigSsh = os.Getenv("PATH_SSH_CONF")
|
||||||
var pathExcel string = os.Getenv("PATH_FOLDER")
|
var pathExcel string = os.Getenv("PATH_FOLDER_EXEL")
|
||||||
var mysqlUser string
|
var mysqlUser string
|
||||||
var mysqlPswd string
|
var mysqlPswd string
|
||||||
var pathSaveSql string
|
var pathSaveSql string
|
||||||
var nameBase string
|
var nameBase string
|
||||||
|
var sheetSelect string=os.Getenv("SHEET_SELECT")
|
||||||
// Chargement de la liste des hosts du fichier config ssh
|
// Chargement de la liste des hosts du fichier config ssh
|
||||||
d := simplyssh.GetHost(pathConfigSsh)
|
d := simplyssh.GetHost(pathConfigSsh)
|
||||||
var s []string
|
var s []string
|
||||||
@ -41,7 +36,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
// selectionne du host
|
// selectionne du host
|
||||||
choice, index, err := gochoice.Pick(
|
choice, index, err := gochoice.Pick(
|
||||||
"What do you want to do?\nPick:",
|
"Sélectionner un vhost de connection?\nChoix:",
|
||||||
s,
|
s,
|
||||||
)
|
)
|
||||||
selectHost := choice
|
selectHost := choice
|
||||||
@ -87,7 +82,7 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if index == 0 {
|
if index == 0 {
|
||||||
excel := function.ReadExcel(pathExcel)
|
excel := function.ReadExcel(pathExcel,sheetSelect)
|
||||||
// Parcourir les résultats d'Excel
|
// Parcourir les résultats d'Excel
|
||||||
for _, value := range excel {
|
for _, value := range excel {
|
||||||
sessionBackup, err := client.NewSession()
|
sessionBackup, err := client.NewSession()
|
||||||
@ -150,6 +145,50 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if index == 1 {
|
||||||
|
excel := function.ReadExcel(pathExcel,sheetSelect)
|
||||||
|
// Parcourir les résultats d'Excel
|
||||||
|
var pathSaveSite string
|
||||||
|
var serveurPathSite string
|
||||||
|
for _, value := range excel {
|
||||||
|
sessionBackup, err := client.NewSession()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Failed to create session for backup: ", err)
|
||||||
|
}
|
||||||
|
defer sessionBackup.Close()
|
||||||
|
fmt.Println("--------------------------")
|
||||||
|
for key, val := range value {
|
||||||
|
if strings.Compare(val, selectHost) == 1 {
|
||||||
|
switch key {
|
||||||
|
case "path_save_site":
|
||||||
|
pathSaveSite = val
|
||||||
|
case "path_site_serveur":
|
||||||
|
serveurPathSite = val
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("--------------------------")
|
||||||
|
|
||||||
|
fmt.Println("Path save site:", pathSaveSite)
|
||||||
|
fmt.Println("--------------------------")
|
||||||
|
//log.Fatal("stop julien")
|
||||||
|
|
||||||
|
|
||||||
|
sftpClient, err := sftp.NewClient(client)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Erreur connection: ", err)
|
||||||
|
}
|
||||||
|
defer sftpClient.Close()
|
||||||
|
err = simplyssh.DownloadDirectory(sftpClient,serveurPathSite , pathSaveSite)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Erreur lors du téléchargement: ", err)
|
||||||
|
}
|
||||||
|
fmt.Println("Téléchargement terminé")
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
fmt.Println(b.String())
|
fmt.Println(b.String())
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user