From e87a76539d424edc6822de102888a3f4c80456f7 Mon Sep 17 00:00:00 2001
From: root <root@smtp.picasoft.net>
Date: Thu, 29 Dec 2016 22:28:44 +0100
Subject: [PATCH] Ajout des scripts de sauvegarde BDD

---
 database/Dockerfile~         |  27 -----
 database/README~             |   3 -
 database/Redis/Dockerfile~   |  41 -------
 database/Redis/README~       |   2 -
 database/Redis/runScript.sh~ |   2 -
 database/runScript.sh~       |   1 -
 mysql-backup/Dockerfile      |  13 +++
 mysql-backup/LICENSE         | 202 +++++++++++++++++++++++++++++++++++
 mysql-backup/README.md       |  41 +++++++
 mysql-backup/run.sh          |  82 ++++++++++++++
 postgres-backup              |   1 +
 11 files changed, 339 insertions(+), 76 deletions(-)
 delete mode 100644 database/Dockerfile~
 delete mode 100644 database/README~
 delete mode 100644 database/Redis/Dockerfile~
 delete mode 100644 database/Redis/README~
 delete mode 100755 database/Redis/runScript.sh~
 delete mode 100755 database/runScript.sh~
 create mode 100644 mysql-backup/Dockerfile
 create mode 100644 mysql-backup/LICENSE
 create mode 100644 mysql-backup/README.md
 create mode 100755 mysql-backup/run.sh
 create mode 160000 postgres-backup

