diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..8fce603 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +data/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..adbb97d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +data/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f06f40d..481c262 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,13 @@ -FROM alpine:3.6 +# use edge image for higher client versions +FROM alpine:edge + MAINTAINER Benjamin Böhmke -RUN apk add --no-cache mysql-client postgresql-client postgresql-bdr +RUN apk add --no-cache mysql-client postgresql-client ADD entrypoint.sh /entrypoint.sh +VOLUME /backup/ + ENTRYPOINT ["/entrypoint.sh"] CMD ["app:init"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8fc8322 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,49 @@ +version: "2" + +services: + postgres: + container_name: postgres + image: postgres + environment: + - POSTGRES_PASSWORD=root + restart: always + + postgres_init: + restart: always + image: bboehmke/db-helper + command: "app:init" + volumes: + - ./data/backup:/backup + environment: +# - DEBUG=true + - DB_TYPE=postgresql + - DB_ROOT_PASSWORD=root + - DB_HOST=postgres + - DB_DATABASE=postgres_database + - DB_USER=postgres_database + - DB_PASSWORD=postgres_database + - BACKUP_SCHEDULE=15min + + + mariadb: + container_name: mariadb + image: mariadb + environment: + - MYSQL_ROOT_PASSWORD=root + restart: always + + mysql_init: + restart: always + image: bboehmke/db-helper + command: "app:init" + volumes: + - ./data/backup:/backup + environment: +# - DEBUG=true + - DB_TYPE=mysql + - DB_ROOT_PASSWORD=root + - DB_HOST=mariadb + - DB_DATABASE=mysql_database + - DB_USER=mysql_database + - DB_PASSWORD=mysql_database + - BACKUP_SCHEDULE=15min \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh index fb58397..bb00a7d 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,6 +1,9 @@ #!/bin/sh set -e +if [[ $DEBUG == true ]]; then + set -x +fi case ${DB_TYPE} in postgresql) @@ -87,7 +90,27 @@ postgresql_init() { psql -h$DB_HOST -p $DB_PORT -U$DB_ROOT_USER -tc "GRANT ALL PRIVILEGES ON DATABASE $DB_DATABASE to $DB_USER;" > /dev/null # TODO make this configurable - psql -h$DB_HOST -p $DB_PORT -U$DB_ROOT_USER -d $DB_DATABASE -tc "CREATE EXTENSION pg_trgm;" > /dev/null 2> /dev/null + psql -h$DB_HOST -p $DB_PORT -U$DB_ROOT_USER -d $DB_DATABASE -tc "CREATE EXTENSION pg_trgm;" > /dev/null 2> /dev/null || true +} + +postgresql_auto_backup() { + case ${BACKUP_SCHEDULE} in + 15min|hourly|daily|weekly|monthly) + # create backup dir + mkdir -p /backup + + # create backup script + cat > /etc/periodic/${BACKUP_SCHEDULE}/backup < /backup/${DB_DATABASE}_\${now}.sql.gz +EOF + chmod +x /etc/periodic/${BACKUP_SCHEDULE}/backup + ;; + esac } @@ -121,6 +144,24 @@ mysql_init() { mysql -P $DB_PORT -u$DB_ROOT_USER -p$DB_ROOT_PASSWORD -h$DB_HOST -Bse "GRANT ALL PRIVILEGES ON \`$DB_DATABASE\`.* TO '$DB_USER'@'%';" } +mysql_auto_backup() { + case ${BACKUP_SCHEDULE} in + 15min|hourly|daily|weekly|monthly) + # create backup dir + mkdir -p /backup + + # create backup script + cat > /etc/periodic/${BACKUP_SCHEDULE}/backup < /backup/${DB_DATABASE}_\${now}.sql.gz +EOF + chmod +x /etc/periodic/${BACKUP_SCHEDULE}/backup + ;; + esac +} + case ${1} in app:init|app:clear_init) @@ -137,6 +178,8 @@ case ${1} in postgresql_clear_init ;; esac + + postgresql_auto_backup ;; mysql) @@ -149,8 +192,12 @@ case ${1} in mysql_clear_init ;; esac + + mysql_auto_backup ;; esac + + exec /usr/sbin/crond -f ;; *) exec "$@"