Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
compose.libre.sh
Manage
Activity
Members
Labels
Plan
Issues
18
Issue boards
Milestones
Wiki
Code
Merge requests
3
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
libre.sh
compose.libre.sh
Merge requests
!186
WIP: Resolve "Restore from legacy backup"
Code
Review changes
Check out branch
Download
Patches
Plain diff
Open
WIP: Resolve "Restore from legacy backup"
182-restore-from-legacy-backup
into
master
Overview
0
Commits
27
Pipelines
0
Changes
2
Open
Michel Memeteau
requested to merge
182-restore-from-legacy-backup
into
master
5 years ago
Overview
0
Commits
27
Pipelines
0
Changes
2
Expand
Closes
#182
👍
0
👎
0
Merge request reports
Compare
version 8
version 25
2aa5533f
4 years ago
version 24
8b76c40b
5 years ago
version 23
0d540b31
5 years ago
version 22
7982630f
5 years ago
version 21
55172604
5 years ago
version 20
efd17904
5 years ago
version 19
02e9c4e4
5 years ago
version 18
a4d0cb56
5 years ago
version 17
347b908e
5 years ago
version 16
e52c56fc
5 years ago
version 15
88537955
5 years ago
version 14
00b54763
5 years ago
version 13
09e870fa
5 years ago
version 12
f2cdc47f
5 years ago
version 11
9c776c61
5 years ago
version 10
870aa075
5 years ago
version 9
43df4a25
5 years ago
version 8
31a6d4e4
5 years ago
version 7
1dc1cfba
5 years ago
version 6
d5752560
5 years ago
version 5
039e061b
5 years ago
version 4
93eee0cd
5 years ago
version 3
d7f80c0d
5 years ago
version 2
c25853d9
5 years ago
version 1
3f9e425b
5 years ago
master (HEAD)
and
latest version
latest version
ac957df0
27 commits,
4 years ago
version 25
2aa5533f
26 commits,
4 years ago
version 24
8b76c40b
25 commits,
5 years ago
version 23
0d540b31
24 commits,
5 years ago
version 22
7982630f
23 commits,
5 years ago
version 21
55172604
22 commits,
5 years ago
version 20
efd17904
21 commits,
5 years ago
version 19
02e9c4e4
20 commits,
5 years ago
version 18
a4d0cb56
19 commits,
5 years ago
version 17
347b908e
18 commits,
5 years ago
version 16
e52c56fc
17 commits,
5 years ago
version 15
88537955
16 commits,
5 years ago
version 14
00b54763
15 commits,
5 years ago
version 13
09e870fa
14 commits,
5 years ago
version 12
f2cdc47f
13 commits,
5 years ago
version 11
9c776c61
12 commits,
5 years ago
version 10
870aa075
11 commits,
5 years ago
version 9
43df4a25
10 commits,
5 years ago
version 8
31a6d4e4
8 commits,
5 years ago
version 7
1dc1cfba
7 commits,
5 years ago
version 6
d5752560
6 commits,
5 years ago
version 5
039e061b
5 commits,
5 years ago
version 4
93eee0cd
4 commits,
5 years ago
version 3
d7f80c0d
3 commits,
5 years ago
version 2
c25853d9
2 commits,
5 years ago
version 1
3f9e425b
1 commit,
5 years ago
Show latest version
2 files
+
279
−
125
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Files
2
Search (e.g. *.vue) (Ctrl+P)
utils/backup_app.sh
+
134
−
76
Options
#!/bin/bash
#- Backup App (Piwigo) database and data files
#=== Informations ================================================================#
#- Goal: backup App (Piwigo, prestashop, nextcloud) database and data files
#- Author: B. Mauclaire - bm@ekimia.fr - 2019/11/11
#- Author: M. Memeteau - mm@ekimia.fr - 2020/01/01
#- Usage: vm archive's name will be built with the app's name
#--- Manage arguments:
case
$#
in
1
)
APP_NAME
=
"
$1
"
;;
2
)
DB_PWD
=
"
$2
"
;;
*
)
echo
"Usage: ./backup_app.sh APP_NAME DB_PASSWORD"
;
exit
1
;;
esac
#--- Connexion parameters:
HOST_NAME
=
'jaguar.ekimia.fr'
HOST_USER
=
'root'
HOST_PORT
=
622
DB_NAME
=
'piwigo'
DB_USER
=
'piwigo'
#app piwigo directories
APP_DIR
=
'/var/www/photos'
APP_DATA1
=
'i'
;
# photos/_data/i
APP_DATA2
=
'upload'
;
# photos/upload
#app prestashop directories
#- Licence: GNU Affero General Public License v3.0
#- Note: vm archive's name will be built with the app's name.
#- Warning: sshpass package has to be installed.
#
APP_DIR='/var/www/html'
#APP_DATA1=
#
-- File where host user's password is stored during script is runnung:
PSWDFILE
=
".nopasswd"
#app nextcloud directories
#
--- Beginning backup:
#
=== Functions ===================================================================#
#--- Print script's help/usage:
function
print_help
()
{
echo
"Usage: ./backup_app.sh APP_NAME DB_NAME DB_USER DB_PASSWORD HOST_USER_PSWD [HOST_PORT] [HOST_NAME HOST_USER] [DB_ENGINE(mysql/mariadb/pgsql)]"
exit
1
}
function
download_archives
()
#--- Main program tasks:
function
main_proc
()
{
echo
""
echo
"***** Backup
$APP_NAME
application *****"
#-- Manage some variable used by the script:
declare
-a
APP_DIRS
echo
"
$HOST_USER_PSWD
"
>
$PSWDFILE
SSHNOPASS
=
"sshpass -p
`
cat
$PSWDFILE
`
ssh -p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"
#-- Backup:
#testsshnopass
set_host_user_dir
set_app_directories
backup_db
backup_app_data
download_archives
#-- Remove file whith stored password:
rm
-f
./
$PSWDFILE
echo
"Start downloading archive (be patient)..."
scp
-P
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
:/
${
HOST_USER
}
/
${
APP_NAME
}*
.tgz
.
echo
"Archive
${
APP_NAME
}
*.tgz downloaded!"
ssh
-p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"rm -f
${
APP_NAME
}
*.tgz"
#-- db archive download in backup_db
echo
""
echo
"***** End of
$APP_NAME
backup *****"
}
#--- Command for testing not asking ssh connexion password:
function
testsshnopass
()
{
sshpass
-p
`
cat
$PSWDFILE
`
ssh
-p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"ls"
sudo
apt
install
sshpass
-y
}
function
backup_db
()
#--- Set applications' directories to backup:
function
set_app_directories
()
{
#--- Backup database:
echo
"*** Database backup from
$HOST_NAME
to local file
${
DB_NAME
}
.sql ***"
ssh
-p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"mysqldump '"
$DB_NAME
"' -u '"
$DB_USER
"' -p'"
${
DB_PWD
}
"'"
>
${
DB_NAME
}
.sql
echo
"Database dump downloaded!"
#TODO : Pgsql
case
$APP_NAME
in
piwigo
)
#-- i=photos/_data/i ; upload=photos/upload
APP_DIR
=
"/var/www/photos"
;
APP_DIRS
=(
"_data/i"
"upload"
"local/config"
)
;
;;
prestashop
)
# See for 1.7 https://devdocs.prestashop.com/1.7/development/architecture/
APP_DIR
=
"/var/www/"
;
APP_DIRS
=(
"shop"
)
;
;;
nextcloud
)
APP_DIR
=
"/var/www/nextcloud"
;
APP_DIRS
=(
"apps"
"custom_apps"
"config"
"data"
)
;
;;
esac
}
function
backup_prestashop
()
{
echo
"Start backup_prestashop"
#--- Backup data:
echo
"*** App data backup from
$HOST_NAME
to local file
${
DB_NAME
}
.tgz ***"
echo
"Build archive on
$HOST_NAME
..."
ssh
-p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"cd
${
APP_DIR
}
; tar czf /
${
HOST_USER
}
/
${
APP_NAME
}
_
${
APP_DATA1
}
.tgz
$APP_DATA1
"
echo
"Archive built!"
echo
"Start downloading archive (be patient)..."
scp
-P
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
:/
${
HOST_USER
}
/
${
DB_NAME
}*
.tgz
.
echo
"Archive
${
DB_NAME
}
*.tgz downloaded!"
ssh
-p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"rm -f
${
DB_NAME
}
*.tgz"
#--- Set remote user's home directory:
function
set_host_user_dir
()
{
if
[
"
$HOST_USER
"
==
"root"
]
;
then
HOST_USER_DIR
=
"/
${
HOST_USER
}
"
else
HOST_USER_DIR
=
"/home/
${
HOST_USER
}
"
fi
}
function
backup_piwigo
()
#--- Application's files backup:
function
backup_app_data
()
{
echo
"Start backup_piwigo"
echo
"***** Backup
$DB_NAME
application data *****"
echo
""
echo
"*** Build archives
${
APP_NAME
}
*.tgz on remote host
$HOST_NAME
... ***"
#--- Backup data:
echo
"*** App data backup from
$HOST_NAME
to local file
${
APP_NAME
}
.tgz ***"
echo
"Build archive on
$HOST_NAME
..."
ssh
-p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"cd
${
APP_DIR
}
/_data ; tar czf /
${
HOST_USER
}
/
${
APP_NAME
}
_
${
APP_DATA1
}
mages.tgz
$APP_DATA1
"
ssh
-p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"cd
${
APP_DIR
}
; tar czf /
${
HOST_USER
}
/
${
APP_NAME
}
_
${
APP_DATA2
}
.tgz
$APP_DATA2
"
echo
"Archive built!"
#--- End of tasks:
echo
""
echo
"***** End of
$DB_NAME
backup *****"
echo
"Finish backup_piwigo"
for
APP_DIRI
in
${
APP_DIRS
[*]
}
;
do
DIRI_NAME
=
`
echo
"
$APP_DIRI
"
|
sed
-s
's/\//\_/g'
`
echo
"Build archive of directory:
$APP_DIRI
"
$SSHNOPASS
"cd
${
APP_DIR
}
; tar czf
${
HOST_USER_DIR
}
/
${
APP_NAME
}
_
${
DIRI_NAME
}
.tgz
$APP_DIRI
"
done
echo
"*** Archives built! ***"
}
function
backup_nextcloud
()
{
echo
"Start backup_piwigo"
echo
"Not implemented"
#--- Download archives files built on remote app server:
function
download_archives
()
{
#-- Download application's data archive:
echo
""
echo
"*** Start downloading data archives (be patient)... ***"
sshpass
-p
`
cat
$PSWDFILE
`
scp
-P
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
:
${
HOST_USER_DIR
}
/
${
APP_NAME
}*
.tgz
.
#TODO : test if transfer was OK
#$SSHNOPASS "rm -f ${HOST_USER_DIR}/${APP_NAME}*.tgz"
echo
"*** Archives
${
APP_NAME
}
*.tgz downloaded! ***"
#-- Download application's database dump:
#- Database's archive downloaded in backup_db function
}
backup_db
backup_piwigo
download_archives
#--- Database backup:
function
backup_db
()
{
echo
""
echo
"*** Database backup from
$HOST_NAME
to local file
${
DB_NAME
}
.sql ***"
case
$DB_ENGINE
in
"mysql"
|
"mariadb"
)
$SSHNOPASS
"mysqldump '"
$DB_NAME
"' -u '"
$DB_USER
"' -p'"
${
DB_PWD
}
"'"
>
${
DB_NAME
}
.sql
;;
"pgsql"
)
#- !! TO TEST !!
# $SSHNOPASS "PGPASSWORD='"${DB_PWD}"' pg_dump --format=plain--file --create -U '"$DB_USER"' '"$DB_NAME"'" > ${DB_NAME}.sql
$SSHNOPASS
"PGPASSWORD='"
${
DB_PWD
}
"' pg_dump -F p -U '"
$DB_USER
"' '"
$DB_NAME
"'"
>
${
DB_NAME
}
.sql
# pg_dump postgresql://username:password@127.0.0.1:5432/mydatabase
;;
esac
echo
"*** Database dump downloaded! ***"
}
#=== Main program ===================================================================#
#--- Manage arguments:
case
$#
in
5
)
APP_NAME
=
"
$1
"
;
DB_NAME
=
"
$2
"
;
DB_USER
=
"
$3
"
;
DB_PWD
=
"
$4
"
;
HOST_USER_PSWD
=
"
$5
"
HOST_NAME
=
'jaguar.ekimia.fr'
;
HOST_PORT
=
622
;
HOST_USER
=
'root'
;
DB_ENGINE
=
"mysql"
main_proc
;;
6
)
APP_NAME
=
"
$1
"
;
DB_NAME
=
"
$2
"
;
DB_USER
=
"
$3
"
;
DB_PWD
=
"
$4
"
;
HOST_USER_PSWD
=
"
$5
"
;
HOST_PORT
=
"
$6
"
HOST_NAME
=
'jaguar.ekimia.fr'
;
622
;
HOST_USER
=
'root'
;
DB_ENGINE
=
"mysql"
main_proc
;;
8
)
APP_NAME
=
"
$1
"
;
DB_NAME
=
"
$2
"
;
DB_USER
=
"
$3
"
;
DB_PWD
=
"
$4
"
;
HOST_USER_PSWD
=
"
$5
"
;
HOST_PORT
=
"
$6
"
;
HOST_NAME
=
"
$7
"
;
HOST_USER
=
"
$8
"
DB_ENGINE
=
"mysql"
main_proc
;;
9
)
APP_NAME
=
"
$1
"
;
DB_NAME
=
"
$2
"
;
DB_USER
=
"
$3
"
;
DB_PWD
=
"
$4
"
;
HOST_USER_PSWD
=
"
$5
"
;
HOST_PORT
=
"
$6
"
;
HOST_NAME
=
"
$7
"
;
HOST_USER
=
"
$8
"
;
DB_ENGINE
=
"
$9
"
main_proc
;;
*
)
print_help
;
;;
esac
#=== End of script ==================================================================#
Loading