diff --git a/db/Dockerfile b/db/Dockerfile new file mode 100644 index 0000000..3d34690 --- /dev/null +++ b/db/Dockerfile @@ -0,0 +1,19 @@ +FROM mariadb:10.5.12 + +ENV MYSQL_ROOT_PASSWORD=secret +ENV MYSQL_USER=username +ENV MYSQL_PASSWORD=password +ENV MYSQL_DATABASE=wordpress + +COPY dump.sh /usr/local/bin/dump.sh +COPY restore.sh /usr/local/bin/restore.sh +COPY bro.cnf /home + +# Install cron +RUN apt-get update && apt-get install -y cron + +RUN chmod +x /usr/local/bin/dump.sh +RUN chmod +x /usr/local/bin/restore.sh + +RUN echo "0 2 * * * /usr/local/bin/dump.sh" | crontab - +RUN echo "30 3 * * 6 /usr/local/bin/backup.sh" | crontab - diff --git a/db/backup.sh b/db/backup.sh new file mode 100755 index 0000000..51c7f84 --- /dev/null +++ b/db/backup.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Run mysqlbackup command +mariabackup --defaults-extra-file=/home/bro.cnf \ + --backup \ + --target-dir=/etc/mysql/conf.d/backup/ diff --git a/db/bro.cnf b/db/bro.cnf new file mode 100644 index 0000000..b408fe2 --- /dev/null +++ b/db/bro.cnf @@ -0,0 +1,11 @@ +[mysqldump] # NEEDED FOR DUMP +user=username +password=password + +[mysql] # NEEDED FOR RESTORE +user=username +password=password + +[mariabackup] +user=root +password=secret diff --git a/db/dump.sh b/db/dump.sh new file mode 100755 index 0000000..2613f80 --- /dev/null +++ b/db/dump.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# Define variables +DB_NAME="wordpress" + +# Set the current date for the dump file +DATE=$(date +"%Y%m%d_%H%M%S") +DUMP_FILE="/etc/mysql/conf.d/dumps/${DB_NAME}_dump_$DATE.sql" + +# Run mysqldump command +mysqldump --defaults-extra-file=/home/bro.cnf "$DB_NAME" > "$DUMP_FILE" diff --git a/db/restore.sh b/db/restore.sh new file mode 100644 index 0000000..4048c60 --- /dev/null +++ b/db/restore.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +backup=$(ls -t1 /etc/mysql/conf.d/backups | head -n 1) + +if [ -z ${backup} ]; then + echo "No Backups found!" +else + mysql --defaults-extra-file=/home/bro.cnf wordpress < /etc/mysql/conf.d/backups/${backup} +fi diff --git a/docker-compose.yml b/docker-compose.yml index 7ddc208..7fdaed5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,3 +3,24 @@ # and compose your stack by running # docker compose up -d ################################################################################ + +version: "2" +services: + data: + build: data + + db: + build: db + volumes_from: + - data + volumes: + - ~/dockerfiles/etc/mysql/conf.d:/etc/mysql/conf.d + + wp: + image: wordpress:5.8.1-php8.0-apache + ports: + - "80:80" + links: + - db:mysql + volumes: + - ~/dockerfiles/wp-content:/var/www/html/wp-content diff --git a/docker-compose.yml-cron-backup b/docker-compose.yml-cron-backup new file mode 100644 index 0000000..6b123bf --- /dev/null +++ b/docker-compose.yml-cron-backup @@ -0,0 +1,20 @@ +version: "2" +services: + data: + build: data + + db: + build: db + volumes_from: + - data + volumes: + - ~/dockerfiles/etc/mysql/conf.d:/etc/mysql/conf.d + + wp: + image: wordpress:5.8.1-php8.0-apache + ports: + - "80:80" + links: + - db:mysql + volumes: + - ~/dockerfiles/wp-content:/var/www/html/wp-content