diff --git a/database/Dockerfile~ b/database/Dockerfile~
deleted file mode 100644
index 10b950ea..00000000
--- a/database/Dockerfile~
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM ubuntu:14.04
-MAINTAINER Tutum Labs <support@tutum.co>
-
-RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 && \
-    echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.2 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.2.list && \
-    apt-get update && \
-    apt-get install -y --force-yes pwgen mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools && \
-    echo "mongodb-org hold" | dpkg --set-selections && echo "mongodb-org-server hold" | dpkg --set-selections && \
-    echo "mongodb-org-shell hold" | dpkg --set-selections && \
-    echo "mongodb-org-mongos hold" | dpkg --set-selections && \
-    echo "mongodb-org-tools hold" | dpkg --set-selections
-
-VOLUME /data/db
-
-ENV AUTH yes
-ENV STORAGE_ENGINE wiredTiger
-ENV JOURNALING yes
-
-ADD run.sh /run.sh
-ADD set_mongodb_password.sh /set_mongodb_password.sh
-
-RUN chmod +x /run.sh
-RUN chmod +x /set_mongodb_password.sh
-
-EXPOSE 27017 28017
-
-CMD ["/run.sh"]
diff --git a/database/README~ b/database/README~
deleted file mode 100644
index 647a13cd..00000000
--- a/database/README~
+++ /dev/null
@@ -1,3 +0,0 @@
-Ce dockerfile permet de mettre un mot de passe sur la base Mongo via une variable d'environnement (contrairement au build officiel).
-
-Build le dockerfile puis créer le container grâce à runScript.sh
\ No newline at end of file
diff --git a/database/Redis/Dockerfile~ b/database/Redis/Dockerfile~
deleted file mode 100644
index fcec0209..00000000
--- a/database/Redis/Dockerfile~
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Redis Dockerfile
-#
-# https://github.com/dockerfile/redis
-#
-
-# Pull base image.
-FROM ubuntu
-
-# Install Redis.
-RUN \
-apt-get update && \ 
-DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends apt-utils && \
-DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && \
-DEBIAN_FRONTEND=noninteractive apt-get install -y wget build-essential && \ 
-cd /tmp && \
-wget http://download.redis.io/redis-stable.tar.gz && \
-tar xvzf redis-stable.tar.gz && \
-cd redis-stable && \
-make && \
-make install && \
-cp -f src/redis-sentinel /usr/local/bin && \
-mkdir -p /etc/redis && \
-cp -f *.conf /etc/redis && \
-rm -rf /tmp/redis-stable* && \
-sed -i 's/^\(bind .*\)$/# \1/' /etc/redis/redis.conf && \
-sed -i 's/^\(daemonize .*\)$/# \1/' /etc/redis/redis.conf && \
-sed -i 's/^\(dir .*\)$/# \1\ndir \/data/' /etc/redis/redis.conf && \
-sed -i 's/^\(logfile .*\)$/# \1/' /etc/redis/redis.conf
-
-# Define mountable directories.
-VOLUME ["/data"]
-
-# Define working directory.
-WORKDIR /data
-
-# Define default command.
-CMD ["redis-server", "/etc/redis/redis.conf"]
-
-# Expose ports.
-EXPOSE 6379
diff --git a/database/Redis/README~ b/database/Redis/README~
deleted file mode 100644
index 91c07f7e..00000000
--- a/database/Redis/README~
+++ /dev/null
@@ -1,2 +0,0 @@
-Launch build.sh
-Launch make.sh
diff --git a/database/Redis/runScript.sh~ b/database/Redis/runScript.sh~
deleted file mode 100755
index 3b9775a2..00000000
--- a/database/Redis/runScript.sh~
+++ /dev/null
@@ -1,2 +0,0 @@
-docker pull redis
-docker run -d -p 6379:6379 -v /root/redis/data:/data --name redisLatex dockerfile/redislatex redis-server /etc/redis/redis.conf --requirepass iBzVUEOSh0r0j1Gmnfgm
diff --git a/database/runScript.sh~ b/database/runScript.sh~
deleted file mode 100755
index 97188bff..00000000
--- a/database/runScript.sh~
+++ /dev/null
@@ -1 +0,0 @@
-docker run -v /root/mongo/data:/data/db -d --name mongoLatex -p 27017:27017 -p 28017:28017 -e MONGODB_USER="admin" -e MONGODB_DATABASE="sharelatex" -e MONGODB_PASS="KUhaBqf6582Nnwopm7Kp" dockerfile/mongodb
diff --git a/mysql-backup/Dockerfile b/mysql-backup/Dockerfile
new file mode 100644
index 00000000..ae726efb
--- /dev/null
+++ b/mysql-backup/Dockerfile
@@ -0,0 +1,13 @@
+FROM registry.picasoft.net:5000/pica-debian
+MAINTAINER Tutum Labs <support@tutum.co>
+
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends mysql-client cron && \
+    mkdir /backup
+
+ENV CRON_TIME="0 0 * * *" \
+    MYSQL_DB="--all-databases"
+ADD run.sh /run.sh
+VOLUME ["/backup"]
+
+CMD ["/run.sh"]
diff --git a/mysql-backup/LICENSE b/mysql-backup/LICENSE
new file mode 100644
index 00000000..8f71f43f
--- /dev/null
+++ b/mysql-backup/LICENSE
@@ -0,0 +1,202 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/mysql-backup/README.md b/mysql-backup/README.md
new file mode 100644
index 00000000..bf9e75f0
--- /dev/null
+++ b/mysql-backup/README.md
@@ -0,0 +1,41 @@
+# mysql-backup
+
+This image runs mysqldump to backup data using cronjob to folder `/backup`
+
+## Usage:
+
+    docker run -d \
+        --env MYSQL_HOST=mysql.host \
+        --env MYSQL_PORT=27017 \
+        --env MYSQL_USER=admin \
+        --env MYSQL_PASS=password \
+        --volume host.folder:/backup
+        tutum/mysql-backup
+
+Moreover, if you link `tutum/mysql-backup` to a mysql container(e.g. `tutum/mysql`) with an alias named mysql, this image will try to auto load the `host`, `port`, `user`, `pass` if possible.
+
+    docker run -d -p 27017:27017 -p 28017:28017 -e MYSQL_PASS="mypass" --name mysql tutum/mysql
+    docker run -d --link mysql:mysql -v host.folder:/backup tutum/mysql-backup
+
+## Parameters
+
+    MYSQL_HOST      the host/ip of your mysql database
+    MYSQL_PORT      the port number of your mysql database
+    MYSQL_USER      the username of your mysql database
+    MYSQL_PASS      the password of your mysql database
+    MYSQL_DB        the database name to dump. Default: `--all-databases`
+    EXTRA_OPTS      the extra options to pass to mysqldump command
+    CRON_TIME       the interval of cron job to run mysqldump. `0 0 * * *` by default, which is every day at 00:00
+    MAX_BACKUPS     the number of backups to keep. When reaching the limit, the old backup will be discarded. No limit by default
+    INIT_BACKUP     if set, create a backup when the container starts
+    INIT_RESTORE_LATEST if set, restores latest backup
+
+## Restore from a backup
+
+See the list of backups, you can run:
+
+    docker exec tutum-backup ls /backup
+
+To restore database from a certain backup, simply run:
+
+    docker exec tutum-backup /restore.sh /backup/2015.08.06.171901
diff --git a/mysql-backup/run.sh b/mysql-backup/run.sh
new file mode 100755
index 00000000..1116ef3e
--- /dev/null
+++ b/mysql-backup/run.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+
+if [ "${MYSQL_ENV_MYSQL_PASS}" == "**Random**" ]; then
+        unset MYSQL_ENV_MYSQL_PASS
+fi
+
+MYSQL_HOST=${MYSQL_PORT_3306_TCP_ADDR:-${MYSQL_HOST}}
+MYSQL_HOST=${MYSQL_PORT_1_3306_TCP_ADDR:-${MYSQL_HOST}}
+MYSQL_PORT=${MYSQL_PORT_3306_TCP_PORT:-${MYSQL_PORT}}
+MYSQL_PORT=${MYSQL_PORT_1_3306_TCP_PORT:-${MYSQL_PORT}}
+MYSQL_USER=${MYSQL_USER:-${MYSQL_ENV_MYSQL_USER}}
+MYSQL_PASS=${MYSQL_PASS:-${MYSQL_ENV_MYSQL_PASS}}
+
+[ -z "${MYSQL_HOST}" ] && { echo "=> MYSQL_HOST cannot be empty" && exit 1; }
+[ -z "${MYSQL_PORT}" ] && { echo "=> MYSQL_PORT cannot be empty" && exit 1; }
+[ -z "${MYSQL_USER}" ] && { echo "=> MYSQL_USER cannot be empty" && exit 1; }
+[ -z "${MYSQL_PASS}" ] && { echo "=> MYSQL_PASS cannot be empty" && exit 1; }
+
+BACKUP_CMD="mysqldump -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} ${EXTRA_OPTS} ${MYSQL_DB} > /backup/"'${BACKUP_NAME}'
+
+echo "=> Creating backup script"
+rm -f /backup.sh
+cat <<EOF >> /backup.sh
+#!/bin/bash
+MAX_BACKUPS=${MAX_BACKUPS}
+
+BACKUP_NAME=\$(date +\%Y.\%m.\%d.\%H\%M\%S).sql
+
+echo "=> Backup started: \${BACKUP_NAME}"
+if ${BACKUP_CMD} ;then
+    echo "   Backup succeeded"
+else
+    echo "   Backup failed"
+    rm -rf /backup/\${BACKUP_NAME}
+fi
+
+if [ -n "\${MAX_BACKUPS}" ]; then
+    while [ \$(ls /backup -N1 | wc -l) -gt \${MAX_BACKUPS} ];
+    do
+        BACKUP_TO_BE_DELETED=\$(ls /backup -N1 | sort | head -n 1)
+        echo "   Backup \${BACKUP_TO_BE_DELETED} is deleted"
+        rm -rf /backup/\${BACKUP_TO_BE_DELETED}
+    done
+fi
+echo "=> Backup done"
+EOF
+chmod +x /backup.sh
+
+echo "=> Creating restore script"
+rm -f /restore.sh
+cat <<EOF >> /restore.sh
+#!/bin/bash
+echo "=> Restore database from \$1"
+if mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} < \$1 ;then
+    echo "   Restore succeeded"
+else
+    echo "   Restore failed"
+fi
+echo "=> Done"
+EOF
+chmod +x /restore.sh
+
+touch /mysql_backup.log
+tail -F /mysql_backup.log &
+
+if [ -n "${INIT_BACKUP}" ]; then
+    echo "=> Create a backup on the startup"
+    /backup.sh
+elif [ -n "${INIT_RESTORE_LATEST}" ]; then
+    echo "=> Restore lates backup"
+    until nc -z $MYSQL_HOST $MYSQL_PORT
+    do
+        echo "waiting database container..."
+        sleep 1
+    done
+    ls -d -1 /backup/* | tail -1 | xargs /restore.sh
+fi
+
+echo "${CRON_TIME} /backup.sh >> /mysql_backup.log 2>&1" > /crontab.conf
+crontab  /crontab.conf
+echo "=> Running cron job"
+exec cron -f
diff --git a/postgres-backup b/postgres-backup
new file mode 160000
index 00000000..9ee367e9
--- /dev/null
+++ b/postgres-backup
@@ -0,0 +1 @@
+Subproject commit 9ee367e92a2f49eda0e26cb5625fa242d2126667
-- 
GitLab