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 10
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
version 23
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
+
225
−
138
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
+
85
−
88
Options
#!/bin/bash
#=== Informations ================================================================
===
#
#-
B
ackup App (Piwigo, prestashop, nextcloud) database and data files
#=== Informations ================================================================#
#-
Goal: b
ackup 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
#- Licence: GNU Affero General Public License v3.0
#- Usage: vm archive's name will be built with the app's name
#- Note: vm archive's name will be built with the app's name.
#- Warning: sshpass package has to be installed.
#-- File where host user's password is stored during script is runnung:
PSWDFILE
=
".nopaswd"
#--- Example of connexion parameters:
# HOST_NAME='jaguar.ekimia.fr'
# HOST_USER='root'
# HOST_PORT=622
# DB_NAME='piwigo'
# DB_USER='piwigo'
#=== Generic functions ===================================================================#
#- Common to all apps
#=== Functions ===================================================================#
#--- Print script's help/usage:
function
print_help
()
{
echo
"Usage: ./backup_app.sh APP_NAME DB_NAME DB_USER DB_PASSWORD
[
HOST_
NAME HOST_PORT HOST_USER
]"
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
}
@@ -31,11 +25,36 @@ function print_help ()
#--- 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
""
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
}
@@ -46,11 +65,12 @@ function set_app_directories ()
piwigo
)
#-- i=photos/_data/i ; upload=photos/upload
APP_DIR
=
"/var/www/photos"
;
APP_DIRS
=(
"i"
"upload"
)
;
APP_DIRS
=(
"
_data/
i"
"upload"
"local/config"
)
;
;;
prestashop
)
APP_DIR
=
"/var/www/html"
;
APP_DIRS
=(
""
)
;
# See for 1.7 https://devdocs.prestashop.com/1.7/development/architecture/
APP_DIR
=
"/var/www/"
;
APP_DIRS
=(
"shop"
)
;
;;
nextcloud
)
APP_DIR
=
""
;
@@ -60,110 +80,87 @@ function set_app_directories ()
}
#---
Application's files backup
:
function
backup_app_data
()
#---
Set remote user's home directory
:
function
set_host_user_dir
()
{
echo
"***** Backup
$APP_NAME
application data *****"
echo
""
if
[
"
$HOST_USER
"
==
"root"
]
;
then
HOST_USER_DIR
=
"/
${
HOST_USER
}
"
else
HOST_USER_DIR
=
"/home/
${
HOST_USER
}
"
fi
for
APP_DIRI
in
${
APP_DIRS
[*]
}
;
do
ssh
-p
$HOST_PORT
${
HOST_USER
}
@
$HOST_NAME
"cd
${
APP_DIR
}
; tar czf
${
HOST_USER_DIR
}
/
${
APP_NAME
}
_
${
APP_DIRI
}
.tgz
$APP_DIRI
"
done
echo
""
echo
"***** End of
$APP_NAME
backup *****"
}
#--- Application's files backup:
#- Depreciated
function
backup_app_data1
()
function
backup_app_data
()
{
echo
"***** Backup
$APP_NAME
application data *****"
echo
""
case
$APP_NAME
in
piwigo
)
backup_piwigo
;;
prestashop
)
backup_prestashop
;;
nextcloud
)
backup_nextcloud
;;
esac
echo
""
echo
"***** End of
$APP_NAME
backup *****"
}
echo
"*** Build archives
${
APP_NAME
}
*.tgz on remote host
$HOST_NAME
... ***"
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
#--- Database backup:
function
backup_db
()
{
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
echo
"*** Archives built! ***"
}
#--- Download archives files built on remote app server:
function
download_archives
()
{
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
}
#=== Applciation dedicated functions ===================================================================#
#- Functions that depend on the application backuped
#- Depreciated
#-- 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
.
$SSHNOPASS
"rm -f
${
HOST_USER_DIR
}
/
${
APP_NAME
}
*.tgz"
echo
"*** Archives
${
APP_NAME
}
*.tgz downloaded! ***"
#--- Backup prestatshop's data directories:
function
backup_prestashop
()
{
echo
"Start backup_prestashop"
#--- 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
}
; tar czf /
${
HOST_USER
}
/
${
APP_NAME
}
_
${
APP_DATA1
}
.tgz
$APP_DATA1
"
echo
"Archive built!"
#-- Download application's database dump:
#- Database's archive downloaded in backup_db function
}
#---
Backup piwigo's data directories
:
function
backup_
piwigo
()
#---
Database backup
:
function
backup_
db
()
{
#--- 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!"
}
echo
""
echo
"*** Database backup from
$HOST_NAME
to local file
${
DB_NAME
}
.sql ***"
#--- Backup nextcloud's data directories:
function
backup_nextcloud
()
{
echo
"Start backup_piwigo"
echo
"Not implemented"
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
4
)
APP_NAME
=
"
$1
"
;
DB_NAME
=
"
$2
"
;
DB_USER
=
"
$3
"
;
DB_PWD
=
"
$4
"
HOST_NAME
=
'jaguar.ekimia.fr'
;
HOST_PORT
=
622
;
HOST_USER
=
'root'
;
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
;;
7
)
APP_NAME
=
"
$1
"
;
DB_NAME
=
"
$2
"
;
DB_USER
=
"
$3
"
;
DB_PWD
=
"
$4
"
;
HOST_
NAME
=
"
$5
"
;
HOST_PORT
=
"
$6
"
;
HOST_USER
=
"
$
7
"
;
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
;
Loading