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