Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
adapted my Drupal - Docker setup to gibbon
  • Loading branch information
Paul Lebmann committed Apr 9, 2021
0 parents commit 774a7ab
Show file tree
Hide file tree
Showing 15 changed files with 1,073 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.env
db/initdb
db/backup
crontab/config.json
23 changes: 23 additions & 0 deletions crontab/config.json.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[{
"name":"database-backup",
"comment":"create hourly database backups",
"schedule":"02 7-19,23 * * *",
"command":"/backupscripts/simplebackup_hourly.sh",
"project":"PROJECTNAME",
"container":"db"
},{
"name":"backupreduce-daily",
"comment":"keep last backup from yesterday and delete the rest",
"schedule":"@daily",
"command":"/backupscripts/backupreduce_daily.sh",
"project":"PROJECTNAME",
"container":"db"
},{
"name":"backupreduce-monthly",
"comment":"keep last backup from last month and delete the rest",
"schedule":"@monthly",
"command":"/backupscripts/backupreduce_monthly.sh",
"project":"PROJECTNAME",
"container":"db"
}]

6 changes: 6 additions & 0 deletions crontab_create.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash

PROJECT=${PWD##*/}
CONFIGFILE=config.json

sed "s/PROJECTNAME/${PROJECT}/g" ./crontab/config.json.template > ./crontab/$CONFIGFILE
20 changes: 20 additions & 0 deletions db/backupscripts/backupreduce_daily.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/sh
if [ -z "$BACKUP_DB_NAME" ]; then
if [ -z "$MYSQL_DATABASE" ]; then
echo "Neither Environment variable BACKUP_DB_NAME nor MYSQL_DATABASE set"
exit 1
fi
BACKUP_DB_NAME=$MYSQL_DATABASE
fi


DATUM=$(date +"%Y%m%d-%H%M")
DATUMGESTERNBACKUP=$(date -d "yesterday 23:00" +"%Y%m%d-%H%M")
DATUMGESTERN=$(date -d "yesterday" +"%Y%m%d")

DATUMP=$(date +"%Y-%m-%d %H:%M")
mv /backup/backup-db-"$BACKUP_DB_NAME"-"$DATUMGESTERN"-23* /backup/backup-db-"$BACKUP_DB_NAME"-"$DATUMGESTERN".sql.gz
echo "$DATUMP => moved backup-db-"$BACKUP_DB_NAME"-"$DATUMGESTERNBACKUP".sql.gz to backup-db-"$BACKUP_DB_NAME"-"$DATUMGESTERN".sql.gz"
find /backup/ -name \*${DATUMGESTERN}-\* -delete

echo "$DATUMP => removed hourly backups from $DATUMGESTERN"
25 changes: 25 additions & 0 deletions db/backupscripts/backupreduce_monthly.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/sh

if [ -z "$BACKUP_DB_NAME" ]; then
if [ -z "$MYSQL_DATABASE" ]; then
echo "Neither Environment variable BACKUP_DB_NAME nor MYSQL_DATABASE set"
exit 1
fi
BACKUP_DB_NAME=$MYSQL_DATABASE
fi


#DATUM=$(date +"%Y%m%d-%H%M")
DATUMJAHR=$(date +"%Y")
DATUMMONAT=$(date +"%m")
DATUMLETZTERMONAT=$(date --date="$(date +%Y-%m-15) -1 month" +'%Y%m')
DATUMGESTERN=$(date -d "yesterday" +"%Y%m%d")

DATUMP=$(date +"%Y-%m-%d %H:%M")
mv "/backup/backup-db-"$BACKUP_DB_NAME"-"$DATUMGESTERN".sql.gz" "/backup/backup-db-"$BACKUP_DB_NAME"-"$DATUMLETZTERMONAT".sql.gz"
echo "$DATUMP => moved backup-db-"$BACKUP_DB_NAME"-"$DATUMGESTERN".sql.gz to backup-db-"$BACKUP_DB_NAME"-"$DATUMLETZTERMONAT".sql.gz"
find /backup/ -regex ".*"$DATUMLETZTERMONAT"[0-9][0-9].*" -delete
#find /backup/ -regex ".*"$DATUMLETZTERMONAT"[0-9][0-9].*"
#find /backup/ -regex ".*$(echo $DATUMLETZTERMONAT)[0-9][0-9].*"

echo "$DATUMP => removed daily backups from $DATUMLETZTERMONAT"
16 changes: 16 additions & 0 deletions db/backupscripts/simplebackup_daily.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/sh

DATUM=$(date +"%Y%m%d")

if [ -z "$BACKUP_DB_NAME" ]; then
if [ -z "$MYSQL_DATABASE" ]; then
echo "Neither Environment variable BACKUP_DB_NAME nor MYSQL_DATABASE set"
exit 1
fi
BACKUP_DB_NAME=$MYSQL_DATABASE
fi


mysqldump -u root --password=$MYSQL_ROOT_PASSWORD $BACKUP_DB_NAME | gzip > "/backup/backup-db-"$BACKUP_DB_NAME"-"$DATUM".sql.gz"
DATUMP=$(date +"%Y-%m-%d %H:%M")
echo "$DATUMP => Backed up database"
16 changes: 16 additions & 0 deletions db/backupscripts/simplebackup_hourly.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/sh

DATUM=$(date +"%Y%m%d-%H%M")

if [ -z "$BACKUP_DB_NAME" ]; then
if [ -z "$MYSQL_DATABASE" ]; then
echo "Neither Environment variable BACKUP_DB_NAME nor MYSQL_DATABASE set"
exit 1
fi
BACKUP_DB_NAME=$MYSQL_DATABASE
fi


mysqldump -u root --password=$MYSQL_ROOT_PASSWORD $BACKUP_DB_NAME | gzip > "/backup/backup-db-"$BACKUP_DB_NAME"-"$DATUM".sql.gz"
DATUMP=$(date +"%Y-%m-%d %H:%M")
echo "$DATUMP => Backed up database"
108 changes: 108 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
version: '3.8'

services:
db:
image: mariadb
hostname: mariadb
restart: always
environment:
- LANG=de_DE.utf8
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
volumes:
- ./db/initdb:/docker-entrypoint-initdb.d
- gibbon-db-data:/var/lib/mysql
- gibbon-db-log:/var/log/mysql
- ./db/backup:/backup
- ./db/backupscripts:/backupscripts
- /etc/localtime:/etc/localtime:ro
networks:
- default
- backup

apache:
build: ./webserver
hostname: gibbon-apache
restart: always
depends_on:
- php
environment:
- GIBBON_SITENAME
- SERVER_ADMIN_MAIL
- VIRTUAL_HOST=${GIBBON_SITENAME}
# - LETSENCRYPT_HOST
# - LETSENCRYPT_EMAIL
# ports:
# - 80:80
volumes:
- /etc/localtime:/etc/localtime:ro
- gibbon-root:${GIBBON_BASEDIR}
networks:
- default
- webfront

php:
build:
context: ./php
dockerfile: Dockerfile
target: dev
hostname: gibbon-php
restart: always
environment:
- AUTOUPGRADE
- DEVELOPER_NAME
- DEVELOPER_EMAIL
- GIBBON_SITENAME
- GIBBON_VERSION
- GIBBON_DB_HOST=mariadb
- GIBBON_DB_PORT=3306
- GIBBON_DB_DB=${MYSQL_DATABASE}
- GIBBON_DB_USER=${MYSQL_USER}
- GIBBON_DB_PASSWORD=${MYSQL_PASSWORD}
- GIBBON_BASEDIR
- DEV_SITE
volumes:
- gibbon-root:${GIBBON_BASEDIR}
networks:
- default

crontab:
image: willfarrell/crontab
depends_on:
- php
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/localtime:/etc/localtime:ro
- ./crontab/config.json:/opt/crontab/config.json:rw

smtpd:
image: namshi/smtp
restart: always
depends_on:
- php
volumes:
- /etc/localtime:/etc/localtime:ro
environment:
- MAILNAME
- SMARTHOST_ADDRESS
- SMARTHOST_PORT
- SMARTHOST_USER
- SMARTHOST_PASSWORD
- SMARTHOST_ALIASES
networks:
- default

volumes:
gibbon-db-data:
gibbon-db-log:
gibbon-root:

networks:
webfront:
external:
name: webfront
backup:
external:
name: backup
18 changes: 18 additions & 0 deletions example.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

MYSQL_ROOT_PASSWORD=yourmysqlrootpassword
MYSQL_DATABASE=gibbon
MYSQL_USER=gibbon
MYSQL_PASSWORD=yourmysqlgibbonrandompassword

GIBBON_SITENAME=[email protected]
GIBBON_BASEDIR=/var/www/html
#GIBBON_GIT_REPO=
SERVER_ADMIN_MAIL=[email protected]

MAILNAME=[email protected]
GIBBON_VERSION=21.0.01
SMARTHOST_ADDRESS=[email protected]
SMARTHOST_PORT=25
SMARTHOST_USER=yourmailuser
SMARTHOST_PASSWORD=yourmailuserpassword
SMARTHOST_ALIASES=*.yourdomain.edu
24 changes: 24 additions & 0 deletions php/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
FROM php:7.4-fpm-alpine as minimum

# necessary if pecl has to be used later
ENV LIBRARY_PATH=/lib:/usr/lib
RUN apk add zlib-dev libpng-dev libjpeg-turbo-dev freetype-dev libzip-dev oniguruma-dev imagemagick imagemagick-dev gettext gettext-dev $PHPIZE_DEPS \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install pdo_mysql gd opcache zip gettext \
# && docker-php-ext-enable apcu \
&& cp "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

## add gibbon specific settings to php.ini
COPY ./gibbon-php-settings.ini "$PHP_INI_DIR/conf.d/gibbon-php-settings.ini"
COPY ./docker-php-mailrelay.ini "$PHP_INI_DIR/conf.d/docker-php-mailrelay.ini"

RUN cp "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

FROM minimum as dev

COPY ./docker-php-gibbonsetup /usr/local/bin/

RUN apk add rsync \
&& cp "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" \
&& chmod 0755 /usr/local/bin/docker-php-gibbonsetup \
&& sed -i "`wc -l < /usr/local/bin/docker-php-entrypoint`i\\/usr/local/bin/docker-php-gibbonsetup\\" /usr/local/bin/docker-php-entrypoint
30 changes: 30 additions & 0 deletions php/docker-php-gibbonsetup
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/sh

# GIBBON_VERSION set in .env file
GIBBON_INSTALLED_VERSION=$(grep $GIBBON_VERSION /var/www/html/version.php)

echo "-------------- Checking if a gibbon is up to date ----------------"
if echo "$GIBBON_INSTALLED_VERSION" | grep -q "$GIBBON_VERSION"; then
echo "-------------- Gibbon is up to date ----------------"
else
echo "-------------- Downloading gibbon ----------------"
su -s /bin/sh -c "cd /tmp && wget https://github.com/GibbonEdu/core/archive/v${GIBBON_VERSION}.tar.gz" www-data
echo "-------------- Moving gibbon into place ----------------"
su -s /bin/sh -c "tar xfz /tmp/v${GIBBON_VERSION}.tar.gz -C /tmp/" www-data
chown www-data:www-data -R /tmp/core-${GIBBON_VERSION}
rsync -vua /tmp/core-${GIBBON_VERSION}/ ${GIBBON_BASEDIR}
# su -s /bin/sh -c "rsync -vua /tmp/core-${GIBBON_VERSION}/ /var/www/html/" www-data
# su -s /bin/sh -c "rm /tmp/v${GIBBON_VERSION}.tar.gz && rm -rf /tmp/core-${GIBBON_VERSION}" www-data
chown www-data:www-data -R ${GIBBON_BASEDIR}
echo "-------------- check index.html exists ----------------"
if [ ! -f "${GIBBON_BASEDIR}/index.html" ]; then
echo "-------------- removeint index.html ----------------"
rm ${GIBBON_BASEDIR}/index.html
else
echo "-------------- index.html does not exist, everything is fine ----------------"
fi
sed -i "s/$databaseServer = .*$/$databaseServer = '${GIBBON_DB_HOST}';/g" ${GIBBON_BASEDIR}/config.php
sed -i "s/$databaseUsername = .*$/$databaseUsername = '${GIBBON_DB_USER}';/g" ${GIBBON_BASEDIR}/config.php
sed -i "s/$databasePassword = .*$/$databasePassword = '${GIBBON_DB_PASSWORD}';/g" ${GIBBON_BASEDIR}/config.php
sed -i "s/$databaseName = .*$/$databaseName = '${GIBBON_DB_DB}';/g" ${GIBBON_BASEDIR}/config.php
fi
1 change: 1 addition & 0 deletions php/docker-php-mailrelay.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sendmail_path=/usr/sbin/sendmail -S smtpd -t -i
Loading

0 comments on commit 774a7ab

Please sign in to comment.