diff --git a/apache/Dockerfile b/apache/Dockerfile index 66eb0fc..84bc355 100644 --- a/apache/Dockerfile +++ b/apache/Dockerfile @@ -12,6 +12,7 @@ RUN apt-get update && \ libkrb5-dev \ libpng-dev \ libpq-dev \ + netcat \ && apt-get autoclean; apt-get autoremove && \ rm -rf /var/lib/apt/lists/* @@ -38,3 +39,7 @@ ADD "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" /tmp RUN tar xzvf "/tmp/${version}.tar.gz" --strip-components=1 -C /var/www/html/ && \ rm "/tmp/${version}.tar.gz" && \ chown -R www-data:www-data /var/www/html + +COPY entrypoint.sh entrypoint.sh +ENTRYPOINT ["/var/www/html/entrypoint.sh"] +CMD ["apache2-foreground"] diff --git a/apache/entrypoint.sh b/apache/entrypoint.sh new file mode 120000 index 0000000..219ebb2 --- /dev/null +++ b/apache/entrypoint.sh @@ -0,0 +1 @@ +../entrypoint.sh \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index d25b7e5..fd560b4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,10 @@ services: - lime-db ports: - "8080:80" + environment: + - "DB_HOST=docker-limesurvey_lime-db_1" + - "DB_PASSWORD=secret" + - "ADMIN_PASSWORD=foobar" lime-db: image: mysql:5.7 environment: diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..2449d1e --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +set -e + +DB_TYPE=${DB_TYPE:-'mysql'} +DB_HOST=${DB_HOST:-'mysql'} +DB_PORT=${DB_PORT:-'3306'} +DB_NAME=${DB_NAME:-'limesurvey'} +DB_TABLE_PREFIX=${DB_TABLE_PREFIX:-'lime_'} +DB_USERNAME=${DB_USERNAME:-'limesurvey'} +DB_PASSWORD=${DB_PASSWORD:-} + +ADMIN_USER=${ADMIN_USER:-'admin'} +ADMIN_NAME=${ADMIN_NAME:-'admin'} +ADMIN_EMAIL=${ADMIN_EMAIL:-'foobar@example.com'} +ADMIN_PASSWORD=${ADMIN_PASSWORD:-'-'} + +PUBLIC_URL=${PUBLIC_URL:-} +URL_FORMAT=${URL_FORMAT:-'path'} + + +# Check if DB_PASSWORD is set +if [ -z "$DB_PASSWORD" ]; then + echo >&2 'Error: Missing DB_PASSWORD' + exit 1 +fi + +# Check if DB_PASSWORD is set +if [ -z "$ADMIN_PASSWORD" ]; then + echo >&2 'Error: Missing ADMIN_PASSWORD' + exit 1 +fi + +# Check if already provisioned +if [ -f application/config/config.php ]; then + echo 'Info: config.php already provisioned' +else + echo 'Info: Generating config.php' + + if [ "$DB_TYPE" = 'mysql' ]; then + echo 'Info: Using MySQL configuration' + DB_CHARSET=${DB_CHARSET:-'utf8mb4'} + cp application/config/config-sample-mysql.php application/config/config.php + fi + + if [ "$DB_TYPE" = 'postgresql' ]; then + echo 'Info: Using PostgreSQL configuration' + DB_CHARSET=${DB_CHARSET:-'utf8'} + cp application/config/config-sample-pgsql.php application/config/config.php + fi + + # Set Database config + sed -i "s#\('connectionString' => \).*,\$#\\1'${DB_TYPE}:host=${DB_HOST};port=${DB_PORT};dbname=${DB_NAME};',#g" application/config/config.php + sed -i "s#\('username' => \).*,\$#\\1'${DB_USERNAME}',#g" application/config/config.php + sed -i "s#\('password' => \).*,\$#\\1'${DB_PASSWORD}',#g" application/config/config.php + sed -i "s#\('charset' => \).*,\$#\\1'${DB_CHARSET}',#g" application/config/config.php + sed -i "s#\('tablePrefix' => \).*,\$#\\1'${DB_TABLE_PREFIX}',#g" application/config/config.php + + # Set URL config + sed -i "s#\('urlFormat' => \).*,\$#\\1'${URL_FORMAT}',#g" application/config/config.php + + # Set Public URL + if [ -z "$PUBLIC_URL" ]; then + echo 'Info: Setting PublicURL' + sed -i "s#\('debug'=>0,\)\$#'publicurl'=>'${PUBLIC_URL}',\n\t\t\\1 #g" application/config/config.php + fi +fi + +until nc -z -v -w30 $DB_HOST $DB_PORT +do + echo "Info: Waiting for database connection..." + sleep 5 +done + +echo 'Running console.php install' +# Hint: The console.php script seems to always exit with 1, so that is why +php application/commands/console.php install $ADMIN_USER $ADMIN_PASSWORD $ADMIN_NAME $ADMIN_EMAIL || true + +exec "$@" diff --git a/fpm/Dockerfile b/fpm/Dockerfile index d879edc..6b96678 100644 --- a/fpm/Dockerfile +++ b/fpm/Dockerfile @@ -12,6 +12,7 @@ RUN apt-get update && \ libkrb5-dev \ libpng-dev \ libpq-dev \ + netcat \ && apt-get autoclean; apt-get autoremove && \ rm -rf /var/lib/apt/lists/* @@ -38,3 +39,7 @@ ADD "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" /tmp RUN tar xzvf "/tmp/${version}.tar.gz" --strip-components=1 -C /var/www/html/ && \ rm "/tmp/${version}.tar.gz" && \ chown -R www-data:www-data /var/www/html + +COPY entrypoint.sh entrypoint.sh +ENTRYPOINT ["/var/www/html/entrypoint.sh"] +CMD ["php-fpm"] diff --git a/fpm/entrypoint.sh b/fpm/entrypoint.sh new file mode 120000 index 0000000..219ebb2 --- /dev/null +++ b/fpm/entrypoint.sh @@ -0,0 +1 @@ +../entrypoint.sh \ No newline at end of file diff --git a/tests/image_tests.yaml b/tests/image_tests.yaml index 8a07bda..2d316e1 100644 --- a/tests/image_tests.yaml +++ b/tests/image_tests.yaml @@ -8,6 +8,9 @@ fileContentTests: - name: 'Limesurvey admin file content' path: '/var/www/html/admin/index.php' expectedContents: ['LimeSurvey'] + - name: 'Entrypoint file content' + path: '/var/www/html/entrypoint.sh' + expectedContents: ['console.php', 'ADMIN_USER'] fileExistenceTests: - name: 'Limesurvey files' @@ -47,6 +50,10 @@ fileExistenceTests: shouldExist: true commandTests: + - name: "Dependencies - netcat" + command: "dpkg" + args: ["-l", "netcat"] + exitCode: 0 - name: "Dependencies - libldap2-dev" command: "dpkg" args: ["-l", "libldap2-dev"]