money/firefly/ubuntu-old/Dockerfile

108 lines
4.4 KiB
Docker
Executable File

FROM ubuntu:18.10
### APT
RUN apt -y update \
&& DEBIAN_FRONTEND=noninteractive apt -y install tzdata \
&& apt -y install locales language-pack-en-base \
&& echo '127.0.0.1 firefly-iii-domain.com firefly-iii localhost' >> /etc/hosts \
&& apt -y install \
mariadb-server \
nginx \
php-fpm php7.2-mysql php-curl php-gd php-bcmath php-zip php-intl php-mbstring php-xml \
curl \
gcc \
cron \
&& rm /etc/nginx/sites-enabled/default \
&& touch /etc/nginx/sites-available/firefly-iii.conf \
&& ln -s /etc/nginx/sites-available/firefly-iii.conf /etc/nginx/sites-enabled/firefly-iii.conf \
&& openssl dhparam 2048 > /etc/nginx/dhparam.pem \
&& service mysql start && sleep 5 \
&& echo 'FLUSH PRIVILEGES; ' \
'USE mysql; ' \
'UPDATE user SET authentication_string=PASSWORD("pwd") WHERE User='"'"'root'"'"'; ' \
'UPDATE user SET plugin="mysql_native_password" WHERE User='"'"'root'"'"'; ' \
| mysql --user=root mysql || true && echo made user \
&& service mysql stop && sleep 5 \
&& sed 's/^password .*/password = pwd/' /etc/mysql/debian.cnf > /tmp/cnf \
&& mv /tmp/cnf /etc/mysql/debian.cnf \
&& service mysql start && sleep 5 \
&& echo 'create database fireflyiii character set utf8 collate utf8_bin; ' \
'grant all privileges on fireflyiii.* to fireflyiii@localhost identified by '"'"'pwd'"'"'; ' \
| mysql --user=root --password=pwd mysql && echo made fireflyiii
### PHP
RUN service mysql start && sleep 10 \
&& curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer \
&& cd /opt \
&& composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist firefly-iii 4.7.4
COPY ./env /opt/firefly-iii/.env
RUN service mysql start && sleep 10 \
&& cd /opt/firefly-iii \
&& php artisan migrate:refresh --seed \
&& php artisan passport:install \
&& chown -R www-data:www-data /opt/firefly-iii \
&& mkdir -p /run/php
### WAIT
COPY ./pause /xfer/
RUN cd /xfer && gcc main.c -o /xfer/pauser
### CONFIG
COPY ./env /opt/firefly-iii/.env
COPY ./firefly-iii.conf /etc/nginx/sites-enabled/
RUN apt -y autoremove \
&& apt -y purge --auto-remove gcc curl \
&& rm -rf /var/lib/apt \
&& apt clean
### CRON
RUN echo \
'lastback="$(find /mnt/back/ -maxdepth 1 -mindepth 1 | sort | tail -n 1)"; ' \
'mkdir -p $lastback/inc; ' \
'thisback="$lastback/inc/$(date -u +%Y%m%d%H%M)/"; ' \
'rm -rf $thisback; ' \
'mariabackup --backup --target-dir="$thisback" --user root --password=pwd --incremental-basedir $lastback/full; ' \
> /backup-inc.sh \
&& echo \
'set -e; ' \
'service mysql start; ' \
'thisback="/mnt/back/$(date -u +%Y%m%d)"/full; ' \
'mkdir -p $thisback; ' \
'rm -rf "$(dirname "$thisback")"; ' \
'mkdir -p "$(dirname "$thisback")"; ' \
'mariabackup --backup --target-dir="$thisback" --user=root --password=pwd; ' \
> /backup.sh \
&& echo \
'set -e; ' \
'rm -rf /var/lib/mysql-old; ' \
'mkdir -p /mnt/back; ' \
'lastback="$(find /mnt/back/ -maxdepth 1 -mindepth 1 | sort | tail -n 1)"; ' \
'if [ -z "$lastback" ]; then exit 0; fi; ' \
'service mysql stop || true; ' \
'restoring=/tmp/restoring; ' \
'cp -r "${lastback}/full" "$restoring"; ' \
'mariabackup --prepare --target-dir="$restoring" --user=root --password=pwd --apply-log-only || true; ' \
'inc_back="$(find $lastback/inc/ -maxdepth 1 -mindepth 1 | sort | tail -n 1)"; ' \
'echo --- inc restore $inc_back ---; ' \
'mariabackup --prepare --target-dir="$restoring" --user=root --password=pwd --incremental-dir "$inc_back" --apply-log-only || true; ' \
'mv /var/lib/mysql /var/lib/mysql-old; ' \
'mariabackup --copy-back --target-dir="$restoring" --user=root --password=pwd; ' \
'rm -rf "$restoring"; ' \
'chown -R mysql:mysql /var/lib/mysql; ' \
'service mysql start; ' \
> /restore.sh \
&& echo '0 * * * * bash /backup-inc.sh >> /var/log/cronj.log 2>&1' > /etc/cron.d/backups \
&& echo '' >> /etc/cron.d/backups \
&& chmod 0644 /etc/cron.d/backups \
&& crontab /etc/cron.d/backups \
&& touch /var/log/cronj.log
### on enter/exit, rsync to/from /var/lib/mysql and /mnt
ENTRYPOINT true \
&& bash /restore.sh \
&& bash /backup.sh \
&& for s in mysql nginx php7.2-fpm cron; do service $s restart ; done && sleep 10 \
&& exec /xfer/pauser