Skip to content

Commit f41655e

Browse files
committed
first commit
0 parents  commit f41655e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+14480
-0
lines changed

.env

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# In all environments, the following files are loaded if they exist,
2+
# the latter taking precedence over the former:
3+
#
4+
# * .env contains default values for the environment variables needed by the app
5+
# * .env.local uncommitted file with local overrides
6+
# * .env.$APP_ENV committed environment-specific defaults
7+
# * .env.$APP_ENV.local uncommitted environment-specific overrides
8+
#
9+
# Real environment variables win over .env files.
10+
#
11+
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
12+
#
13+
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
14+
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
15+
16+
###> symfony/framework-bundle ###
17+
APP_ENV=dev
18+
APP_SECRET=ed57093ff0c0f5c74d15b176f96d1e66
19+
###< symfony/framework-bundle ###
20+
21+
###> symfony/mailer ###
22+
# MAILER_DSN=smtp://localhost
23+
###< symfony/mailer ###
24+
25+
###> doctrine/doctrine-bundle ###
26+
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
27+
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
28+
#
29+
#DATABASE_URL="sqlite:///%kernel.project_dir%/var/dbsaver.db"
30+
DATABASE_URL="mysql://root:[email protected]:3306/dbsaver?serverVersion=5.7"
31+
#DATABASE_URL="postgresql://db_user:[email protected]:5432/db_name?serverVersion=13&charset=utf8"
32+
###< doctrine/doctrine-bundle ###
33+
34+
###> AWS_S3 ###
35+
AWS_S3_ACCESS_ID="your aws_s3 access id"
36+
AWS_S3_ACCESS_SECRET="your aws_s3 access secret"
37+
AWS_S3_BUCKET_NAME="your aws_s3 bucket name"
38+
AWS_S3_REGION="eu-west-3"
39+
###< AWS S3 ###
40+
41+
BACKUP_LOCAL=1

