diff --git a/backup.sh b/backup.sh index 7721b8e..9e7b1b3 100755 --- a/backup.sh +++ b/backup.sh @@ -1,12 +1,14 @@ #!/bin/bash +# project name (by default directory name of the compose project) +PROJECT_NAME=nextcloud # backup directory SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" backupDir=${SCRIPT_DIR}/backup # create directories -mkdir -p ${backupDir}/app +mkdir -p ${backupDir}/config mkdir -p ${backupDir}/docker-conf mkdir -p ${backupDir}/data mkdir -p ${backupDir}/db @@ -14,21 +16,22 @@ # current date currentDate=$(date +"%Y-%m-%d_%H-%M-%S") -# backup mysql +# backup database dbFile="${backupDir}/db/${currentDate}.sql" -docker exec $(docker container ls -qf name=nextcloud-database) sh -c 'mysqldump --single-transaction=TRUE --lock-tables --default-character-set=utf8mb4 -uroot -p"${MYSQL_ROOT_PASSWORD}" ${MYSQL_DATABASE}' > ${dbFile} +docker exec $(docker container ls -qf name=${PROJECT_NAME}_database) sh -c 'mysqldump --single-transaction=TRUE --lock-tables --default-character-set=utf8mb4 -uroot -p"${MYSQL_ROOT_PASSWORD}" ${MYSQL_DATABASE}' > ${dbFile} sed -i "/^mysqldump: \\[Warning\\]/d" ${dbFile} tar -cj ${dbFile} -f "${dbFile}.tbz2" rm ${dbFile} -# backup app data as root because of permission problems -sudo tar -C data -I pbzip2 -pc app -f "${backupDir}/app/${currentDate}.tbz2" +# backup nextcloud conf directory as root because of permission problems +docker run --rm -v ${PROJECT_NAME}_app-vol-1:/volume -v "${backupDir}/config":/backup debian:buster-slim bash -c "cd /volume/config && tar -czf /backup/${currentDate}.tar ." &> /dev/null # backup data as root because of permission problems -#sudo tar -C data -I pbzip2 -pc data -f "${backupDir}/data/${currentDate}.tbz2" +docker run --rm -v ${PROJECT_NAME}_data-vol-1:/volume -v "${backupDir}/data":/backup debian:buster-slim bash -c "cd /volume && tar -czf /backup/${currentDate}.tar ." &> /dev/null -# backup config files -tar -pcj nextcloud.conf -f "${backupDir}/docker-conf/${currentDate}.tbz2" +# backup docker config files +tar -pcj nextcloud.conf db.env cloud.env -f "${backupDir}/docker-conf/${currentDate}.tbz2" # delete all files older 30 days find ${backupDir} -iname "*.tbz2" -type f -mtime +10 -exec rm {} \; > /dev/null + diff --git a/docker-compose.yml b/docker-compose.yml index 355421a..c84a20d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,6 @@ - MYSQL_DATABASE=cloud - MYSQL_USER=cloud - NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER} - - NEXTCLOUD_DATA_DIR=/srv/data - REDIS_HOST=redis - TZ=${TZ} - NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_TRUSTED_DOMAINS} @@ -26,7 +25,8 @@ - "database:db" volumes: - app-vol-1:/var/www/html - - ./data/data:/srv/data + - data-vol-1:/var/www/html/data + - ./data/config:/var/www/html/config depends_on: - database - redis @@ -56,7 +56,7 @@ - db.env volumes: - db-vol-1:/var/lib/mysql/ - - ./data/conf/mysql:/etc/mysql/conf.d/:ro + - ./data/mysql:/etc/mysql/conf.d/:ro tmpfs: - /tmp @@ -65,11 +65,11 @@ restart: always cron: - image: nextcloud:fpm-alpine + image: pgollor/nextcloud:app-dev-latest restart: always volumes: - app-vol-1:/var/www/html - - ./data/data:/srv/data + - data-vol-1:/var/www/html/data logging: driver: json-file entrypoint: /cron.sh @@ -80,4 +80,5 @@ volumes: db-vol-1: app-vol-1: + data-vol-1: diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile index 790f292..475afeb 100644 --- a/docker/app/Dockerfile +++ b/docker/app/Dockerfile @@ -13,7 +13,8 @@ smbclient libsmbclient-dev \ libbz2-dev \ libmagickcore-6.q16-6-extra \ - ocrmypdf + ocrmypdf \ + imagemagick ghostscript RUN apt-get clean && rm -rf /var/lib/apt/lists/* RUN pecl install \ smbclient @@ -22,5 +23,6 @@ RUN docker-php-ext-install bz2 RUN docker-php-ext-install bcmath RUN docker-php-ext-enable smbclient +RUN sed -i '/domain="coder".*pattern="PDF"/c\' /etc/ImageMagick-6/policy.xml COPY redis.config.php /usr/src/nextcloud/config/redis.config.php