├── .gitignore ├── client ├── Dockerfile └── README ├── debpkg ├── .gitignore ├── Dockerfile ├── README ├── entrypoint.sh └── run.sh ├── development ├── 1.3 │ ├── Dockerfile │ ├── docker-compose.yml │ └── entrypoint.sh └── 1.4 │ ├── Dockerfile │ ├── docker-compose.yml │ └── entrypoint.sh └── elkarbackup ├── 1.2 ├── Dockerfile ├── docker-compose.yml ├── entrypoint.sh └── postinst └── 1.3 ├── README.md ├── apache ├── Dockerfile ├── README.md ├── elkarbackup.conf ├── entrypoint.sh └── envars.sh ├── build ├── Dockerfile ├── README.md ├── app.php ├── app_dev.php ├── composer.json.docker ├── config.yml.docker ├── entrypoint.sh ├── parameters.yml.docker └── src │ └── Builder.php └── docker-compose.yml /.gitignore: -------------------------------------------------------------------------------- 1 | development/1.3/src 2 | development/1.4/src 3 | -------------------------------------------------------------------------------- /client/Dockerfile: -------------------------------------------------------------------------------- 1 | # SSH service image 2 | # 3 | # Based on the example: 4 | # https://docs.docker.com/engine/examples/running_ssh_service/#run-a-test_sshd-container 5 | # 6 | FROM ubuntu:18.04 7 | 8 | RUN apt-get update && apt-get install -y \ 9 | openssh-server \ 10 | rsync \ 11 | curl 12 | 13 | RUN mkdir /var/run/sshd 14 | 15 | # Password login (disabled) 16 | #RUN echo 'root:elkarbackup' | chpasswd 17 | #RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config 18 | 19 | # SSH login fix. Otherwise user is kicked off after login 20 | RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd 21 | 22 | RUN echo "export ELKARBACKUP_URL=http://elkarbackup" >> /etc/profile 23 | RUN echo "export ELKARBACKUP_USER=root" >> /etc/profile 24 | 25 | 26 | EXPOSE 22 27 | CMD ["/usr/sbin/sshd", "-D"] 28 | -------------------------------------------------------------------------------- /client/README: -------------------------------------------------------------------------------- 1 | # client 2 | 3 | OpenSSH enabled container, with RSync installed. 4 | -------------------------------------------------------------------------------- /debpkg/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | -------------------------------------------------------------------------------- /debpkg/Dockerfile: -------------------------------------------------------------------------------- 1 | # Generate Elkarbackup DEB package using a container 2 | 3 | # docker run -d \ 4 | # -v $(pwd):/export \ 5 | # -e "GIT_REPO=https://github.com/elkarbackup/elkarbackup" 6 | # --name eb-dev \ 7 | # --rm \ 8 | # elkarbackup:deb 9 | # 10 | 11 | FROM ubuntu:20.04 12 | MAINTAINER Xabi Ezpeleta 13 | 14 | # Install required dependencies (git included) 15 | RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install \ 16 | git \ 17 | curl \ 18 | acl \ 19 | lintian \ 20 | fakeroot \ 21 | zip \ 22 | unzip \ 23 | php-cli \ 24 | php-xml \ 25 | && rm -rf /var/lib/apt/lists/* 26 | 27 | COPY entrypoint.sh / 28 | RUN chmod u+x /entrypoint.sh 29 | ENTRYPOINT ["/entrypoint.sh"] 30 | -------------------------------------------------------------------------------- /debpkg/README: -------------------------------------------------------------------------------- 1 | ## Build deb package 2 | 3 | A Docker image to quickly build the Elkarbackup debian package (deb) 4 | 5 | Usage example: 6 | 7 | ```bash 8 | docker run --rm -v $(pwd):/export -e "PHP_VERSION=7" elkarbackup/deb 9 | ``` 10 | 11 | - `-v :/export`: the directory where the deb file will be created, i.e.: $(pwd) for current directory 12 | - `-e "GIT_REPO="`: defaults to elkarbackup repository. It can be useful if you can specify your own clone repo. 13 | - `-e "PHP_VERSION=[5|7]"` defaults to PHP_VERSION=5 14 | 15 | After running the above command, the deb package will be created in the "/build" 16 | directory 17 | 18 | -------------------------------------------------------------------------------- /debpkg/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | # Environment variables: 5 | # - $GIT_REPO 6 | # Defaults to https://github.com/elkarbackup/elkarbackup.git 7 | # You can use this variable to specify your own Elkarbackup clone 8 | # repository URL 9 | # Add "-b " if you want to select a custom branch. Example: 10 | # REPO="https://github.com/xezpeleta/elkarbackup.git -b fix-issue-79" 11 | 12 | DATA_DIR="/data/elkarbackup" 13 | EXPORT_DIR="/export" 14 | 15 | mkdir -p "$DATA_DIR" && cd "$DATA_DIR/.." 16 | 17 | # Select version 18 | if [ -z "$GIT_REPO" ];then 19 | GIT_REPO="https://github.com/elkarbackup/elkarbackup.git" 20 | echo "Version not specified. Using current Elkarbackup git repo: $GIT_REPO" 21 | else 22 | echo "Selected git repo: $GIT_REPO" 23 | fi 24 | 25 | echo "Git clone..." 26 | git clone $GIT_REPO 27 | 28 | cd $DATA_DIR 29 | ./bootstrap.sh 30 | ./makepackage.sh 31 | 32 | DEB_FILE=`ls *deb` 33 | 34 | mkdir -p "$EXPORT_DIR/build" 35 | mv "$DEB_FILE" "$EXPORT_DIR/build/" 36 | 37 | ## Set correct permissions 38 | if [ ! -z "$UID" ]; 39 | then 40 | chown -R "$UID" "$EXPORT_DIR/build" 41 | fi 42 | 43 | if [ ! -z "$GID" ]; 44 | then 45 | chgrp -R "$GID" "$EXPORT_DIR/build" 46 | fi 47 | -------------------------------------------------------------------------------- /debpkg/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | docker run --rm --name ebname \ 4 | -v $(pwd):/export \ 5 | -e UID=$(id -u) \ 6 | -e GID=$(id -g) \ 7 | -e "GIT_REPO=https://github.com/elkarbackup/elkarbackup.git" \ 8 | elkarbackup/deb:latest 9 | -------------------------------------------------------------------------------- /development/1.3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | MAINTAINER Xabi Ezpeleta 3 | 4 | # Install required dependencies 5 | RUN apt-get update && apt-get install -y \ 6 | apache2 \ 7 | php \ 8 | mysql-client \ 9 | rsnapshot \ 10 | zip \ 11 | php-mysql \ 12 | php-xml \ 13 | libapache2-mod-php \ 14 | curl \ 15 | acl \ 16 | bzip2 \ 17 | git \ 18 | wget \ 19 | sudo \ 20 | && rm -rf /var/lib/apt/lists/* 21 | 22 | 23 | 24 | COPY entrypoint.sh / 25 | RUN chmod u+x /entrypoint.sh 26 | ENTRYPOINT ["/entrypoint.sh"] 27 | 28 | VOLUME /usr/local/elkarbackup 29 | VOLUME /var/spool/elkarbackup 30 | 31 | EXPOSE 80 32 | EXPOSE 443 33 | -------------------------------------------------------------------------------- /development/1.3/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | db: 6 | image: mysql:5.7 7 | environment: 8 | MYSQL_ROOT_PASSWORD: example 9 | 10 | elkarbackupdev: 11 | image: elkarbackup/development 12 | #build: . 13 | ports: 14 | - 80:80 15 | - 443:443 16 | links: 17 | - db 18 | depends_on: 19 | - db 20 | environment: 21 | EB_DB_PASSWORD: example 22 | EB_PATH: /usr/local/elkarbackup 23 | # Download the current development version from GitHub 24 | EB_VERSION: dev 25 | # You can use your fork instead 26 | #EB_VERSION: "https://github.com/binovo/elkarbackup.git -b Multiple_locations_#149" 27 | # You also can use a custom version (i.e. for testing purposes) 28 | #EB_VERSION: v1.2.7 29 | #EB_INSTALLER: https://raw.githubusercontent.com/elkarbackup/elkarbackup/master/install/eb-installer.sh 30 | #volumes: 31 | # Optional: use a persistent volume so that you can 32 | # edit them from your host. 33 | #- ./src:/usr/local/elkarbackup 34 | -------------------------------------------------------------------------------- /development/1.3/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | if [ ! -n "${MYSQL_ROOT_PASSWORD}" ] && [ ! -n "${EB_DB_PASSWORD}" ] ;then 4 | echo >&2 'error: unknown database root password' 5 | echo >&2 ' You need to specify MYSQL_ROOT_PASSWORD or EB_DB_PASSWORD' 6 | exit 1 7 | fi 8 | 9 | # Check database connection 10 | until mysqladmin ping -h "${EB_DB_HOST:=db}" --silent; do 11 | >&2 echo "MySQL is unavailable - sleeping" 12 | sleep 1 13 | done 14 | 15 | EB_PATH=${EB_PATH:=/usr/local/elkarbackup} 16 | EB_INSTALLER=${EB_INSTALLER:=https://raw.githubusercontent.com/elkarbackup/elkarbackup/master/install/eb-installer.sh} 17 | 18 | if [ ! -d "$EB_PATH/app" ];then 19 | bash -c "$(curl -s $EB_INSTALLER)" -s \ 20 | -v "${EB_VERSION:=dev}" \ 21 | -h "${MYSQL_HOST:=db}" \ 22 | -u "${MYSQL_EB_USER:=elkarbackup}" \ 23 | -p "${MYSQL_EB_PASSWORD:=elkarbackup}" \ 24 | -U "${EB_DB_USERPASSWORD:=root}" \ 25 | -P "${EB_DB_PASSWORD:=example}" \ 26 | -y \ 27 | -d 28 | echo "Restarting apache..." 29 | service apache2 stop 30 | 31 | #Workaround to fix permissions issues (don't do that outside a container) 32 | cd $EB_PATH 33 | sed -i '7s/^/umask(000);\n/' app/console 34 | sed -i '6s/^/umask(000);\n/' web/app.php 35 | sed -i '10s/^/umask(000);\n/' web/app_dev.php 36 | $EB_PATH/app/console cache:clear --env=prod 37 | 38 | # Create default backup storage dir 39 | # TODO: make this configurable with a app/console elkarbackup: 40 | mkdir /var/spool/elkarbackup/backups 41 | setfacl -Rm u:elkarbackup:rwx /var/spool/elkarbackup 42 | setfacl -Rm u:www-data:rx /var/spool/elkarbackup/backups 43 | fi 44 | 45 | # Delete apache pid file (https://github.com/docker-library/php/issues/53) 46 | if [ -f /run/apache2/apache2.pid ]; then 47 | rm -f /run/apache2/apache2.pid 48 | fi 49 | /usr/sbin/cron && /usr/sbin/apache2ctl -D FOREGROUND 50 | -------------------------------------------------------------------------------- /development/1.4/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | MAINTAINER Xabi Ezpeleta 3 | 4 | # Install required dependencies 5 | RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ 6 | apache2 \ 7 | php \ 8 | mysql-client \ 9 | rsnapshot \ 10 | zip \ 11 | php-mysql \ 12 | php-xml \ 13 | libapache2-mod-php \ 14 | curl \ 15 | acl \ 16 | bzip2 \ 17 | git \ 18 | wget \ 19 | sudo \ 20 | && rm -rf /var/lib/apt/lists/* 21 | 22 | 23 | 24 | COPY entrypoint.sh / 25 | RUN chmod u+x /entrypoint.sh 26 | ENTRYPOINT ["/entrypoint.sh"] 27 | 28 | VOLUME /usr/local/elkarbackup 29 | VOLUME /var/spool/elkarbackup 30 | 31 | EXPOSE 80 32 | EXPOSE 443 33 | -------------------------------------------------------------------------------- /development/1.4/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | db: 6 | image: mysql:5.7 7 | environment: 8 | MYSQL_ROOT_PASSWORD: example 9 | 10 | elkarbackupdev: 11 | #image: elkarbackup/development 12 | build: . 13 | ports: 14 | - 8080:80 15 | - 8443:443 16 | links: 17 | - db 18 | depends_on: 19 | - db 20 | environment: 21 | EB_DB_PASSWORD: example 22 | EB_PATH: /usr/local/elkarbackup 23 | # Download the current development version from GitHub 24 | #EB_VERSION: dev 25 | # You can use your fork instead 26 | EB_VERSION: "https://github.com/elkarbackup/elkarbackup.git -b feature-symfony34" 27 | # You also can use a custom version (i.e. for testing purposes) 28 | #EB_VERSION: v1.2.7 29 | #EB_INSTALLER: https://raw.githubusercontent.com/elkarbackup/elkarbackup/master/install/eb-installer.sh 30 | volumes: 31 | # Optional: use a persistent volume so that you can 32 | # edit them from your host. 33 | - ./src:/usr/local/elkarbackup 34 | -------------------------------------------------------------------------------- /development/1.4/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | if [ ! -n "${MYSQL_ROOT_PASSWORD}" ] && [ ! -n "${EB_DB_PASSWORD}" ] ;then 4 | echo >&2 'error: unknown database root password' 5 | echo >&2 ' You need to specify MYSQL_ROOT_PASSWORD or EB_DB_PASSWORD' 6 | exit 1 7 | fi 8 | 9 | # Check database connection 10 | until mysqladmin ping -h "${EB_DB_HOST:=db}" --silent; do 11 | >&2 echo "MySQL is unavailable - sleeping" 12 | sleep 1 13 | done 14 | 15 | EB_PATH=${EB_PATH:=/usr/local/elkarbackup} 16 | EB_INSTALLER=${EB_INSTALLER:=https://raw.githubusercontent.com/elkarbackup/elkarbackup/feature-symfony34/install/eb-installer.sh} 17 | 18 | if [ ! -d "$EB_PATH/app" ];then 19 | bash -c "$(curl -s $EB_INSTALLER)" -s \ 20 | -v "${EB_VERSION:=dev}" \ 21 | -h "${MYSQL_HOST:=db}" \ 22 | -u "${MYSQL_EB_USER:=elkarbackup}" \ 23 | -p "${MYSQL_EB_PASSWORD:=elkarbackup}" \ 24 | -U "${EB_DB_USERPASSWORD:=root}" \ 25 | -P "${EB_DB_PASSWORD:=example}" \ 26 | -y \ 27 | -d 28 | echo "Restarting apache..." 29 | service apache2 stop 30 | 31 | #Workaround to fix permissions issues (don't do that outside a container) 32 | cd $EB_PATH 33 | sed -i '7s/^/umask(000);\n/' bin/console 34 | sed -i '6s/^/umask(000);\n/' web/app.php 35 | sed -i '10s/^/umask(000);\n/' web/app_dev.php 36 | $EB_PATH/bin/console cache:clear --env=prod 37 | 38 | # Create default backup storage dir 39 | # TODO: make this configurable with a app/console elkarbackup: 40 | mkdir -p /var/spool/elkarbackup/backups 41 | setfacl -Rm u:elkarbackup:rwx /var/spool/elkarbackup 42 | setfacl -Rm u:www-data:rx /var/spool/elkarbackup/backups 43 | 44 | ## Txapuza permissions 45 | chmod -R 777 /usr/local/elkarbackup/var/logs 46 | chmod -R 777 /usr/local/elkarbackup/var/cache 47 | chmod -R 777 /usr/local/elkarbackup/var/sessions 48 | fi 49 | 50 | # Delete apache pid file (https://github.com/docker-library/php/issues/53) 51 | if [ -f /run/apache2/apache2.pid ]; then 52 | rm -f /run/apache2/apache2.pid 53 | fi 54 | /usr/sbin/cron && /usr/sbin/apache2ctl -D FOREGROUND 55 | -------------------------------------------------------------------------------- /elkarbackup/1.2/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | MAINTAINER Xabi Ezpeleta 3 | 4 | ENV EB_VERSION 1.2.7 5 | 6 | # Install required dependencies 7 | RUN apt-get update && apt-get install -y \ 8 | apache2 \ 9 | php \ 10 | mysql-client \ 11 | rsnapshot \ 12 | zip \ 13 | php-mysql \ 14 | php-xml \ 15 | libapache2-mod-php \ 16 | curl \ 17 | acl \ 18 | bzip2 \ 19 | wget \ 20 | sudo \ 21 | && rm -rf /var/lib/apt/lists/* 22 | 23 | # TODO: Disable apache autostart service 24 | 25 | # Elkarbackup repo 26 | RUN wget -O - http://elkarbackup.org/apt/archive.gpg.key | apt-key add - 27 | RUN wget https://github.com/elkarbackup/elkarbackup/releases/download/v$EB_VERSION/elkarbackup_$EB_VERSION-php7_all.deb 28 | 29 | # Workaround for docker: change postinst 30 | RUN dpkg --unpack elkarbackup_$EB_VERSION-php7_all.deb 31 | COPY postinst /postinst 32 | 33 | # Copy file to avoid file busy error 34 | RUN cp /postinst /var/lib/dpkg/info/elkarbackup.postinst 35 | RUN chmod u+x /var/lib/dpkg/info/elkarbackup.postinst 36 | 37 | # Preconfigure Elkarbackup 38 | RUN echo "elkarbackup elkarbackup/dbadminname text ${EB_DB_USER:=root}" | debconf-set-selections && \ 39 | echo "elkarbackup elkarbackup/dbadminpassword password ${EB_DB_PASSWORD:=MYSQL_ROOT_PASSWORD}" | debconf-set-selections && \ 40 | echo "elkarbackup elkarbackup/dbhost text ${EB_DB_HOST:=db}" | debconf-set-selections && \ 41 | echo "elkarbackup elkarbackup/dbname text ${EB_DB_NAME:=elkarbackup}" | debconf-set-selections && \ 42 | echo "elkarbackup elkarbackup/dbusername text ${EB_DB_USERNAME:=elkarbackup}" | debconf-set-selections && \ 43 | echo "elkarbackup elkarbackup/dbuserpassword password ${EB_DB_USERPASSWORD:=elkarbackup}" | debconf-set-selections 44 | 45 | RUN DEBIAN_FRONTEND="noninteractive" dpkg --configure elkarbackup && apt-get install -yf 46 | # apt-get update && apt-get install -y -o Dpkg::Options::="--force-confold" elkarbackup 47 | 48 | 49 | COPY entrypoint.sh / 50 | RUN chmod u+x /entrypoint.sh 51 | ENTRYPOINT ["/entrypoint.sh"] 52 | 53 | VOLUME /var/spool/elkarbackup 54 | VOLUME /etc/elkarbackup 55 | VOLUME /var/lib/elkarbackup/.ssh 56 | 57 | EXPOSE 80 58 | EXPOSE 443 59 | -------------------------------------------------------------------------------- /elkarbackup/1.2/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | db: 6 | image: mysql:5.7 7 | environment: 8 | MYSQL_ROOT_PASSWORD: example 9 | #volumes: 10 | # - /srv/mysql:/var/lib/mysql 11 | 12 | elkarbackup: 13 | image: elkarbackup/elkarbackup:latest 14 | #build: . 15 | ports: 16 | - 80:80 17 | - 443:443 18 | links: 19 | - db 20 | depends_on: 21 | - db 22 | #volumes: 23 | #- /srv/elkarbackup/data:/var/spool/elkarbackup 24 | #- /srv/elkarbackup:/usr/share/elkarbackup 25 | #- /srv/elkarbackup/logs:/var/log/elkarbackup 26 | environment: 27 | EB_DB_HOST: db 28 | #EB_DB_USER: root 29 | EB_DB_PASSWORD: example 30 | #EB_DB_USERPASSWORD: elkarbackup 31 | -------------------------------------------------------------------------------- /elkarbackup/1.2/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | dbadminusername=${EB_DB_USER:=root} 4 | dbadminpassword=${EB_DB_PASSWORD:=$MYSQL_ROOT_PASSWORD} 5 | dbhost=${EB_DB_HOST:=db} 6 | dbname=${EB_DB_NAME:=elkarbackup} 7 | dbusername=${EB_DB_USERNAME:=elkarbackup} 8 | dbuserpassword=${EB_DB_USERPASSWORD:=elkarbackup} 9 | 10 | # DB password empty? 11 | if [ ! -n "${MYSQL_ROOT_PASSWORD}" ] && [ ! -n "${EB_DB_PASSWORD}" ] ;then 12 | echo >&2 'error: unknown database root password' 13 | echo >&2 ' You need to specify MYSQL_ROOT_PASSWORD or EB_DB_PASSWORD' 14 | exit 1 15 | fi 16 | 17 | # Check database connection 18 | until mysqladmin ping -h "${EB_DB_HOST:=db}" --silent; do 19 | >&2 echo "MySQL is unavailable - sleeping" 20 | sleep 1 21 | done 22 | 23 | # Check database configuration. Create DB if it does not exist. 24 | if ! mysql -u"$dbusername" -p"$dbuserpassword" -h"$dbhost" "$dbname" /dev/null 25 | then 26 | echo "Attempting to create DB $dbname and user $dbusername in $dbhost" 27 | echo 'Create database' 28 | echo "CREATE DATABASE IF NOT EXISTS \`$dbname\` DEFAULT CHARACTER SET utf8;" | mysql -u"$dbadminusername" -p"$dbadminpassword" -h"$dbhost" 29 | echo 'Create user' 30 | if [ "$dbhost" = localhost ] 31 | then 32 | user="'$dbusername'@localhost" 33 | else 34 | user="'$dbusername'" 35 | fi 36 | echo "GRANT ALL ON \`$dbname\`.* TO $user IDENTIFIED BY '$dbuserpassword';" | mysql -u"$dbadminusername" -p"$dbadminpassword" -h"$dbhost" || true 37 | else 38 | echo DB seems to be ready 39 | fi 40 | 41 | 42 | # Allow www-data and elkarbackup user to write to /dev/stderr 43 | if [ ! -f /tmp/logpipe ]; then 44 | mkfifo -m 600 /tmp/logpipe 45 | fi 46 | chown www-data:www-data /tmp/logpipe 47 | setfacl -m u:www-data:rwx -m u:elkarbackup:rwx /tmp/logpipe 48 | cat <> /tmp/logpipe 1>&2 & 49 | 50 | # Log to stdout 51 | sed -i 's/%kernel.logs_dir%\/BnvLog.log/\/tmp\/logpipe/g' /etc/elkarbackup/config.yml 52 | sed -i 's/${APACHE_LOG_DIR}\/elkarbackup-ssl.access.log/\/proc\/self\/fd\/1/g' /etc/apache2/sites-available/elkarbackup-ssl.conf /etc/apache2/sites-available/elkarbackup.conf 53 | sed -i 's/${APACHE_LOG_DIR}\/elkarbackup.error.log/\/proc\/self\/fd\/2/g' /etc/apache2/sites-available/elkarbackup-ssl.conf /etc/apache2/sites-available/elkarbackup.conf 54 | 55 | 56 | # Configure parameters 57 | echo 'Configure parameters' 58 | sed -i "s#database_host:.*#database_host: $dbhost#" /etc/elkarbackup/parameters.yml 59 | sed -i "s#database_name:.*#database_name: $dbname#" /etc/elkarbackup/parameters.yml 60 | sed -i "s#database_user:.*#database_user: $dbusername#" /etc/elkarbackup/parameters.yml 61 | sed -i "s#database_password:.*#database_password: $dbuserpassword#" /etc/elkarbackup/parameters.yml 62 | 63 | # Migrate and delete cache content 64 | echo Delete cache content 65 | rm -fR /var/cache/elkarbackup/* 66 | echo Update DB 67 | php /usr/share/elkarbackup/app/console doctrine:migrations:migrate --no-interaction >/dev/null || true 68 | echo Create root user 69 | php /usr/share/elkarbackup/app/console elkarbackup:create_admin >/dev/null || true 70 | echo Clean cache 71 | php /usr/share/elkarbackup/app/console cache:clear >/dev/null || true 72 | echo Dump assets 73 | php /usr/share/elkarbackup/app/console assetic:dump >/dev/null || true 74 | echo Invalidate sessions 75 | rm -rf /var/lib/elkarbackup/sessions/* 76 | 77 | 78 | # set rwx permissions for www-data and the backup user in the cache and log directories 79 | # as described in http://symfony.com/doc/current/book/installation.html#configuration-and-setup 80 | echo Changing file permissions 81 | username="elkarbackup" 82 | setfacl -R -m u:www-data:rwx -m u:$username:rwx /var/cache/elkarbackup 2>/dev/null || ( echo "ACLs not supported. Remount with ACL and reconfigure with 'dpkg --configure --pending'" && false ) 83 | setfacl -dR -m u:www-data:rwx -m u:$username:rwx /var/cache/elkarbackup 84 | setfacl -R -m u:www-data:rwx -m u:$username:rwx /var/log/elkarbackup 85 | setfacl -dR -m u:www-data:rwx -m u:$username:rwx /var/log/elkarbackup 86 | chown -R $username.$username /var/cache/elkarbackup /var/log/elkarbackup /var/spool/elkarbackup 87 | chown -R www-data.www-data /var/lib/elkarbackup/sessions /etc/elkarbackup/parameters.yml /var/spool/elkarbackup/uploads 88 | uploadsdir="/var/spool/elkarbackup/uploads" 89 | olduploadsdir=`cat /etc/elkarbackup/parameters.yml|grep upload_dir|sed 's/.*: *//'` 90 | mkdir -p "$uploadsdir" || true 91 | if [ ! "$olduploadsdir" == "$uploadsdir" ]; then 92 | mv "$olduploadsdir"/* "$uploadsdir" || true 93 | fi 94 | chown -R www-data.www-data "$uploadsdir" 95 | sed -i "s#upload_dir:.*#upload_dir: $uploadsdir#" /etc/elkarbackup/parameters.yml 96 | sed -i -e "s#elkarbackupuser#$username#g" -e "s#\s*Cmnd_Alias\s*ELKARBACKUP_SCRIPTS.*#Cmnd_Alias ELKARBACKUP_SCRIPTS=$uploadsdir/*#" /etc/sudoers.d/elkarbackup 97 | chmod 0440 /etc/sudoers.d/elkarbackup 98 | 99 | # Delete apache pid file (https://github.com/docker-library/php/issues/53) 100 | if [ -f /run/apache2/apache2.pid ]; then 101 | rm -f /run/apache2/apache2.pid 102 | fi 103 | 104 | if [ "$DISABLE_CRON" == "true" ]; then 105 | /usr/sbin/apache2ctl -D FOREGROUND 106 | else 107 | /usr/sbin/cron && /usr/sbin/apache2ctl -D FOREGROUND 108 | fi 109 | -------------------------------------------------------------------------------- /elkarbackup/1.2/postinst: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # Source debconf library. 5 | . /usr/share/debconf/confmodule 6 | 7 | dbhost=`sed -n 's/^[ \t]*database_host:[ \t]*\([^ #\t]*\).*/\1/p' /etc/elkarbackup/parameters.yml` 8 | dbname=`sed -n 's/^[ \t]*database_name:[ \t]*\([^ #\t]*\).*/\1/p' /etc/elkarbackup/parameters.yml` 9 | dbusername=`sed -n 's/^[ \t]*database_user:[ \t]*\([^ #\t]*\).*/\1/p' /etc/elkarbackup/parameters.yml` 10 | dbuserpassword=`sed -n 's/^[ \t]*database_password:[ \t]*\([^ #\t]*\).*/\1/p' /etc/elkarbackup/parameters.yml` 11 | 12 | 13 | 14 | if mysql -u"$dbusername" -p"$dbuserpassword" -h"$dbhost" "$dbname" /dev/null 15 | then 16 | echo "Using /etc/elkarbackup/parameters.yml configuration ok" 17 | else 18 | dbhost=${EB_DB_HOST:=db} 19 | dbname=${EB_DB_NAME:=elkarbackup} 20 | dbusername=${EB_DB_USERNAME:=elkarbackup} 21 | dbuserpassword=${EB_DB_USERPASSWORD:=elkarbackup} 22 | fi 23 | 24 | username="elkarbackup" 25 | sed -i "s/www-data/$username/" /etc/cron.d/elkarbackup 26 | if test x`grep $username /etc/passwd` = x 27 | then 28 | adduser --system --home /var/lib/elkarbackup --shell /bin/bash --group $username 29 | chown -R elkarbackup.elkarbackup /var/lib/elkarbackup &>/dev/null 30 | fi 31 | if [ ! -f /var/lib/elkarbackup/.ssh/id_rsa ] 32 | then 33 | mkdir /var/lib/elkarbackup/.ssh || true 34 | ssh-keygen -t rsa -N '' -C 'Automatically generated key for elkarbackup.' -f /var/lib/elkarbackup/.ssh/id_rsa 35 | sed -i "s#public_key:.*#public_key: /var/lib/elkarbackup/.ssh/id_rsa.pub#" /etc/elkarbackup/parameters.yml 36 | chown -R $username.$username /var/lib/elkarbackup 37 | fi 38 | # set rwx permissions for www-data and the backup user in the cache and log directories 39 | # as described in http://symfony.com/doc/current/book/installation.html#configuration-and-setup 40 | setfacl -R -m u:www-data:rwx -m u:$username:rwx /var/cache/elkarbackup 2>/dev/null || ( echo "ACLs not supported. Remount with ACL and reconfigure with 'dpkg --configure --pending'" && false ) 41 | setfacl -dR -m u:www-data:rwx -m u:$username:rwx /var/cache/elkarbackup 2>/dev/null 42 | setfacl -R -m u:www-data:rwx -m u:$username:rwx /var/log/elkarbackup 2>/dev/null 43 | setfacl -dR -m u:www-data:rwx -m u:$username:rwx /var/log/elkarbackup 2>/dev/null 44 | chown -R $username.$username /var/cache/elkarbackup /var/log/elkarbackup /var/spool/elkarbackup 45 | chown -R www-data.www-data /var/lib/elkarbackup/sessions /etc/elkarbackup/parameters.yml /var/spool/elkarbackup/uploads 46 | 47 | uploadsdir="/var/spool/elkarbackup/uploads" 48 | olduploadsdir=`cat /etc/elkarbackup/parameters.yml|grep upload_dir|sed 's/.*: *//'` 49 | mkdir -p "$uploadsdir" || true 50 | if [ ! "$olduploadsdir" == "$uploadsdir" ]; then 51 | mv "$olduploadsdir"/* "$uploadsdir" || true 52 | fi 53 | chown -R www-data.www-data "$uploadsdir" 54 | sed -i "s#upload_dir:.*#upload_dir: $uploadsdir#" /etc/elkarbackup/parameters.yml 55 | sed -i -e "s#elkarbackupuser#$username#g" -e "s#\s*Cmnd_Alias\s*ELKARBACKUP_SCRIPTS.*#Cmnd_Alias ELKARBACKUP_SCRIPTS=$uploadsdir/*#" /etc/sudoers.d/elkarbackup 56 | chmod 0440 /etc/sudoers.d/elkarbackup 57 | 58 | update-rc.d elkarbackup-tahoe-lafs defaults 59 | service elkarbackup-tahoe-lafs start 60 | 61 | if [ "$1" = "configure" ]; then 62 | CONF="elkarbackup" 63 | CONFSSL="elkarbackup-ssl" 64 | COMMON_STATE=$(dpkg-query -f '${Status}' -W 'apache2.2-common' 2>/dev/null | awk '{print $3}' || true) 65 | 66 | if [ -e /usr/share/apache2/apache2-maintscript-helper ]; then 67 | # Jessie and Trusty 68 | . /usr/share/apache2/apache2-maintscript-helper 69 | apache2_has_module rewrite || apache2_invoke enmod rewrite 2>/dev/null || exit $? 70 | apache2_has_module ssl ||apache2_invoke enmod ssl 2>/dev/null || exit $? 71 | apache2_invoke enconf $CONF 2>/dev/null || exit $? 72 | apache2_invoke ensite $CONF 2>/dev/null || exit $? 73 | apache2_invoke ensite $CONFSSL 2>/dev/null || exit $? 74 | elif [ "$COMMON_STATE" = "installed" ] || [ "$COMMON_STATE" = "unpacked" ] ; then 75 | # Ubuntu 12.04 (version module not enabled by default) 76 | if [ ! -f /etc/apache2/mods-enabled/version.load ]; then 77 | if [ -f /etc/apache2/mods-available/version.load ]; then 78 | a2enmod version 79 | fi 80 | fi 81 | 82 | if [ -d /etc/apache2/conf.d/ -a ! -L /etc/apache2/conf.d/$CONF.conf ]; then 83 | # Rename old files to Apache 2.4 format 84 | if [ -f /etc/apache2/conf.d/$CONF ]; then 85 | mv /etc/apache2/conf.d/$CONF /etc/apache2/conf-available/$CONF.conf 86 | fi 87 | #a2enconf 88 | if [ ! -f /etc/apache2/conf.d/$CONF.conf ]; then 89 | ln -s ../conf-available/$CONF.conf /etc/apache2/conf.d/$CONF.conf 90 | fi 91 | fi 92 | 93 | if [ -d /etc/apache2/sites-available/ -a ! -L /etc/apache2/sites-available/$CONF.conf ]; then 94 | # Rename old files to Apache 2.4 format 95 | if [ -f /etc/apache2/sites-available/$CONF ]; then 96 | mv /etc/apache2/sites-available/$CONF /etc/apache2/sites-available/$CONF.conf 97 | rm /etc/apache2/sites-enabled/$CONF 98 | fi 99 | #a2ensite 100 | if [ ! -f /etc/apache2/sites-enabled/$CONF.conf ]; then 101 | ln -s ../sites-available/$CONF.conf /etc/apache2/sites-enabled/$CONF.conf 102 | fi 103 | if [ ! -f /etc/apache2/sites-enabled/$CONFSSL.conf ]; then 104 | ln -s ../sites-available/$CONFSSL.conf /etc/apache2/sites-enabled/$CONFSSL.conf 105 | fi 106 | fi 107 | 108 | a2enmod rewrite 109 | a2enmod ssl 110 | fi 111 | fi 112 | 113 | db_stop 114 | -------------------------------------------------------------------------------- /elkarbackup/1.3/README.md: -------------------------------------------------------------------------------- 1 | # ElkarBackup 2 | 3 | ## Images 4 | Latest stable version with Apache and PHP7 5 | - 1.3.4, 1.3.4-apache, **latest (default)** 6 | - 1.2.7, 1.2-apache 7 | 8 | ## How to use this image 9 | 10 | ```sh 11 | $ docker run --name my-elkarbackup --link some-mysql:mysql -d elkarbackup/elkarbackup:latest 12 | ``` 13 | 14 | ### Where to store data 15 | Docker container does not come with persistent storage. However, there are 16 | several ways to store data in the host machine. We encourage users to 17 | familiarize themselves with the [options available](https://docs.docker.com/storage/). 18 | 19 | Below you have the directories you might want to persist: 20 | 21 | | path | description | 22 | |----------------|------------------------------------| 23 | | /app/backups | Default backup storage directory. | 24 | | /app/uploads | Pre and post scripts. | 25 | | /app/.ssh | SSH keys. | 26 | 27 | ### ... via `docker-compose` 28 | 29 | You can use **Docker Compose** to easily run ElkarBackup in an isolated environment built with Docker containers: 30 | 31 | **docker-compose.yml** 32 | ```yaml 33 | version: '3' 34 | 35 | services: 36 | elkarbackup: 37 | image: elkarbackup/elkarbackup:1.3.4-apache 38 | environment: 39 | SYMFONY__DATABASE__PASSWORD: "your-password-here" 40 | EB_CRON: "enabled" 41 | volumes: 42 | - backups:/app/backups 43 | - uploads:/app/uploads 44 | - sshkeys:/app/.ssh 45 | ports: 46 | - 8000:80 47 | 48 | db: 49 | image: mysql:5.7.22 50 | environment: 51 | MYSQL_ROOT_PASSWORD: "your-password-here" 52 | volumes: 53 | - db:/var/lib/mysql 54 | 55 | client: 56 | image: elkarbackup/client 57 | 58 | volumes: 59 | db: 60 | backups: 61 | uploads: 62 | sshkeys: 63 | ``` 64 | 65 | Run `docker-compose up`, wait for it to initialize completely, and the address: 66 | - http://localhost:8000 67 | 68 | [![Try in PWD](https://github.com/play-with-docker/stacks/raw/cff22438cb4195ace27f9b15784bbb497047afa7/assets/images/button.png)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/elkarbackup/elkarbackup-docker/master/elkarbackup/1.3/docker-compose.yml) 69 | 70 | ## Environment variables 71 | 72 | The following environment variables are also honored for configuring your ElkarBackup instance: 73 | 74 | ### General 75 | 76 | | name | default value | description | 77 | |----------|---------------|---------------| 78 | | TZ | Europe/Paris | Timezone | 79 | | PHP_TZ | Europe/Paris | Timezone (PHP)| 80 | | EB_CRON | disabled | run tick command periodically| 81 | 82 | ### Database configuration 83 | 84 | | name | default value | description | 85 | |-----------------------------|---------------|-------------| 86 | | SYMFONY__DATABASE__DRIVER | pdo_mysql | driver | 87 | | SYMFONY__DATABASE__PATH | null | db path (sqlite) | 88 | | SYMFONY__DATABASE__HOST | db | db host | 89 | | SYMFONY__DATABASE__PORT | 3306 | db port | 90 | | SYMFONY__DATABASE__NAME | elkarbackup | db name | 91 | | SYMFONY__DATABASE__USER | root | db user | 92 | | SYMFONY__DATABASE__PASSWORD | root | db password | 93 | 94 | 95 | ### Mailer configuration 96 | 97 | | name | default value | description | 98 | |-----------------------------|---------------|--------------| 99 | | SYMFONY__MAILER__TRANSPORT | smtp | transport | 100 | | SYMFONY__MAILER__HOST | localhost | host | 101 | | SYMFONY__MAILER__USER | null | user | 102 | | SYMFONY__MAILER__PASSWORD | null | password | 103 | | SYMFONY__MAILER__FROM | null | from address | 104 | 105 | 106 | ### Elkarbackup configuration 107 | 108 | | name | default value | description | 109 | |-----------------------------|-------------------|-------------| 110 | | SYMFONY__EB__SECRET | fba546d6ab6abc4a01391d161772a14e093c7aa2 | framework secret | 111 | | SYMFONY__EB__UPLOAD__DIR | /app/uploads | scripts directory | 112 | | SYMFONY__EB__BACKUP__DIR | /app/backups | backups directory | 113 | | SYMFONY__EB__TMP__DIR | /app/tmp | tmp directory | 114 | | SYMFONY__EB__URL__PREFIX | null | url path prefix (i.e. /elkarbackup) | 115 | | SYMFONY__EB__PUBLIC__KEY | /app/.ssh/id_rsa.pub | ssh publick key path | 116 | | SYMFONY__EB__TAHOE__ACTIVE | false | - | 117 | | SYMFONY__EB__MAX__PARALLEL__JOBS | 1 | v1.3 or higher | 118 | | SYMFONY__EB__POST__ON__PRE__FAIL | true | v1.3 or higher | 119 | 120 | -------------------------------------------------------------------------------- /elkarbackup/1.3/apache/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.1-apache 2 | RUN apt-get update && apt-get install -y \ 3 | default-mysql-client \ 4 | acl \ 5 | rsnapshot \ 6 | sudo \ 7 | && rm -rf /var/lib/apt/lists/* \ 8 | && docker-php-ext-install \ 9 | pdo_mysql \ 10 | pcntl 11 | 12 | COPY --from=elkarbackup/build:1.3.5 /app /app 13 | 14 | # Apache configuration 15 | COPY elkarbackup.conf /etc/apache2/sites-available 16 | RUN a2enmod rewrite \ 17 | && a2dissite 000-default \ 18 | && a2dissite default-ssl \ 19 | && a2ensite elkarbackup 20 | 21 | # Sudoers for script execution with environment variables 22 | RUN echo "Cmnd_Alias ELKARBACKUP_SCRIPTS=/app/uploads/*" >> /etc/sudoers.d/elkarbackup 23 | RUN echo "Defaults!ELKARBACKUP_SCRIPTS env_keep += \"ELKARBACKUP_LEVEL ELKARBACKUP_EVENT ELKARBACKUP_URL ELKARBACKUP_ID ELKARBACKUP_PATH ELKARBACKUP_STATUS ELKARBACKUP_CLIENT_NAME ELKARBACKUP_JOB_NAME ELKARBACKUP_OWNER_EMAIL ELKARBACKUP_RECIPIENT_LIST ELKARBACKUP_CLIENT_TOTAL_SIZE ELKARBACKUP_JOB_TOTAL_SIZE ELKARBACKUP_JOB_RUN_SIZE ELKARBACKUP_CLIENT_STARTTIME ELKARBACKUP_CLIENT_ENDTIME ELKARBACKUP_JOB_STARTTIME ELKARBACKUP_JOB_ENDTIME ELKARBACKUP_SSH_ARGS\"" >> /etc/sudoers.d/elkarbackup 24 | RUN echo "elkarbackup ALL = NOPASSWD: ELKARBACKUP_SCRIPTS" >> /etc/sudoers.d/elkarbackup 25 | 26 | # Add SSH default key location 27 | RUN echo " IdentityFile /app/.ssh/id_rsa" >> /etc/ssh/ssh_config 28 | 29 | # Console commands log output 30 | RUN ln -sf /proc/1/fd/1 /var/log/output.log 31 | 32 | ## Set timezone 33 | RUN ln -snf /usr/share/zoneinfo/Europe/Paris /etc/localtime && echo "Europe/Paris" > /etc/timezone 34 | RUN printf '[PHP]\ndate.timezone = "Europe/Paris"\n' > /usr/local/etc/php/conf.d/tzone.ini 35 | 36 | COPY entrypoint.sh / 37 | COPY envars.sh / 38 | RUN chmod u+x /entrypoint.sh 39 | ENTRYPOINT ["/entrypoint.sh"] 40 | CMD [] 41 | 42 | VOLUME /app/backups 43 | EXPOSE 80 44 | 45 | LABEL maintainer="Xabi Ezpeleta " 46 | -------------------------------------------------------------------------------- /elkarbackup/1.3/apache/README.md: -------------------------------------------------------------------------------- 1 | # ElkarBackup 2 | 3 | ## Images 4 | Latest stable version with Apache and PHP7 5 | - 1.3.5, 1.3.5-apache, latest.apache, **latest (default)** 6 | - 1.2.7, 1.2-apache 7 | 8 | ## How to use this image 9 | 10 | ```sh 11 | $ docker run --name my-elkarbackup --link some-mysql:mysql -d elkarbackup/elkarbackup:latest 12 | ``` 13 | 14 | ### Where to store data 15 | Docker container does not come with persistent storage. However, there are 16 | several ways to store data in the host machine. We encourage users to 17 | familiarize themselves with the [options available](https://docs.docker.com/storage/). 18 | 19 | Below you have the directories you might want to persist: 20 | 21 | | path | description | 22 | |----------------|------------------------------------| 23 | | /app/backups | Default backup storage directory. | 24 | | /app/uploads | Pre and post scripts. | 25 | | /app/.ssh | SSH keys. | 26 | 27 | ### ... via `docker-compose` 28 | 29 | You can use **Docker Compose** to easily run ElkarBackup in an isolated environment built with Docker containers: 30 | 31 | **docker-compose.yml** 32 | ```yaml 33 | version: '3' 34 | 35 | services: 36 | elkarbackup: 37 | image: elkarbackup/elkarbackup:1.3.5-apache 38 | environment: 39 | SYMFONY__DATABASE__PASSWORD: "your-password-here" 40 | EB_CRON: "enabled" 41 | volumes: 42 | - backups:/app/backups 43 | - uploads:/app/uploads 44 | - sshkeys:/app/.ssh 45 | ports: 46 | - 8000:80 47 | 48 | db: 49 | image: mysql:5.7.22 50 | environment: 51 | MYSQL_ROOT_PASSWORD: "your-password-here" 52 | volumes: 53 | - db:/var/lib/mysql 54 | 55 | client: 56 | image: elkarbackup/client 57 | 58 | volumes: 59 | db: 60 | backups: 61 | uploads: 62 | sshkeys: 63 | ``` 64 | 65 | Run `docker-compose up`, wait for it to initialize completely, and the address: 66 | - http://localhost:8000 67 | 68 | [![Try in PWD](https://github.com/play-with-docker/stacks/raw/cff22438cb4195ace27f9b15784bbb497047afa7/assets/images/button.png)](https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/elkarbackup/elkarbackup-docker/master/elkarbackup/1.3/docker-compose.yml) 69 | 70 | ## Environment variables 71 | 72 | The following environment variables are also honored for configuring your ElkarBackup instance: 73 | 74 | ### General 75 | 76 | | name | default value | description | 77 | |----------|---------------|---------------| 78 | | TZ | Europe/Paris | Timezone | 79 | | PHP_TZ | Europe/Paris | Timezone (PHP)| 80 | | EB_CRON | disabled | run tick command periodically| 81 | 82 | ### Database configuration 83 | 84 | | name | default value | description | 85 | |-----------------------------|---------------|-------------| 86 | | SYMFONY__DATABASE__DRIVER | pdo_mysql | driver | 87 | | SYMFONY__DATABASE__PATH | null | db path (sqlite) | 88 | | SYMFONY__DATABASE__HOST | db | db host | 89 | | SYMFONY__DATABASE__PORT | 3306 | db port | 90 | | SYMFONY__DATABASE__NAME | elkarbackup | db name | 91 | | SYMFONY__DATABASE__USER | root | db user | 92 | | SYMFONY__DATABASE__PASSWORD | root | db password | 93 | 94 | 95 | ### Mailer configuration 96 | 97 | | name | default value | description | 98 | |-----------------------------|---------------|--------------| 99 | | SYMFONY__MAILER__TRANSPORT | smtp | transport | 100 | | SYMFONY__MAILER__HOST | localhost | host | 101 | | SYMFONY__MAILER__USER | null | user | 102 | | SYMFONY__MAILER__PASSWORD | null | password | 103 | | SYMFONY__MAILER__FROM | null | from address | 104 | 105 | 106 | ### Elkarbackup configuration 107 | 108 | | name | default value | description | 109 | |-----------------------------|-------------------|-------------| 110 | | SYMFONY__EB__SECRET | fba546d6ab6abc4a01391d161772a14e093c7aa2 | framework secret | 111 | | SYMFONY__EB__UPLOAD__DIR | /app/uploads | scripts directory | 112 | | SYMFONY__EB__BACKUP__DIR | /app/backups | backups directory | 113 | | SYMFONY__EB__TMP__DIR | /app/tmp | tmp directory | 114 | | SYMFONY__EB__URL__PREFIX | null | url path prefix (i.e. /elkarbackup) | 115 | | SYMFONY__EB__PUBLIC__KEY | /app/.ssh/id_rsa.pub | ssh publick key path | 116 | | SYMFONY__EB__TAHOE__ACTIVE | false | - | 117 | | SYMFONY__EB__MAX__PARALLEL__JOBS | 1 | v1.3 or higher | 118 | | SYMFONY__EB__POST__ON__PRE__FAIL | true | v1.3 or higher | 119 | 120 | -------------------------------------------------------------------------------- /elkarbackup/1.3/apache/elkarbackup.conf: -------------------------------------------------------------------------------- 1 | 2 | ServerName elkarbackup.local 3 | DocumentRoot /app/elkarbackup/web 4 | 5 | RewriteEngine On 6 | RewriteCond %{REQUEST_FILENAME} !-f 7 | RewriteRule ^(.*)$ app.php [QSA,L] 8 | Require all granted 9 | 10 | 11 | 12 | 13 | 14 | ServerName elkarbackup.local 15 | DocumentRoot /app/elkarbackup/web 16 | 17 | RewriteEngine On 18 | RewriteCond %{REQUEST_FILENAME} !-f 19 | RewriteRule ^(.*)$ app.php [QSA,L] 20 | Require all granted 21 | 22 | 23 | SSLEngine on 24 | SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem 25 | SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key 26 | 27 | -------------------------------------------------------------------------------- /elkarbackup/1.3/apache/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | source /envars.sh 4 | 5 | EB_DIR=/app/elkarbackup 6 | 7 | if [ -z "$SYMFONY_ENV" ];then 8 | export SYMFONY_ENV=prod 9 | fi 10 | 11 | ## = Set timezone = 12 | ## Only if TZ or PHP_TZ is set 13 | ## (PHP_TZ defaults to TZ) 14 | 15 | if [ ! -z "$TZ" ];then 16 | ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 17 | 18 | if [ -z "$PHP_TZ" ];then 19 | PHP_TZ="$TZ" 20 | fi 21 | fi 22 | 23 | if [ ! -z "$PHP_TZ" ];then 24 | printf "[PHP]\ndate.timezone = ${PHP_TZ}\n" > /usr/local/etc/php/conf.d/tzone.ini 25 | fi 26 | 27 | # Run commands 28 | if [ ! -z "$1" ]; then 29 | command="$@" 30 | echo "Command: $command" 31 | cd "${EB_DIR}" && $command 32 | exit $? 33 | fi 34 | 35 | # Check database connection 36 | until mysqladmin ping -h "${SYMFONY__DATABASE__HOST}" --silent; do 37 | >&2 echo "MySQL is unavailable - sleeping" 38 | sleep 1 39 | done 40 | 41 | cd "${EB_DIR}" 42 | 43 | # Create/update database 44 | php app/console doctrine:database:create 45 | php app/console doctrine:migrations:migrate --no-interaction 46 | # Create admin user 47 | php app/console elkarbackup:create_admin 48 | 49 | # Set permissions 50 | setfacl -R -m u:www-data:rwX app/cache app/sessions app/logs 51 | setfacl -dR -m u:www-data:rwX app/cache app/sessions app/logs 52 | 53 | if [ ! -z "$SYMFONY__EB__PUBLIC__KEY" ] && [ ! -f "$SYMFONY__EB__PUBLIC__KEY" ];then 54 | ssh-keygen -t rsa -N "" -C "Web requested key for elkarbackup." -f "${SYMFONY__EB__PUBLIC__KEY%.*}"; 55 | fi 56 | 57 | # Clear cache and sessions, build assetics... 58 | php app/console cache:clear 59 | php app/console assetic:dump 60 | 61 | # Empty sessions 62 | rm -rf app/sessions/* 63 | rm -rf app/cache/* 64 | 65 | apache2-foreground & 66 | 67 | ### Force tick execution and set permissions (again) 68 | php app/console elkarbackup:tick --env=prod > /var/log/output.log 69 | setfacl -R -m u:www-data:rwX app/cache app/sessions app/logs 70 | setfacl -dR -m u:www-data:rwX app/cache app/sessions app/logs 71 | 72 | # Cron 73 | if [ "${EB_CRON}" == "enabled" ]; then 74 | echo -e "\n\nEB_CRON is enabled. Running tick command every minute..." 75 | while true; do 76 | php app/console elkarbackup:tick --env=prod &>/var/log/output.log & 77 | sleep 60 78 | done 79 | fi 80 | -------------------------------------------------------------------------------- /elkarbackup/1.3/apache/envars.sh: -------------------------------------------------------------------------------- 1 | # Default environment variables 2 | # (required for 1.3.0-apache container) 3 | 4 | export SYMFONY_ENV=${SYMFONY_ENV:=prod} 5 | 6 | # ${SYMFONY database default configuration 7 | export SYMFONY__DATABASE__DRIVER=${SYMFONY__DATABASE__DRIVER:=pdo_mysql} 8 | export SYMFONY__DATABASE__PATH=${SYMFONY__DATABASE__PATH:=null} 9 | export SYMFONY__DATABASE__HOST=${SYMFONY__DATABASE__HOST:=db} 10 | export SYMFONY__DATABASE__PORT=${SYMFONY__DATABASE__PORT:=3306} 11 | export SYMFONY__DATABASE__NAME=${SYMFONY__DATABASE__NAME:=elkarbackup} 12 | export SYMFONY__DATABASE__USER=${SYMFONY__DATABASE__USER:=root} 13 | export SYMFONY__DATABASE__PASSWORD=${SYMFONY__DATABASE__PASSWORD:=root} 14 | 15 | # SYMFONY mailer default configuration 16 | export SYMFONY__MAILER__TRANSPORT=${SYMFONY__MAILER__TRANSPORT:=smtp} 17 | export SYMFONY__MAILER__HOST=${SYMFONY__MAILER__HOST:=localhost} 18 | export SYMFONY__MAILER__USER=${SYMFONY__MAILER__USER:=null} 19 | export SYMFONY__MAILER__PASSWORD=${SYMFONY__MAILER__PASSWORD:=null} 20 | export SYMFONY__MAILER__FROM=${SYMFONY__MAILER__FROM:=null} 21 | 22 | # Elkarbackup default configuration 23 | export SYMFONY__EB__SECRET=${SYMFONY__EB__SECRET:=fba546d6ab6abc4a01391d161772a14e093c7aa2} 24 | export SYMFONY__EB__UPLOAD__DIR=${SYMFONY__EB__UPLOAD__DIR:=/app/uploads} 25 | export SYMFONY__EB__BACKUP__DIR=${SYMFONY__EB__BACKUP__DIR:=/app/backups} 26 | export SYMFONY__EB__TMP__DIR=${SYMFONY__EB__TMP__DIR:=/app/tmp} 27 | export SYMFONY__EB__URL__PREFIX=${SYMFONY__EB__URL__PREFIX:=null} 28 | export SYMFONY__EB__PUBLIC__KEY=${SYMFONY__EB__PUBLIC__KEY:=/app/.ssh/id_rsa.pub} 29 | export SYMFONY__EB__TAHOE__ACTIVE=${SYMFONY__EB__TAHOE__ACTIVE:=false} 30 | export SYMFONY__EB__MAX__PARALLEL__JOBS=${SYMFONY__EB__MAX__PARALLEL__JOBS:=1} 31 | export SYMFONY__EB__POST__ON__PRE__FAIL=${SYMFONY__EB__POST__ON__PRE__FAIL:=true} -------------------------------------------------------------------------------- /elkarbackup/1.3/build/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.1-cli-alpine 2 | 3 | RUN apk add --no-cache \ 4 | git \ 5 | curl \ 6 | grep \ 7 | mysql-client \ 8 | acl \ 9 | rsnapshot \ 10 | && docker-php-ext-install \ 11 | pdo_mysql \ 12 | pcntl 13 | 14 | # Prepare default directories 15 | RUN mkdir -p -m 777 \ 16 | /app \ 17 | /app/uploads \ 18 | /app/backups \ 19 | /app/tmp \ 20 | /app/.ssh 21 | 22 | # Download and install composer 23 | COPY --from=composer:latest /usr/bin/composer /usr/bin/composer 24 | 25 | ## Download elkarbackup source code 26 | ENV ELKARBACKUP_VERSION 1.3.5 27 | ENV ELKARBACKUP_SHA256 b8b6bc65c3d4795dc089ec29213d34a3074e9aa7f1ae31eb6c8e3a312c46e465 28 | RUN set -ex; \ 29 | curl -o elkarbackup.tar.gz -fSL "https://github.com/elkarbackup/elkarbackup/archive/v${ELKARBACKUP_VERSION}.tar.gz"; \ 30 | echo "${ELKARBACKUP_SHA256} elkarbackup.tar.gz" | sha256sum -c -; \ 31 | tar -xzf elkarbackup.tar.gz -C /app/; \ 32 | rm elkarbackup.tar.gz; \ 33 | cd /app && mv elkarbackup-${ELKARBACKUP_VERSION} elkarbackup; \ 34 | cd /app/elkarbackup; \ 35 | mkdir -p app/cache app/sessions app/logs; \ 36 | rm app/DoctrineMigrations/Version20130306101349.php; 37 | 38 | ## Download jquery 39 | ENV JQUERY_VERSION 1.12.0 40 | ENV JQUERY_SHA256 5f1ab65fe2ad6b381a1ae036716475bf78c9b2e309528cf22170c1ddeefddcbf 41 | RUN set -ex; \ 42 | cd /app/elkarbackup; \ 43 | mkdir -p web/js/jquery && cd web/js/jquery; \ 44 | curl -o jquery-"${JQUERY_VERSION}".min.js "http://code.jquery.com/jquery-${JQUERY_VERSION}.min.js"; \ 45 | echo "${JQUERY_SHA256} jquery-${JQUERY_VERSION}.min.js" | sha256sum -c -; 46 | 47 | ## Download Dojo 48 | ENV DOJO_VERSION 1.8.14 49 | ENV DOJO_SHA256 2023c8c8c8722b4c63976b7a269e20bda2fa09010706aef10b3821be81691727 50 | RUN set -ex; \ 51 | cd /app/elkarbackup; \ 52 | mkdir -p web/js && cd web/js; \ 53 | curl -o dojo.tar.gz "https://download.dojotoolkit.org/release-${DOJO_VERSION}/dojo-release-${DOJO_VERSION}.tar.gz"; \ 54 | echo "${DOJO_SHA256} dojo.tar.gz" | sha256sum -c -; \ 55 | tar -xzf dojo.tar.gz && rm dojo.tar.gz; 56 | 57 | 58 | ## Custom composer.json (database not required) 59 | COPY composer.json.docker /app/elkarbackup/composer.json 60 | 61 | ## Custom parameters.yml template with envars 62 | COPY parameters.yml.docker /app/elkarbackup/app/config/parameters.yml.dist 63 | 64 | ## Custom config.yml (to log to stderr) 65 | COPY config.yml.docker /app/elkarbackup/app/config/config.yml 66 | 67 | ## Custom app.php and app_dev.php (fixes env variables bug) 68 | COPY app.php /app/elkarbackup/web/app.php 69 | COPY app_dev.php /app/elkarbackup/web/app_dev.php 70 | 71 | ## Disable "Manage parameters" menu item 72 | COPY src/Builder.php /app/elkarbackup/src/Binovo/ElkarBackupBundle/Menu/Builder.php 73 | 74 | ## Composer install 75 | RUN set -ex; \ 76 | cd /app/elkarbackup; \ 77 | composer install --no-interaction 78 | 79 | COPY entrypoint.sh / 80 | RUN chmod u+x /entrypoint.sh 81 | ENTRYPOINT ["/entrypoint.sh"] 82 | CMD [] 83 | 84 | 85 | LABEL maintainer="Xabi Ezpeleta " 86 | -------------------------------------------------------------------------------- /elkarbackup/1.3/build/README.md: -------------------------------------------------------------------------------- 1 | ## Elkarbackup build 2 | 3 | This is the docker image that we use to generate our Elkarbackup docker images. 4 | 5 | After downloading and installing all the components, it generates a directory (/app/elkarbackup) with all the needed files. If you want to build your own ElkarBackup container, the best option is multistage: 6 | 7 | ``` 8 | #file: Dockerfile 9 | #Download elkarbackup 10 | COPY --from=elkarbackup/build:latest /app/elkarbackup /app/elkarbackup 11 | ``` 12 | . 13 | Do you need a complete example? Here you have: https://github.com/elkarbackup/elkarbackup-docker/blob/master/elkarbackup/1.3/apache/Dockerfile 14 | 15 | Note that some modifications are made to the code to adapt it to Docker environment. 16 | -------------------------------------------------------------------------------- /elkarbackup/1.3/build/app.php: -------------------------------------------------------------------------------- 1 | unregister(); 19 | $apcLoader->register(true); 20 | */ 21 | 22 | require_once __DIR__.'/../app/AppKernel.php'; 23 | //require_once __DIR__.'/../app/AppCache.php'; 24 | 25 | $kernel = new AppKernel('prod', false); 26 | $kernel->loadClassCache(); 27 | //$kernel = new AppCache($kernel); 28 | 29 | // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter 30 | //Request::enableHttpMethodParameterOverride(); 31 | $request = Request::createFromGlobals(); 32 | $response = $kernel->handle($request); 33 | $response->send(); 34 | $kernel->terminate($request, $response); 35 | -------------------------------------------------------------------------------- /elkarbackup/1.3/build/app_dev.php: -------------------------------------------------------------------------------- 1 | loadClassCache(); 32 | $request = Request::createFromGlobals(); 33 | $response = $kernel->handle($request); 34 | $response->send(); 35 | $kernel->terminate($request, $response); 36 | -------------------------------------------------------------------------------- /elkarbackup/1.3/build/composer.json.docker: -------------------------------------------------------------------------------- 1 | { 2 | "name": "root/elkarbackup", 3 | "license": "proprietary", 4 | "type": "project", 5 | "autoload": { 6 | "psr-4": { 7 | "": "src/" 8 | } 9 | }, 10 | "require": { 11 | "php": ">=5.3.9", 12 | "symfony/symfony": "2.8.*", 13 | "doctrine/orm": "^2.4.8", 14 | "doctrine/doctrine-bundle": "~1.4", 15 | "symfony/assetic-bundle": "^2.7", 16 | "symfony/swiftmailer-bundle": "~2.3", 17 | "symfony/monolog-bundle": "~2.4", 18 | "sensio/distribution-bundle": "~4.0", 19 | "sensio/framework-extra-bundle": "^3.0.2", 20 | "incenteev/composer-parameter-handler": "~2.0", 21 | "doctrine/doctrine-migrations-bundle": "^1.1", 22 | "knplabs/knp-menu-bundle": "^2.1", 23 | "knplabs/knp-paginator-bundle": "^2.5", 24 | "twig/extensions": "^1.3", 25 | "jms/security-extra-bundle": "^1.5", 26 | "jms/di-extra-bundle": "^1.6", 27 | "twbs/bootstrap": "^3.3", 28 | "symfony/debug": "2.8.*" 29 | }, 30 | "require-dev": { 31 | "sensio/generator-bundle": "~2.3" 32 | }, 33 | "scripts": { 34 | "post-install-cmd": [ 35 | "cp vendor/twbs/bootstrap/dist/css/bootstrap*.css web/css", 36 | "cp vendor/twbs/bootstrap/dist/fonts/* web/fonts", 37 | "cp vendor/twbs/bootstrap/dist/js/bootstrap.min.js web/js/bootstrap/bootstrap.min.js", 38 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 39 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap" 40 | ], 41 | "post-update-cmd": [ 42 | "cp vendor/twbs/bootstrap/dist/css/bootstrap*.css web/css", 43 | "cp vendor/twbs/bootstrap/dist/fonts/* web/fonts", 44 | "cp vendor/twbs/bootstrap/dist/js/bootstrap.min.js web/js/bootstrap/bootstrap.min.js", 45 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 46 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap" 47 | ] 48 | }, 49 | "config": { 50 | "bin-dir": "bin" 51 | }, 52 | "extra": { 53 | "symfony-app-dir": "app", 54 | "symfony-web-dir": "web", 55 | "symfony-assets-install": "relative", 56 | "incenteev-parameters": { 57 | "file": "app/config/parameters.yml" 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /elkarbackup/1.3/build/config.yml.docker: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: parameters.yml } 3 | - { resource: security.yml } 4 | 5 | framework: 6 | #esi: ~ 7 | translator: { fallback: %locale% } 8 | secret: %secret% 9 | router: 10 | resource: "%kernel.root_dir%/config/routing.yml" 11 | strict_requirements: %kernel.debug% 12 | form: true 13 | csrf_protection: true 14 | validation: { enable_annotations: true } 15 | templating: { engines: ['twig'] } #assets_version: SomeVersionScheme 16 | default_locale: %locale% 17 | #trust_proxy_headers: false # Whether or not the Request object should trust proxy headers (X_FORWARDED_FOR/HTTP_CLIENT_IP) 18 | session: 19 | save_path: %kernel.root_dir%/sessions 20 | 21 | # Twig Configuration 22 | twig: 23 | debug: %kernel.debug% 24 | strict_variables: %kernel.debug% 25 | globals: 26 | warning_load_level: %warning_load_level% 27 | url_prefix: %url_prefix% 28 | # Assetic Configuration 29 | assetic: 30 | debug: %kernel.debug% 31 | use_controller: false 32 | # bundles: [ ] 33 | #java: /usr/bin/java 34 | filters: 35 | cssrewrite: ~ 36 | #closure: 37 | # jar: %kernel.root_dir%/Resources/java/compiler.jar 38 | #yui_css: 39 | # jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar 40 | 41 | # Doctrine Configuration 42 | doctrine: 43 | dbal: 44 | driver: %database_driver% 45 | host: %database_host% 46 | port: %database_port% 47 | dbname: %database_name% 48 | user: %database_user% 49 | password: %database_password% 50 | charset: UTF8 51 | server_version: 5.5 52 | 53 | orm: 54 | auto_generate_proxy_classes: %kernel.debug% 55 | auto_mapping: true 56 | 57 | # Swiftmailer Configuration 58 | swiftmailer: 59 | transport: %mailer_transport% 60 | host: %mailer_host% 61 | username: %mailer_user% 62 | password: %mailer_password% 63 | # spool: { type: memory } 64 | 65 | monolog: 66 | handlers: 67 | main: 68 | type: stream 69 | path: php://stderr 70 | level: info 71 | firephp: 72 | type: firephp 73 | level: info 74 | 75 | services: 76 | BnvWebLogger: 77 | class: Symfony\Bridge\Monolog\Logger 78 | arguments: [BnvWeb] 79 | calls: 80 | - [pushProcessor, [@BnvWebUserLoggerProcessor]] 81 | - [pushHandler, [@StreamHandler]] 82 | - [pushHandler, [@BnvLoggerHandler]] 83 | BnvLoggerHandler: 84 | class: Binovo\ElkarBackupBundle\Logger\LoggerHandler 85 | calls: 86 | - [setContainer, [@service_container] ] 87 | StreamHandler: 88 | class: Monolog\Handler\StreamHandler 89 | ## 200 = INFO, see Monolog::Logger for the values of log levels 90 | arguments: [php://stderr, 200] 91 | calls: 92 | - [setFormatter, [@BnvWebLoggerFormatter]] 93 | BnvWebUserLoggerProcessor: 94 | class: Binovo\ElkarBackupBundle\Logger\WebUserLoggerProcessor 95 | calls: 96 | - [setContainer, [@service_container] ] 97 | BnvWebLoggerFormatter: 98 | class: Monolog\Formatter\LineFormatter 99 | arguments: ["[%%datetime%%] %%channel%%.%%level_name%%: %%message%% %%context%% %%extra.user_name%% %%extra.user_email%%\n"] 100 | LoginListener: 101 | class: Binovo\ElkarBackupBundle\Listener\LoginListener 102 | arguments: [@service_container] 103 | tags: 104 | - { name: kernel.event_listener, event: security.interactive_login } 105 | BnvTwigDebug: 106 | class: Twig_Extension_Debug 107 | tags: 108 | - { name: 'twig.extension' } 109 | BnvTwigExtension: 110 | class: Binovo\ElkarBackupBundle\Twig\Extension 111 | tags: 112 | - { name: 'twig.extension' } 113 | kernel.listener.LocaleListener: 114 | class: Binovo\ElkarBackupBundle\Listener\LocaleListener 115 | arguments: ['%kernel.default_locale%'] 116 | tags: 117 | - { name: kernel.event_subscriber } 118 | Tahoe: 119 | class: Binovo\ElkarTahoeBundle\Utils\TahoeBackup 120 | arguments: ["@BnvWebLogger", %home%] 121 | parameters: 122 | supported_locales: [es, en, eu, de] 123 | -------------------------------------------------------------------------------- /elkarbackup/1.3/build/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | EB_DIR=/app/elkarbackup 4 | 5 | if [ -z "$SYMFONY_ENV" ];then 6 | export SYMFONY_ENV=prod 7 | fi 8 | 9 | # Run commands 10 | if [ ! -z "$1" ]; then 11 | command="$@" 12 | echo "Command: $command" 13 | cd "${EB_DIR}" && $command 14 | exit $? 15 | fi 16 | 17 | # Check database connection 18 | until mysqladmin ping -h "${SYMFONY__DATABASE__HOST}" --silent; do 19 | >&2 echo "MySQL is unavailable - sleeping" 20 | sleep 1 21 | done 22 | 23 | cd "${EB_DIR}" 24 | 25 | # Create/update database 26 | php app/console doctrine:database:create 27 | php app/console doctrine:migrations:migrate --no-interaction 28 | # Create admin user 29 | php app/console elkarbackup:create_admin 30 | 31 | # Set permissions 32 | setfacl -R -m u:www-data:rwX app/cache app/sessions app/logs 33 | setfacl -dR -m u:www-data:rwX app/cache app/sessions app/logs 34 | 35 | if [ ! -z "$SYMFONY__EB__PUBLIC__KEY" ] && [ ! -f "$SYMFONY__EB__PUBLIC__KEY" ];then 36 | ssh-keygen -t rsa -N "" -C "Web requested key for elkarbackup." -f "${SYMFONY__EB__PUBLIC__KEY%.*}"; 37 | fi 38 | 39 | # Clear cache and sessions, build assetics... 40 | php app/console cache:clear 41 | php app/console assetic:dump 42 | 43 | rm -rf app/sessions/* 44 | rm -rf app/cache/* 45 | 46 | # Cron 47 | if [ "${EB_CRON}" == "enabled" ]; then 48 | echo -e "\n\nEB_CRON is enabled. Running tick command every 10 seconds..." 49 | watch -t -n10 php app/console elkarbackup:tick --env=prod 50 | fi -------------------------------------------------------------------------------- /elkarbackup/1.3/build/parameters.yml.docker: -------------------------------------------------------------------------------- 1 | # parameters.yml.dist is a template 2 | parameters: 3 | database_driver: '%database.driver%' 4 | database_path: '%database.path%' 5 | database_host: '%database.host%' 6 | database_port: '%database.port%' 7 | database_name: '%database.name%' 8 | database_user: '%database.user%' 9 | database_password: '%database.password%' 10 | mailer_transport: '%mailer.transport%' 11 | mailer_host: '%mailer.host%' 12 | mailer_user: '%mailer.user%' 13 | mailer_password: '%mailer.password%' 14 | mailer_from: '%mailer.from%' 15 | locale: en 16 | secret: '%eb.secret%' 17 | upload_dir: '%eb.upload.dir%' 18 | backup_dir: '%eb.backup.dir%' 19 | public_key: '%eb.public.key%' 20 | max_log_age: P1Y 21 | tmp_dir: '%eb.tmp.dir%' 22 | rsnapshot: /usr/bin/rsnapshot 23 | warning_load_level: 0.8 24 | pagination_lines_per_page: 20 25 | url_prefix: '%eb.url.prefix%' 26 | disable_background: false 27 | tahoe_active: '%eb.tahoe.active%' 28 | home: /app/elkarbackup 29 | max_parallel_jobs: '%eb.max.parallel.jobs%' 30 | post_on_pre_fail: '%eb.post.on.pre.fail%' 31 | -------------------------------------------------------------------------------- /elkarbackup/1.3/build/src/Builder.php: -------------------------------------------------------------------------------- 1 | container->get('router'); 29 | $path = $router->generate($controller, $params, $absolute); 30 | return "onClick: function(){document.location.href='$path';}"; 31 | } 32 | 33 | /** 34 | * Recursively generates a menu from the description. 35 | * 36 | * Helper function called from generateMenuBar. 37 | * 38 | * @param object $parent The parent menu or menu bar. 39 | * 40 | * @param array $description See generateMenuBar's $description parameter. 41 | * 42 | */ 43 | protected function generateMenu($parent, array $description) 44 | { 45 | foreach ($description as $itemDescription) { 46 | if (empty($itemDescription['routeParameters'])) { 47 | $itemDescription['routeParameters'] = array(); 48 | } 49 | if (empty($itemDescription['children'])) { 50 | // submenus hijos 51 | $parent->addChild($itemDescription['label'], 52 | array('route' => $itemDescription['route'], 53 | 'routeParameters' => $itemDescription['routeParameters'], 54 | 'extras' => array('safe_label' => true), 55 | 'label' => $itemDescription['icon'], 56 | 'attributes' => array('class' => $itemDescription['class']))); 57 | } 58 | } 59 | } 60 | 61 | /** 62 | * Recursively generates a menu bar from the description. 63 | * 64 | * The description is an array of assocs. Each assoc must have a 65 | * label attribute and a route attribute or a children 66 | * attribute. The label attribute will be the menu items label, 67 | * the route attribute will be used to create the link. The 68 | * children attribute is again the same structure used for 69 | * submenus. 70 | * 71 | * @param FactoryInterface $factory 72 | * 73 | * @param array $description Menu's description. 74 | * 75 | * @return object The menu bar. 76 | * 77 | */ 78 | protected function generateMenuBar(FactoryInterface $factory, array $description) 79 | { 80 | $menuBar = $factory->createItem('root'); 81 | $menuBar->setChildrenAttribute('class', 'nav navbar-nav'); 82 | 83 | foreach ($description as $itemDescription) { 84 | if (isset($itemDescription['children']) && is_array($itemDescription['children'])) { 85 | $menuBarItem = $menuBar->addChild($itemDescription['label'].'_withsubm', 86 | array('extras' => array('safe_label' => true), 87 | 'label' => $itemDescription['icon'], 88 | 'attributes' => array('class' => $itemDescription['class']), 89 | 'childrenAttributes' => array('class' => 'dropdown-menu sub-menu'))); 90 | $this->generateMenu($menuBarItem, $itemDescription['children']); 91 | } else { 92 | if (empty($itemDescription['routeParameters'])) { 93 | $itemDescription['routeParameters'] = array(); 94 | } 95 | $menuBar->addChild($itemDescription['label'], 96 | array('route' => $itemDescription['route'], 97 | 'routeParameters' => $itemDescription['routeParameters'], 98 | 'extras' => array('safe_label' => true), 99 | 'label' => $itemDescription['icon'], 100 | 'attributes' => array('class' => $itemDescription['class']))); 101 | } 102 | } 103 | return $menuBar; 104 | } 105 | 106 | /** 107 | * Returns the main menu. 108 | * 109 | * Call from a template using the knp_menu_render function. 110 | * 111 | */ 112 | public function mainMenu(FactoryInterface $factory, array $options) 113 | { 114 | 115 | $doctrine = $this->container->get('doctrine'); 116 | $em = $doctrine->getManager(); 117 | if($this->container->get('security.context')->isGranted('ROLE_ADMIN')){ 118 | 119 | $t = $this->container->get('translator'); 120 | $menu = array(array('label' => $t->trans('Jobs', array(), 'BinovoElkarBackup'), 121 | 'route' => 'showClients', 122 | 'class' => 'Clients', 123 | 'icon' => ''.$t->trans('Jobs', array(), 'BinovoElkarBackup').''), 124 | array('label' => $t->trans('Status', array(), 'BinovoElkarBackup'), 125 | 'route' => 'showStatus', 126 | 'class' => 'Queue', 127 | 'icon' => ''.$t->trans('Status', array(), 'BinovoElkarBackup').''), 128 | array('label' => $t->trans('Policies', array(), 'BinovoElkarBackup'), 129 | 'route' => 'showPolicies', 130 | 'class' => 'Policies', 131 | 'icon' => ''.$t->trans('Policies', array(), 'BinovoElkarBackup').''), 132 | array('label' => $t->trans('Scripts', array(), 'BinovoElkarBackup'), 133 | 'route' => 'showScripts', 134 | 'class' => 'Scripts', 135 | 'icon' => ''.$t->trans('Scripts', array(), 'BinovoElkarBackup').''), 136 | array('label' => $t->trans('Users', array(), 'BinovoElkarBackup'), 137 | 'route' => 'showUsers', 138 | 'class' => 'Users', 139 | 'icon' => ''.$t->trans('Users', array(), 'BinovoElkarBackup').''), 140 | array('label' => $t->trans('Logs', array(), 'BinovoElkarBackup'), 141 | 'route' => 'showLogs', 142 | 'class' => 'Logs', 143 | 'icon' => ''.$t->trans('Logs', array(), 'BinovoElkarBackup').''), 144 | 145 | array('label' => $t->trans('Config', array(), 'BinovoElkarBackup'), 146 | 'class' => 'Config dropdown dropdown-toggle', 147 | 'icon' => '', 148 | 'children' => array(array('label' => $t->trans('Preferences', array(), 'BinovoElkarBackup'), 149 | 'route' => 'managePreferences', 150 | 'class' => 'Preferences', 151 | 'icon' => ''.$t->trans('Preferences', array(), 'BinovoElkarBackup').''), 152 | 153 | array('label' => $t->trans('Change password', array(), 'BinovoElkarBackup'), 154 | 'route' => 'changePassword', 155 | 'class' => 'changePassword', 156 | 'icon' => ''.$t->trans('Change password', array(), 'BinovoElkarBackup').''), 157 | 158 | array('label' => $t->trans('Manage backup locations', array(), 'BinovoElkarBackup'), 159 | 'route' => 'manageBackupLocations', 160 | 'class' => 'manageBackupLocations', 161 | 'icon' => ''.$t->trans('Manage backup locations', array(), 'BinovoElkarBackup').''), 162 | 163 | array('label' => $t->trans('Repository backup script', array(), 'BinovoElkarBackup'), 164 | 'route' => 'configureRepositoryBackupScript', 165 | 'class' => 'configureRepositoryBackupScript', 166 | 'icon' => ''.$t->trans('Repository backup script', array(), 'BinovoElkarBackup').''))), 167 | 168 | array('label' => $t->trans('Logout', array(), 'BinovoElkarBackup'), 169 | 'route' => 'logout', 170 | 'class' => 'logout', 171 | 'icon' => '') 172 | 173 | 174 | ); 175 | if ($this->container->get('Tahoe')->isInstalled()) { 176 | $label = $t->trans('Manage Tahoe storage', array(), 'BinovoElkarTahoe'); 177 | $menu[6]['children'][] = array('label' => $label, 178 | 'route' => 'tahoeConfig', 179 | 'class' => 'tahoeConfig', 180 | 'icon' => "$label"); 181 | } 182 | } else { 183 | 184 | $t = $this->container->get('translator'); 185 | $menu = array(array('label' => $t->trans('Jobs', array(), 'BinovoElkarBackup'), 186 | 'route' => 'showClients', 187 | 'class' => 'Clients', 188 | 'icon' => ''.$t->trans('Jobs', array(), 'BinovoElkarBackup').''), 189 | array('label' => $t->trans('Policies', array(), 'BinovoElkarBackup'), 190 | 'route' => 'showPolicies', 191 | 'class' => 'Policies', 192 | 'icon' => ''.$t->trans('Policies', array(), 'BinovoElkarBackup').''), 193 | array('label' => $t->trans('Scripts', array(), 'BinovoElkarBackup'), 194 | 'route' => 'showScripts', 195 | 'class' => 'Scripts', 196 | 'icon' => ''.$t->trans('Scripts', array(), 'BinovoElkarBackup').''), 197 | 198 | array('label' => $t->trans('Logs', array(), 'BinovoElkarBackup'), 199 | 'route' => 'showLogs', 200 | 'class' => 'Logs', 201 | 'icon' => ''.$t->trans('Logs', array(), 'BinovoElkarBackup').''), 202 | 203 | array('label' => $t->trans('Config', array(), 'BinovoElkarBackup'), 204 | 'class' => 'Config dropdown dropdown-toggle', 205 | 'icon' => '', 206 | 'children' => array(array('label' => $t->trans('Preferences', array(), 'BinovoElkarBackup'), 207 | 'route' => 'managePreferences', 208 | 'class' => 'Preferences', 209 | 'icon' => ''.$t->trans('Preferences', array(), 'BinovoElkarBackup').''), 210 | 211 | array('label' => $t->trans('Change password', array(), 'BinovoElkarBackup'), 212 | 'route' => 'changePassword', 213 | 'class' => 'changePassword', 214 | 'icon' => ''.$t->trans('Change password', array(), 'BinovoElkarBackup').'') 215 | )), 216 | 217 | 218 | array('label' => $t->trans('Logout', array(), 'BinovoElkarBackup'), 219 | 'route' => 'logout', 220 | 'class' => 'logout', 221 | 'icon' => '') 222 | 223 | ); 224 | 225 | } 226 | return $this->generateMenuBar($factory, $menu); 227 | } 228 | 229 | private function getLanguageMenuEntries() 230 | { 231 | $t = $this->container->get('translator'); 232 | $locales = $this->container->getParameter('supported_locales'); 233 | $menus = array(); 234 | foreach ($locales as $locale) { 235 | $menus[] = array('label' => $t->trans("language_$locale", array(), 'BinovoElkarBackup'), 236 | 'route' => 'setLocale', 237 | 'routeParameters' => array('locale' => $locale)); 238 | } 239 | return $menus; 240 | } 241 | } 242 | -------------------------------------------------------------------------------- /elkarbackup/1.3/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | elkarbackup: 5 | #build: ./apache 6 | image: elkarbackup/elkarbackup:1.3.5-apache 7 | environment: 8 | SYMFONY__DATABASE__PASSWORD: "your-password-here" 9 | EB_CRON: "enabled" 10 | #volumes: 11 | #- backups:/app/backups 12 | #- uploads:/app/uploads 13 | #- sshkeys:/app/.ssh 14 | ports: 15 | - 8000:80 16 | 17 | db: 18 | image: mysql:5.7.22 19 | environment: 20 | MYSQL_ROOT_PASSWORD: "your-password-here" 21 | volumes: 22 | - db:/var/lib/mysql 23 | 24 | client: 25 | image: elkarbackup/client 26 | 27 | volumes: 28 | db: 29 | # backups: 30 | # uploads: 31 | # sshkeys: 32 | --------------------------------------------------------------------------------