.gitignore

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
###> symfony/framework-bundle ###
3+
/.env.local
4+
/.env.local.php
5+
/.env.*.local
6+
/config/secrets/prod/prod.decrypt.private.php
7+
/public/bundles/
8+
/var/
9+
/vendor/
10+
###< symfony/framework-bundle ###
11+
12+
###> symfony/phpunit-bridge ###
13+
.phpunit.result.cache
14+
/phpunit.xml
15+
###< symfony/phpunit-bridge ###
16+
17+
###> phpunit/phpunit ###
18+
/phpunit.xml
19+
.phpunit.result.cache
20+
###< phpunit/phpunit ###

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2021 Bastien Loughin
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# DbSaver
2+
3+
![Alt text](./public/images/liste_bases.png?raw=true "Liste des bases de données")
4+
5+
DbSaver est une application réalisée par <b>Bastien LOUGHIN</b>, vous permettant de réaliser des backups quotidiens automatiques (et manuels) pour vos bases de données MySQL.
6+
Vous n'avez qu'à renseigner les identifiants pour accéder aux différentes bases de données, configurer une tâche CRON... et c'est fini.
7+
Les mots de passe seront automatiquement cryptés.
8+
9+
Vous pourrez ensuite grâce à DbSaver accéder aux différents backups de vos bases de données en vous rendant sur l'onglet <b>Backups</b>.
10+
Ceux-ci peuvent être sauvegardés en <b>local</b> ou sur le cloud d'Amazon <b>AWS S3</b>.
11+
12+
/!\ DbSaver sauvegarde uniquement les données stockées dans les bases de données. Les fichiers (uploads clients par exemple) ne sont pas sauvegardés.
13+
14+
# Table des matières
15+
16+
1. [Pré-requis](#preRequis)
17+
2. [Installation](#installation)
18+
3. [Configuration de la tâche CRON](#cron)
19+
4. [Backups en local ou sur AWS S3](#backups)
20+
1. [Local](#backupLocal)
21+
2. [AWS S3](#backupAws)
22+
5. [Utiliser l'application](#app)
23+
6. [Licence](#licence)
24+
25+
26+
## Pré-requis <a name="preRequis"></a>
27+
28+
* PHP 8
29+
* Composer
30+
* Symfony CLI (si vous souhaitez lancer le projet en local)
31+
32+
## Installation <a name="installation"></a>
33+
34+
1. `git clone [email protected]:bastien70/dbsaver.git`
35+
2. `cd dbsaver`
36+
3. Configurez la variable d'environnement dans le fichier `.env` : `DATABASE_URL`.
37+
3. `composer install` (installation des dépendances)
38+
4. `php bin/console app:regenerate-app-secret` (régénération de la clé secrète permettant de crypter les mots de passes de vos bases de données)
39+
5. `php bin/console d:d:c` (création de la base de données)
40+
6. `php bin/console d:s:u -f` (migration des tables)
41+
7. `php bin/console app:make-user` (création de votre compte d'accès)
42+
43+
## Configuration de la tâche CRON <a name="cron"></a>
44+
45+
Configurer une tâche CRON vous servira à lancer automatiquement et à la fréquence désirée, un backup de toutes vos bases de données.
46+
47+
Le fichier responsable de lancer la commande se trouve sur `[projet]/src/Command/BackupCommand.php`
48+
49+
La commande à effectuer pour la lancer est la suivante : `php bin/console app:backup`
50+
51+
Initialisez une tâche CRON sur votre serveur ou PC :
52+
53+
`[chemin vers php] [chemin vers la racine du projet]/bin/console app:backup`
54+
55+
## Backups en local ou sur AWS S3 <a name="backups"></a>
56+
57+
### Local <a name="backupLocal"></a>
58+
59+
L'application est configurée pour sauvegarder les backups en local. Si vous venez d'installer l'application, vous n'avez rien à faire.
60+
Sinon, voici les changements à effectuer :
61+
62+
Ouvrez le fichier `[projet]/config/packages/vich_uploader.yaml`.
63+
64+
Remplacez le contenu par :
65+
66+
```yaml
67+
### UTILISEZ CETTE CONFIGURATION SI VOUS SOUHAITEZ STOCKER LES FICHIERS EN LOCAL ###
68+
vich_uploader:
69+
db_driver: orm
70+
mappings:
71+
backups:
72+
uri_prefix: /files/backups
73+
upload_destination: '%kernel.project_dir%/public/files/backups'
74+
75+
76+
### UTILISEZ CETTE CONFIGURATION SI VOUS SOUHAITEZ STOCKER LES FICHIERS SUR LE CLOUD AWS S3
77+
#vich_uploader:
78+
# db_driver: orm
79+
# storage: gaufrette
80+
# mappings:
81+
# backups:
82+
# uri_prefix: '%uploads_base_url%'
83+
# upload_destination: backup_fs
84+
```
85+
86+
Modifiez également la variable d'environnement `BACKUP_LOCAL` dans le fichier `.env` comme ceci :
87+
`BACKUP_LOCAL=1`
88+
89+
### AWS S3 <a name="backupAws"></a>
90+
91+
Modifiez dans le fichier `.env` les variables d'environnement suivantes pour les faire correspondre à ceux renseignés par AWS S3.
92+
93+
```
94+
###> AWS_S3 ###
95+
AWS_S3_ACCESS_ID="your aws_s3 access id"
96+
AWS_S3_ACCESS_SECRET="your aws_s3 access secret"
97+
AWS_S3_BUCKET_NAME="your aws_s3 bucket name"
98+
AWS_S3_REGION="eu-west-3"
99+
###< AWS S3 ###
100+
```
101+
102+
Modifiez également la variable `BACKUP_LOCAL` comme ceci :
103+
`BACKUP_LOCAL=0`
104+
105+
Ouvrez le fichier `[projet]/config/packages/vich_uploader.yaml`.
106+
107+
Remplacez le contenu par :
108+
109+
```yaml
110+
### UTILISEZ CETTE CONFIGURATION SI VOUS SOUHAITEZ STOCKER LES FICHIERS EN LOCAL ###
111+
#vich_uploader:
112+
# db_driver: orm
113+
# mappings:
114+
# backups:
115+
# uri_prefix: /files/backups
116+
# upload_destination: '%kernel.project_dir%/public/files/backups'
117+
118+
119+
### UTILISEZ CETTE CONFIGURATION SI VOUS SOUHAITEZ STOCKER LES FICHIERS SUR LE CLOUD AWS S3
120+
vich_uploader:
121+
db_driver: orm
122+
storage: gaufrette
123+
mappings:
124+
backups:
125+
uri_prefix: '%uploads_base_url%'
126+
upload_destination: backup_fs
127+
```
128+
129+
## Utiliser l'application <a name="app"></a>
130+
131+
Après avoir déployé l'application sur votre serveur (ou l'avoir lancée en local), accédez à la page de connexion :
132+
Pour l'exemple, le nom de domaine rattaché à l'application sera `127.0.0.1:8000`.
133+
134+
Lancez l'application : `https://127.0.0.1:8000`
135+
Vous serez invité à vous connecter. Entrez les identifiants de votre compte (que vous avez créé avec la commande `php bin/console app:make-user`)
136+
137+
![Alt text](./public/images/authentification.png?raw=true "Authentification")
138+
139+
Vous serez redirigés vers `https://127.0.0.1:8000/dbsaver`
140+
141+
![Alt text](./public/images/accueil.png?raw=true "Accueil")
142+
143+
Pour créer une base de données, cliquez sur l'onglet `Bases de données`, puis sur le bouton `Ajouter une base de données`.
144+
Remplissez les informations de votre base de données et validez.
145+
146+
![Alt text](./public/images/creer_base.png?raw=true "Ajouter une base de données")
147+
148+
Vous aurez dès lors, pour chaque base de données ajoutée, la possibilité de consulter les backups, d'éditer les informations de la base de données,
149+
supprimer la base de données de l'application (ainsi que ses backups),ou lancer un backup manuel.
150+
151+
![Alt text](./public/images/liste_bases.png?raw=true "Liste des bases de données")
152+
153+
Selon la fréquence de votre tâche CRON que vous avez configurée, un backup automatique sera effectué.
154+
155+
Pour accéder aux backups de vos bases, cliquez sur l'onglet `Backups`.
156+
157+
![Alt text](./public/images/liste_backups.png?raw=true "Liste des backups")
158+
159+
Vous aurez la possibilité de supprimer ou télécharger un Backup.
160+
161+
## Licence <a name="licence"></a>
162+
163+
Cette application est protégée par une licence MIT : [LICENCE](LICENSE)

bin/console

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/env php
2+
<?php
3+
4+
use App\Kernel;
5+
use Symfony\Bundle\FrameworkBundle\Console\Application;
6+
7+
if (!is_file(dirname(__DIR__).'/vendor/autoload_runtime.php')) {
8+
throw new LogicException('Symfony Runtime is missing. Try running "composer require symfony/runtime".');
9+
}
10+
11+
require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
12+
13+
return function (array $context) {
14+
$kernel = new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
15+
16+
return new Application($kernel);
17+
};

bin/phpunit

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/usr/bin/env php
2+
<?php
3+
4+
if (!ini_get('date.timezone')) {
5+
ini_set('date.timezone', 'UTC');
6+
}
7+
8+
if (is_file(dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit')) {
9+
define('PHPUNIT_COMPOSER_INSTALL', dirname(__DIR__).'/vendor/autoload.php');
10+
require PHPUNIT_COMPOSER_INSTALL;
11+
PHPUnit\TextUI\Command::main();
12+
} else {
13+
if (!is_file(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php')) {
14+
echo "Unable to find the `simple-phpunit.php` script in `vendor/symfony/phpunit-bridge/bin/`.\n";
15+
exit(1);
16+
}
17+
18+
require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php';
19+
}

composer.json

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
{
2+
"type": "project",
3+
"license": "proprietary",
4+
"minimum-stability": "stable",
5+
"prefer-stable": true,
6+
"require": {
7+
"php": ">=8.0",
8+
"ext-ctype": "*",
9+
"ext-iconv": "*",
10+
"aws/aws-sdk-php": "^3.190",
11+
"composer/package-versions-deprecated": "1.11.99.2",
12+
"doctrine/annotations": "^1.0",
13+
"doctrine/doctrine-bundle": "^2.4",
14+
"doctrine/doctrine-migrations-bundle": "^3.1",
15+
"doctrine/orm": "^2.9",
16+
"easycorp/easyadmin-bundle": "^3.5",
17+
"ifsnop/mysqldump-php": "^2.9",
18+
"knplabs/knp-gaufrette-bundle": "^0.7.1",
19+
"nzo/url-encryptor-bundle": "^6.0",
20+
"phpdocumentor/reflection-docblock": "^5.2",
21+
"sensio/framework-extra-bundle": "^6.1",
22+
"symfony/asset": "5.3.*",
23+
"symfony/console": "5.3.*",
24+
"symfony/dotenv": "5.3.*",
25+
"symfony/expression-language": "5.3.*",
26+
"symfony/flex": "^1.3.1",
27+
"symfony/form": "5.3.*",
28+
"symfony/framework-bundle": "5.3.*",
29+
"symfony/http-client": "5.3.*",
30+
"symfony/intl": "5.3.*",
31+
"symfony/mailer": "5.3.*",
32+
"symfony/mime": "5.3.*",
33+
"symfony/monolog-bundle": "^3.1",
34+
"symfony/notifier": "5.3.*",
35+
"symfony/process": "5.3.*",
36+
"symfony/property-access": "5.3.*",
37+
"symfony/property-info": "5.3.*",
38+
"symfony/proxy-manager-bridge": "5.3.*",
39+
"symfony/runtime": "5.3.*",
40+
"symfony/security-bundle": "5.3.*",
41+
"symfony/serializer": "5.3.*",
42+
"symfony/string": "5.3.*",
43+
"symfony/translation": "5.3.*",
44+
"symfony/twig-bundle": "^5.3",
45+
"symfony/validator": "5.3.*",
46+
"symfony/web-link": "5.3.*",
47+
"symfony/yaml": "5.3.*",
48+
"twig/extra-bundle": "^2.12|^3.0",
49+
"twig/twig": "^2.12|^3.0",
50+
"vich/uploader-bundle": "^1.18"
51+
},
52+
"require-dev": {
53+
"phpunit/phpunit": "^9.5",
54+
"symfony/browser-kit": "^5.3",
55+
"symfony/css-selector": "^5.3",
56+
"symfony/debug-bundle": "^5.3",
57+
"symfony/maker-bundle": "^1.0",
58+
"symfony/phpunit-bridge": "^5.3",
59+
"symfony/stopwatch": "^5.3",
60+
"symfony/var-dumper": "^5.3",
61+
"symfony/web-profiler-bundle": "^5.3"
62+
},
63+
"config": {
64+
"optimize-autoloader": true,
65+
"preferred-install": {
66+
"*": "dist"
67+
},
68+
"sort-packages": true
69+
},
70+
"autoload": {
71+
"psr-4": {
72+
"App\\": "src/"
73+
}
74+
},
75+
"autoload-dev": {
76+
"psr-4": {
77+
"App\\Tests\\": "tests/"
78+
}
79+
},
80+
"replace": {
81+
"symfony/polyfill-ctype": "*",
82+
"symfony/polyfill-iconv": "*",
83+
"symfony/polyfill-php72": "*"
84+
},
85+
"scripts": {
86+
"auto-scripts": {
87+
"cache:clear": "symfony-cmd",
88+
"assets:install %PUBLIC_DIR%": "symfony-cmd"
89+
},
90+
"post-install-cmd": [
91+
"@auto-scripts"
92+
],
93+
"post-update-cmd": [
94+
"@auto-scripts"
95+
]
96+
},
97+
"conflict": {
98+
"symfony/symfony": "*"
99+
},
100+
"extra": {
101+
"symfony": {
102+
"allow-contrib": false,
103+
"require": "5.3.*"
104+
}
105+
}
106+
}

0 commit comments

Comments
 (0)