Compare commits

...

71 Commits

Author SHA1 Message Date
Markus Opolka
bdcab55309 Upgrading to Version 5.0.4+210614 2021-06-22 07:53:53 +02:00
Markus Opolka
2755985321 Upgrading to LTS Version 3.27.3+210615 2021-06-22 07:46:01 +02:00
Jack Henschel
cb5b062980 Minor workflow fixes (#70)
* YAML indentation
* Correct image labels
2021-06-21 19:38:58 +02:00
Jack Henschel
3890f9f73a Build and push images with Github Actions to DockerHub (#68)
* Build and push images with Github Actions to DockerHub
* Remove Travis CI configuration

References:
* https://docs.github.com/en/actions/guides/publishing-docker-images
* https://github.com/docker/build-push-action/blob/master/docs/advanced/tags-labels.md
* https://github.com/docker/metadata-action

Note: docker / buildx does not support '+' in the image tag name.
> invalid tag "martialblog/limesurvey:0.0.0+test5-apache": invalid
reference format

Use underscores instead, like the images already have on Dockerhub.

Co-authored-by: Markus Opolka <markus.opolka@iis.fraunhofer.de>
2021-06-21 13:27:58 +02:00
Markus Opolka
c181f3a832 Upgrading to Version 5.0.3+210609 2021-06-15 08:13:04 +02:00
Markus Opolka
eda09e735e Upgrading to LTS Version 3.27.2+210608 2021-06-15 08:12:10 +02:00
Markus Opolka
80a5f95fab Upgrading to Version 5.0.2+210607 2021-06-09 07:44:57 +02:00
Nimrod Zimerman
65c1902247 Fix Apache LISTEN_PORT "sed" command to look for whole "Listen" command (#64)
Otherwise, if the replaced port number contains "80" (for example, "8080",
as is now the default), it is replaced over and over on each activation
2021-06-08 09:56:17 +02:00
Markus Opolka
387fcf11f4 Upgrading to Version 5.0.1+210532 2021-06-07 16:46:51 +02:00
Markus Opolka
3ffdb0d003 Upgrading to LTS Version 3.27.1+210531 2021-06-07 16:46:06 +02:00
Markus Opolka
4e99ca384c Upgrading to LTS Version 3.27.0+210525 2021-06-07 08:32:03 +02:00
Markus Opolka
30eef8abc1 Upgrade to LimeSurvey 5.0 (#62)
* Add Dockerfiles for LimeSurvey 5.0

 - This changes the default user to www-data in the Apache2 Images
 - Removed extra download layer
 - Add LS 5.0 Update Guide
 - Update base images to PHP 8.0
 - Add Variable for showScriptName
2021-06-07 07:59:53 +02:00
Markus Opolka
958ed57011 Upgrading to Version 4.6.3+210518 2021-05-25 18:52:23 +02:00
Markus Opolka
628cb942af Upgrading to LTS Version 3.26.5+210519 2021-05-25 18:51:31 +02:00
Markus Opolka
3165dffe31 Upgrading to Version 4.6.2+210512 2021-05-17 20:25:56 +02:00
Markus Opolka
bd28fb2796 Upgrading to LTS Version 3.26.3+210511 2021-05-17 20:25:11 +02:00
Markus Opolka
8830f66b10 Upgrading to Version 4.6.1+210510 2021-05-11 08:22:50 +02:00
Markus Opolka
456a2ab4d2 Upgrading to LTS Version 3.26.2+210503 2021-05-11 08:22:14 +02:00
Markus Opolka
fd744e5c46 Update README 2021-05-11 08:21:17 +02:00
Markus Opolka
f1b7efb2d5 Add configuration to run apache containers as www-data user (#61)
- in preparation for changing the default to www-data,
   which will happen at some time in the future
2021-05-09 11:35:41 +02:00
Markus Opolka
74b3f31ee4 Upgrading to Version 4.5.2+210426 2021-05-05 12:40:28 +02:00
Markus Opolka
fc6f655cf7 Upgrading to LTS Version 3.26.1+210427 2021-05-05 12:39:26 +02:00
Michael Prankl
01f6b41082 Customize Apache listen port (#59)
* Overwrite apache listen port in Apache configuration if configured via environment variable LISTEN_PORT
* Add documenation to README
* Add default value to ENV vars documentation

Co-authored-by: Michael Prankl <michael.prankl@muenchen.de>
2021-05-01 13:12:43 +02:00
Markus Opolka
c8d36cf425 Upgrading to Version 4.5.1+210420 2021-04-26 19:02:41 +02:00
Markus Opolka
0f7900e237 Upgrading to LTS Version 3.26.0+210419 2021-04-26 19:01:38 +02:00
Markus Opolka
a782896897 Upgrading to Version 4.5.0+210412 2021-04-19 17:53:54 +02:00
Markus Opolka
ce70ec3000 Upgrading to LTS Version 3.25.22+210413 2021-04-19 17:51:31 +02:00
Markus Opolka
0403aa1208 Upgrading to Version 4.4.16+210406 2021-04-12 17:02:11 +02:00
Markus Opolka
5a011e6818 Upgrading to LTS Version 3.25.21+210407 2021-04-12 17:01:30 +02:00
Markus Opolka
bb23531c6d Upgrading to Version 4.4.15+210329 2021-04-07 17:34:02 +02:00
Markus Opolka
69e8bcec7e Upgrading to LTS Version 3.25.20+210330 2021-04-07 17:33:18 +02:00
Markus Opolka
d26552bb6f Merge pull request #55 from PabloCastellano/master
Use docker volumes for postgres database
2021-04-04 07:26:02 +02:00
Pablo Castellano
1360fb8001 Use docker volumes for postgres database 2021-04-03 11:26:30 +02:00
Markus Opolka
fceae6b3cd Upgrading to Version 4.4.14+210322 2021-03-30 08:00:45 +02:00
Markus Opolka
b62a83ac83 Upgrading to LTS Version 3.25.19+210323 2021-03-30 07:59:56 +02:00
Markus Opolka
d106c2ceb6 Merge pull request #53 from martialblog/hadolint
Add Hadolint to CI
2021-03-22 20:14:46 +01:00
Markus Opolka
0c4690c97a Add hadolint to CI 2021-03-22 20:06:08 +01:00
Markus Opolka
ebb51363a1 Optimise nginx certbot example Dockerfile 2021-03-22 20:05:30 +01:00
Markus Opolka
debb4037a2 Upgrading to Version 4.4.13+210315 2021-03-22 19:45:58 +01:00
Markus Opolka
d7751f41d4 Upgrading to LTS Version 3.25.18+210316 2021-03-22 19:44:47 +01:00
Markus Opolka
47be732839 Merge pull request #52 from martialblog/fix-gd
Fix gd installation and add tidy/sodium lib
2021-03-22 19:43:58 +01:00
Markus Opolka
7da025f19a Fix gd installation and add tidy/sodium lib 2021-03-21 11:15:29 +01:00
Markus Opolka
cefd0a5c75 Upgrading to Version 4.4.12+210308 2021-03-16 06:29:22 +01:00
Markus Opolka
086903f0b4 Upgrading to LTS Version 3.25.17+210309 2021-03-16 06:28:36 +01:00
Markus Opolka
a619f5b8b7 Upgrading to Version 4.4.11+210301 2021-03-08 18:05:57 +01:00
Markus Opolka
f0c42a8bc2 Upgrading to LTS Version 3.25.16+210302 2021-03-08 18:05:00 +01:00
Markus Opolka
a6668c1fd2 Upgrading to Version 4.4.10+210222 2021-03-01 13:17:50 +01:00
Markus Opolka
ddcd2c868a Upgrading to LTS Version 3.25.15+210223 2021-03-01 13:17:08 +01:00
Markus Opolka
e3c0c3a9d0 Upgrading to Version 4.4.9+210219 2021-02-23 07:26:49 +01:00
Markus Opolka
eb1354a42a Upgrading to LTS Version 3.25.14+210218 2021-02-23 07:25:57 +01:00
Markus Opolka
448fb092a6 Upgrading to Version 4.4.8+210217 2021-02-17 16:16:10 +01:00
Markus Opolka
97c806aada Upgrading to LTS Version 3.25.12+210211 2021-02-17 16:15:11 +01:00
Markus Opolka
263b64e9f9 Upgrading to Version 4.4.6+210214 2021-02-12 17:33:54 +01:00
Markus Opolka
bab97c1eab Upgrading to Version 4.4.5+210213 2021-02-12 05:55:39 +01:00
Markus Opolka
064611ced5 Upgrading to Version 4.4.3+210209 2021-02-10 09:22:48 +01:00
Markus Opolka
c7ea723349 Upgrading to LTS Version 3.25.11+210210 2021-02-10 09:22:00 +01:00
Markus Opolka
81ec0452b9 Upgrading to Version 4.4.2+210208 2021-02-09 09:40:45 +01:00
Markus Opolka
eecb83fc99 Upgrading to LTS Version 3.25.10+210128 2021-02-09 09:38:44 +01:00
Markus Opolka
c2ad0c38cc Upgrading to Version 4.4.0+210129 2021-02-02 07:52:34 +01:00
Markus Opolka
b2f25dac02 Upgrading to Version 4.3.34+210119 2021-01-29 07:22:49 +01:00
Markus Opolka
64ad7966fd Upgrading to LTS Version 3.25.9+210125 2021-01-29 07:21:54 +01:00
Markus Opolka
9833519c9f Upgrading to LTS Version 3.25.8+210118 2021-01-26 07:51:00 +01:00
Markus Opolka
7438aecf40 Upgrading to LTS Version 3.25.7+210113 2021-01-18 18:45:11 +01:00
Markus Opolka
80ebadd26d Upgrading to Version 4.3.33+201228 2021-01-12 09:11:47 +01:00
Markus Opolka
d99c00d482 Upgrading to LTS Version 3.25.6+201229 2021-01-12 09:10:50 +01:00
Markus Opolka
a3d86a1779 Upgrading to LTS Version 3.25.5+201222 2020-12-29 18:19:22 +01:00
Markus Opolka
f008494a2d Upgrading to Version 4.3.32+201221 2020-12-23 05:47:42 +01:00
Markus Opolka
a44db5df62 Upgrading to Version 4.3.31+201214 2020-12-21 15:10:48 +01:00
Markus Opolka
03a0d9a16e Upgrading to LTS Version 3.25.4+201215 2020-12-21 15:09:51 +01:00
Markus Opolka
15f46a40b9 Upgrading to Version 4.3.30+201207 2020-12-14 17:47:06 +01:00
Markus Opolka
f7f8bbcbae Upgrading to LTS Version 3.25.3+201208 2020-12-14 17:46:21 +01:00
31 changed files with 1070 additions and 85 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# force LF in entrypoint.sh
entrypoint.sh text eol=lf

View File

@@ -0,0 +1,109 @@
name: Publish Latest Container Images
on:
push:
tags:
- '5.*'
jobs:
lint_dockerfiles:
name: Lint Dockerfile with hadolint
runs-on: ubuntu-latest
strategy:
matrix:
dockerfile:
- 5.0/apache/Dockerfile
- 5.0/fpm-alpine/Dockerfile
- 5.0/fpm/Dockerfile
steps:
- uses: actions/checkout@v2
- uses: hadolint/hadolint-action@v1.5.0
with:
dockerfile: ${{ matrix.dockerfile }}
ignore: DL4006 DL3008 DL3018
push_images_to_registries:
name: Push Container Images to registries
runs-on: ubuntu-latest
needs: [lint_dockerfiles]
environment: docker-build
permissions:
packages: write
contents: read
steps:
- name: 'Check out the repo'
uses: actions/checkout@v2
- name: 'Set up Docker Buildx'
uses: docker/setup-buildx-action@v1
with:
buildkitd-flags: --debug
- name: 'Log in to DockerHub'
if: github.event_name != 'pull_request'
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
## Can be enabled in the future
# - name: Log in to GitHub Container Registry
# uses: docker/login-action@v1
# with:
# registry: gchr.io
# username: ${{ github.repository_owner }}
# password: ${{ secrets.GITHUB_TOKEN }}
- name: 'Apache variant metadata'
id: metadata-apache
uses: docker/metadata-action@v3
with:
images: |
docker.io/martialblog/limesurvey
## Can be enabled in the future
# ghcr.io/martialblog/limesurvey
tags: |
type=semver,pattern={{raw}},suffix=-apache
type=semver,pattern={{major}},suffix=-apache
flavor: |
latest=false
- name: 'Build and push latest Apache container images'
uses: docker/build-push-action@v2
with:
context: 5.0/apache
push: true
tags: ${{ steps.metadata-apache.outputs.tags }}
labels: ${{ steps.metadata-apache.outputs.labels }}
- name: 'FPM variant metadata'
id: metadata-fpm
uses: docker/metadata-action@v3
with:
images: |
docker.io/martialblog/limesurvey
## Can be enabled in the future
# ghcr.io/martialblog/limesurvey
tags: |
type=semver,pattern={{version}},suffix=-fpm
type=semver,pattern={{major}},suffix=-fpm
- name: 'Build and push latest fpm container images'
uses: docker/build-push-action@v2
with:
context: 5.0/fpm
push: true
tags: ${{ steps.metadata-fpm.outputs.tags }}
labels: ${{ steps.metadata-fpm.outputs.labels }}
- name: 'FPM Alpine variant metadata'
id: metadata-fpm-alpine
uses: docker/metadata-action@v3
with:
images: |
docker.io/martialblog/limesurvey
## Can be enabled in the future
# ghcr.io/martialblog/limesurvey
tags: |
type=semver,pattern={{version}},suffix=-fpm-alpine
type=semver,pattern={{major}},suffix=-fpm-alpine
- name: 'Build and push latest fpm-alpine container images'
uses: docker/build-push-action@v2
with:
context: 5.0/fpm-alpine
push: true
tags: ${{ steps.metadata-fpm-alpine.outputs.tags }}
labels: ${{ steps.metadata-fpm-alpine.outputs.labels }}

View File

@@ -0,0 +1,110 @@
name: Publish LTS Container Images
on:
push:
tags:
- '3.*'
jobs:
lint_dockerfiles:
name: 'Lint Dockerfile with hadolint'
runs-on: ubuntu-latest
strategy:
matrix:
dockerfile:
- 3.0/apache/Dockerfile
- 3.0/fpm-alpine/Dockerfile
- 3.0/fpm/Dockerfile
steps:
- uses: actions/checkout@v2
- uses: hadolint/hadolint-action@v1.5.0
with:
dockerfile: ${{ matrix.dockerfile }}
ignore: DL4006 DL3008 DL3018
push_images_to_registries:
name: 'Push container images to registries'
runs-on: ubuntu-latest
needs: [lint_dockerfiles]
environment: docker-build
permissions:
packages: write
contents: read
steps:
- name: 'Check out the repo'
uses: actions/checkout@v2
- name: 'Set up Docker Buildx'
uses: docker/setup-buildx-action@v1
with:
buildkitd-flags: --debug
- name: 'Log in to DockerHub'
if: github.event_name != 'pull_request'
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
## Can be enabled in the future
# - name: Log in to GitHub Container Registry
# uses: docker/login-action@v1
# with:
# registry: gchr.io
# username: ${{ github.repository_owner }}
# password: ${{ secrets.GITHUB_TOKEN }}
- name: 'Apache variant metadata'
id: metadata-apache
uses: docker/metadata-action@v3
with:
images: |
docker.io/martialblog/limesurvey
## Can be enabled in the future
# ghcr.io/martialblog/limesurvey
tags: |
type=semver,pattern={{raw}},suffix=-apache
type=semver,pattern={{major}},suffix=-apache
flavor: |
latest=false
- name: 'Build and push LTS apache container images'
uses: docker/build-push-action@v2
with:
context: 3.0/apache
push: true
tags: ${{ steps.metadata-apache.outputs.tags }}
labels: ${{ steps.metadata-apache.outputs.labels }}
- name: 'FPM variant metadata'
id: metadata-fpm
uses: docker/metadata-action@v3
with:
images: |
docker.io/martialblog/limesurvey
## Can be enabled in the future
# ghcr.io/martialblog/limesurvey
tags: |
type=semver,pattern={{version}},suffix=-fpm
type=semver,pattern={{major}},suffix=-fpm
- name: 'Build and push LTS fpm container images'
uses: docker/build-push-action@v2
with:
context: 3.0/fpm
push: true
tags: ${{ steps.metadata-fpm.outputs.tags }}
labels: ${{ steps.metadata-apache.outputs.labels }}
- name: 'FPM Alpine variant metadata'
id: metadata-fpm-alpine
uses: docker/metadata-action@v3
with:
images: |
docker.io/martialblog/limesurvey
## Can be enabled in the future
# ghcr.io/martialblog/limesurvey
tags: |
type=semver,pattern={{version}},suffix=-fpm-alpine
type=semver,pattern={{major}},suffix=-fpm-alpine
- name: 'Build and push LTS fpm-alpine container images'
uses: docker/build-push-action@v2
with:
context: 3.0/fpm-alpine
push: true
tags: ${{ steps.metadata-fpm-alpine.outputs.tags }}
labels: ${{ steps.metadata-apache.outputs.labels }}

24
.github/workflows/lint-dockerfiles.yaml vendored Normal file
View File

@@ -0,0 +1,24 @@
---
name: Lint Dockerfile
on: [push, pull_request]
jobs:
lint:
name: Lint Dockerfile with hadolint
strategy:
matrix:
dockerfile:
- 3.0/apache/Dockerfile
- 3.0/fpm-alpine/Dockerfile
- 3.0/fpm/Dockerfile
- 5.0/apache/Dockerfile
- 5.0/fpm-alpine/Dockerfile
- 5.0/fpm/Dockerfile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: hadolint/hadolint-action@v1.5.0
with:
dockerfile: ${{ matrix.dockerfile }}
ignore: DL4006 DL3008 DL3018

View File

@@ -1,13 +0,0 @@
sudo: required
language: bash
services:
- docker
matrix:
include:
- env: TAG=martialblog/limesurvey-apache
script: cd 3.0/apache; docker build -q -t $TAG . && cd ../..; ./tests/run.sh $TAG
- env: TAG=martialblog/limesurvey-fpm
script: cd 3.0/fpm; docker build -q -t $TAG . && cd ../..; ./tests/run.sh $TAG
- env: TAG=martialblog/limesurvey-alpine
script: cd 3.0/fpm; docker build -q -t $TAG . && cd ../..; ./tests/run.sh $TAG

View File

@@ -1,7 +1,9 @@
FROM php:7.4-apache
LABEL maintainer="markus@martialblog.de"
ARG version='3.25.2+201131'
ARG sha256_checksum='1539f51195175b93f80e592dba206d057538d0e36038f3fc3349f79a157097a3'
ARG version='3.27.3+210615'
ARG sha256_checksum='b4986b8be45a2e3d9dbd92ecd724b5bc4aef751f194c00ed445ed0201ad82aa1'
ARG USER=root
ARG LISTEN_PORT=80
# Install OS dependencies
RUN set -ex; \
@@ -19,6 +21,8 @@ RUN set -ex; \
libpng-dev \
libpq-dev \
libzip-dev \
libtidy-dev \
libsodium-dev \
netcat \
\
&& apt-get -y autoclean; apt-get -y autoremove; \
@@ -30,7 +34,7 @@ RUN set -ex; \
# Install PHP Plugins and Configure PHP imap plugin
RUN set -ex; \
docker-php-ext-configure gd && \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j5 \
exif \
@@ -42,6 +46,8 @@ RUN set -ex; \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
ENV LIMESURVEY_VERSION=$version
@@ -60,16 +66,16 @@ RUN a2enmod headers rewrite remoteip; \
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
rm -f "/tmp/limesurvey.tar.gz" && \
chown -R www-data:www-data /var/www/html
chown -R www-data:www-data /var/www/html /etc/apache2
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
USER $USER
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["apache2-foreground"]

View File

@@ -23,6 +23,8 @@ URL_FORMAT=${URL_FORMAT:-'path'}
DEBUG=${DEBUG:-0}
DEBUG_SQL=${DEBUG_SQL:-0}
LISTEN_PORT=${LISTEN_PORT:-"80"}
if [ -z "$DB_PASSWORD" ]; then
echo >&2 'Error: Missing DB_PASSWORD'
exit 1
@@ -33,6 +35,11 @@ if [ -z "$ADMIN_PASSWORD" ]; then
exit 1
fi
if [ "$LISTEN_PORT" != "80" ]; then
echo "Info: Customizing Apache Listen port to $LISTEN_PORT"
sed -i "s/Listen 80\$/Listen $LISTEN_PORT/" /etc/apache2/ports.conf /etc/apache2/sites-available/000-default.conf
fi
# Check if database is available
if [ -z "$DB_SOCK" ]; then
until nc -z -v -w30 $DB_HOST $DB_PORT

View File

@@ -1,7 +1,7 @@
FROM php:7.4-fpm-alpine
LABEL maintainer="markus@martialblog.de"
ARG version='3.25.2+201131'
ARG sha256_checksum='1539f51195175b93f80e592dba206d057538d0e36038f3fc3349f79a157097a3'
ARG version='3.27.3+210615'
ARG sha256_checksum='b4986b8be45a2e3d9dbd92ecd724b5bc4aef751f194c00ed445ed0201ad82aa1'
# Install OS dependencies
RUN set -ex; \
@@ -10,6 +10,8 @@ RUN set -ex; \
libpng-dev \
libzip-dev \
libjpeg-turbo-dev \
tidyhtml-dev \
libsodium-dev \
openldap-dev \
oniguruma-dev \
imap-dev \
@@ -18,7 +20,7 @@ RUN set -ex; \
# Install PHP Plugins
RUN set -ex; \
docker-php-ext-configure gd && \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-imap-ssl && \
docker-php-ext-install \
gd \
@@ -29,12 +31,13 @@ RUN set -ex; \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
# Download, unzip and chmod of LimeSurvey
RUN curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
@@ -48,6 +51,7 @@ RUN set -ex; \
EXPOSE 9000
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["php-fpm"]

View File

@@ -1,7 +1,7 @@
FROM php:7.4-fpm
LABEL maintainer="markus@martialblog.de"
ARG version='3.25.2+201131'
ARG sha256_checksum='1539f51195175b93f80e592dba206d057538d0e36038f3fc3349f79a157097a3'
ARG version='3.27.3+210615'
ARG sha256_checksum='b4986b8be45a2e3d9dbd92ecd724b5bc4aef751f194c00ed445ed0201ad82aa1'
# Install OS dependencies
RUN set -ex; \
@@ -19,6 +19,8 @@ RUN set -ex; \
libpng-dev \
libpq-dev \
libzip-dev \
libtidy-dev \
libsodium-dev \
netcat \
\
&& apt-get -y autoclean; apt-get -y autoremove; \
@@ -30,7 +32,7 @@ RUN set -ex; \
# Install PHP Plugins and Configure PHP imap plugin
RUN set -ex; \
docker-php-ext-configure gd && \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j5 \
exif \
@@ -42,14 +44,15 @@ RUN set -ex; \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
ENV LIMESURVEY_VERSION=$version
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
@@ -58,6 +61,7 @@ RUN set -ex; \
EXPOSE 9000
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["php-fpm"]

View File

@@ -1,7 +1,9 @@
FROM php:7.4-apache
LABEL maintainer="markus@martialblog.de"
ARG version='4.3.29+201130'
ARG sha256_checksum='a80d406efc35634adc34b1811a26079a6d00ae271f8721825ae9c72bf26de820'
ARG version='4.6.3+210518'
ARG sha256_checksum='3c59afc13d0cf974c465c5f851cb8837117518e94031f5e3a28ba468ad734ce2'
ARG USER=root
ARG LISTEN_PORT=80
# Install OS dependencies
RUN set -ex; \
@@ -19,6 +21,8 @@ RUN set -ex; \
libpng-dev \
libpq-dev \
libzip-dev \
libtidy-dev \
libsodium-dev \
netcat \
curl \
\
@@ -31,7 +35,7 @@ RUN set -ex; \
# Install PHP Plugins and Configure PHP imap plugin
RUN set -ex; \
docker-php-ext-configure gd && \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j5 \
exif \
@@ -43,6 +47,8 @@ RUN set -ex; \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
ENV LIMESURVEY_VERSION=$version
@@ -61,16 +67,16 @@ RUN a2enmod headers rewrite remoteip; \
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
rm -f "/tmp/limesurvey.tar.gz" && \
chown -R www-data:www-data /var/www/html
chown -R www-data:www-data /var/www/html /etc/apache2
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
USER $USER
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["apache2-foreground"]

View File

@@ -27,6 +27,8 @@ URL_FORMAT=${URL_FORMAT:-'path'}
DEBUG=${DEBUG:-0}
DEBUG_SQL=${DEBUG_SQL:-0}
LISTEN_PORT=${LISTEN_PORT:-"80"}
if [ -z "$DB_PASSWORD" ]; then
echo >&2 'Error: Missing DB_PASSWORD'
exit 1
@@ -37,6 +39,11 @@ if [ -z "$ADMIN_PASSWORD" ]; then
exit 1
fi
if [ "$LISTEN_PORT" != "80" ]; then
echo "Info: Customizing Apache Listen port to $LISTEN_PORT"
sed -i "s/Listen 80\$/Listen $LISTEN_PORT/" /etc/apache2/ports.conf /etc/apache2/sites-available/000-default.conf
fi
# Check if database is available
if [ -z "$DB_SOCK" ]; then
until nc -z -v -w30 $DB_HOST $DB_PORT

View File

@@ -1,7 +1,7 @@
FROM php:7.4-fpm-alpine
LABEL maintainer="markus@martialblog.de"
ARG version='4.3.29+201130'
ARG sha256_checksum='a80d406efc35634adc34b1811a26079a6d00ae271f8721825ae9c72bf26de820'
ARG version='4.6.3+210518'
ARG sha256_checksum='3c59afc13d0cf974c465c5f851cb8837117518e94031f5e3a28ba468ad734ce2'
# Install OS dependencies
RUN set -ex; \
@@ -10,6 +10,8 @@ RUN set -ex; \
libpng-dev \
libzip-dev \
libjpeg-turbo-dev \
tidyhtml-dev \
libsodium-dev \
openldap-dev \
oniguruma-dev \
imap-dev \
@@ -18,7 +20,7 @@ RUN set -ex; \
# Install PHP Plugins
RUN set -ex; \
docker-php-ext-configure gd && \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-imap-ssl && \
docker-php-ext-install \
exif \
@@ -30,12 +32,13 @@ RUN set -ex; \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
# Download, unzip and chmod of LimeSurvey
RUN curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
@@ -49,6 +52,7 @@ RUN set -ex; \
EXPOSE 9000
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["php-fpm"]

View File

@@ -1,7 +1,7 @@
FROM php:7.4-fpm
LABEL maintainer="markus@martialblog.de"
ARG version='4.3.29+201130'
ARG sha256_checksum='a80d406efc35634adc34b1811a26079a6d00ae271f8721825ae9c72bf26de820'
ARG version='4.6.3+210518'
ARG sha256_checksum='3c59afc13d0cf974c465c5f851cb8837117518e94031f5e3a28ba468ad734ce2'
# Install OS dependencies
RUN set -ex; \
@@ -19,6 +19,8 @@ RUN set -ex; \
libpng-dev \
libpq-dev \
libzip-dev \
libtidy-dev \
libsodium-dev \
netcat \
\
&& apt-get -y autoclean; apt-get -y autoremove; \
@@ -30,7 +32,7 @@ RUN set -ex; \
# Install PHP Plugins and Configure PHP imap plugin
RUN set -ex; \
docker-php-ext-configure gd && \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j5 \
exif \
@@ -42,14 +44,15 @@ RUN set -ex; \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
ENV LIMESURVEY_VERSION=$version
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
@@ -58,6 +61,7 @@ RUN set -ex; \
EXPOSE 9000
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["php-fpm"]

84
5.0/apache/Dockerfile Normal file
View File

@@ -0,0 +1,84 @@
FROM php:8-apache
LABEL maintainer="markus@martialblog.de"
ARG version='5.0.4+210614'
ARG sha256_checksum='b2981b68269f3c9711d7479a509bdef2763827e620b097f8a235f82dabc65f7b'
ARG USER=www-data
ARG LISTEN_PORT=8080
# Install OS dependencies
RUN set -ex; \
apt-get update && \
DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends -y \
\
libldap2-dev \
libfreetype6-dev \
libjpeg-dev \
libonig-dev \
zlib1g-dev \
libc-client-dev \
libkrb5-dev \
libpng-dev \
libpq-dev \
libzip-dev \
libtidy-dev \
libsodium-dev \
netcat \
curl \
\
&& apt-get -y autoclean; apt-get -y autoremove; \
rm -rf /var/lib/apt/lists/*
# Link LDAP library for PHP ldap extension
RUN set -ex; \
ln -fs /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/
# Install PHP Plugins and Configure PHP imap plugin
RUN set -ex; \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j5 \
exif \
gd \
imap \
ldap \
mbstring \
pdo \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
ENV LIMESURVEY_VERSION=$version
# Apache configuration
RUN a2enmod headers rewrite remoteip; \
{\
echo RemoteIPHeader X-Real-IP ;\
echo RemoteIPTrustedProxy 10.0.0.0/8 ;\
echo RemoteIPTrustedProxy 172.16.0.0/12 ;\
echo RemoteIPTrustedProxy 192.168.0.0/16 ;\
} > /etc/apache2/conf-available/remoteip.conf;\
a2enconf remoteip
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
rm -f "/tmp/limesurvey.tar.gz" && \
chown -R "$USER:$USER" /var/www/html /etc/apache2
EXPOSE $LISTEN_PORT
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
USER $USER
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["apache2-foreground"]

151
5.0/apache/entrypoint.sh Executable file
View File

@@ -0,0 +1,151 @@
#!/bin/bash
# Entrypoint for Docker Container
DB_TYPE=${DB_TYPE:-'mysql'}
DB_HOST=${DB_HOST:-'mysql'}
DB_PORT=${DB_PORT:-'3306'}
DB_SOCK=${DB_SOCK:-}
DB_NAME=${DB_NAME:-'limesurvey'}
DB_TABLE_PREFIX=${DB_TABLE_PREFIX:-'lime_'}
DB_USERNAME=${DB_USERNAME:-'limesurvey'}
DB_PASSWORD=${DB_PASSWORD:-}
ENCRYPT_KEYPAIR=${ENCRYPT_KEYPAIR:-}
ENCRYPT_PUBLIC_KEY=${ENCRYPT_PUBLIC_KEY:-}
ENCRYPT_SECRET_KEY=${ENCRYPT_SECRET_KEY:-}
ADMIN_USER=${ADMIN_USER:-'admin'}
ADMIN_NAME=${ADMIN_NAME:-'admin'}
ADMIN_EMAIL=${ADMIN_EMAIL:-'foobar@example.com'}
ADMIN_PASSWORD=${ADMIN_PASSWORD:-}
BASE_URL=${BASE_URL:-}
PUBLIC_URL=${PUBLIC_URL:-}
URL_FORMAT=${URL_FORMAT:-'path'}
SHOW_SCRIPT_NAME=${SHOW_SCRIPT_NAME:-'true'}
DEBUG=${DEBUG:-0}
DEBUG_SQL=${DEBUG_SQL:-0}
LISTEN_PORT=${LISTEN_PORT:-"8080"}
if [ -z "$DB_PASSWORD" ]; then
echo >&2 'Error: Missing DB_PASSWORD'
exit 1
fi
if [ -z "$ADMIN_PASSWORD" ]; then
echo >&2 'Error: Missing ADMIN_PASSWORD'
exit 1
fi
if [ "$LISTEN_PORT" != "80" ]; then
echo "Info: Customizing Apache Listen port to $LISTEN_PORT"
sed -i "s/Listen 80\$/Listen $LISTEN_PORT/" /etc/apache2/ports.conf /etc/apache2/sites-available/000-default.conf
fi
# Check if database is available
if [ -z "$DB_SOCK" ]; then
until nc -z -v -w30 $DB_HOST $DB_PORT
do
echo "Info: Waiting for database connection..."
sleep 5
done
fi
# Check if config 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'}
fi
if [ "$DB_TYPE" = 'pgsql' ]; then
echo 'Info: Using PostgreSQL configuration'
DB_CHARSET=${DB_CHARSET:-'utf8'}
fi
if [ ! -z "$DB_SOCK" ]; then
echo 'Info: Using unix socket'
DB_CONNECT='unix_socket'
else
echo 'Info: Using TCP connection'
DB_CONNECT='host'
fi
if [ -z "$PUBLIC_URL" ]; then
echo 'Info: Setting PublicURL'
fi
cat <<EOF > application/config/config.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
return array(
'components' => array(
'db' => array(
'connectionString' => '$DB_TYPE:$DB_CONNECT=$DB_HOST;port=$DB_PORT;dbname=$DB_NAME;',
'emulatePrepare' => true,
'username' => '$DB_USERNAME',
'password' => '$DB_PASSWORD',
'charset' => '$DB_CHARSET',
'tablePrefix' => '$DB_TABLE_PREFIX',
),
'urlManager' => array(
'urlFormat' => '$URL_FORMAT',
'rules' => array(),
'showScriptName' => $SHOW_SCRIPT_NAME,
),
'request' => array(
'baseUrl' => '$BASE_URL',
),
),
'config'=>array(
'publicurl'=>'$PUBLIC_URL',
'debug'=>$DEBUG,
'debugsql'=>$DEBUG_SQL,
)
);
EOF
fi
# Check if security config already provisioned
if [ -f application/config/security.php ]; then
echo 'Info: security.php already provisioned'
else
echo 'Info: Creating security.php'
if [ ! -z "$ENCRYPT_KEYPAIR" ]; then
cat <<EOF > application/config/security.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
\$config = array();
\$config['encryptionkeypair'] = '$ENCRYPT_KEYPAIR';
\$config['encryptionpublickey'] = '$ENCRYPT_PUBLIC_KEY';
\$config['encryptionsecretkey'] = '$ENCRYPT_SECRET_KEY';
return \$config;
EOF
else
echo >&2 'Warning: No encryption keys were provided'
echo >&2 'Warning: A security.php config will be created by the application'
echo >&2 'Warning: THIS FILE NEEDS TO BE PERSISTENT'
fi
fi
# Check if LimeSurvey database is provisioned
echo 'Info: Check if database already provisioned. Nevermind the Stack trace.'
php application/commands/console.php updatedb
if [ $? -eq 0 ]; then
echo 'Info: Database already provisioned'
else
echo ''
echo 'Running console.php install'
php application/commands/console.php install $ADMIN_USER $ADMIN_PASSWORD $ADMIN_NAME $ADMIN_EMAIL
fi
exec "$@"

60
5.0/fpm-alpine/Dockerfile Normal file
View File

@@ -0,0 +1,60 @@
FROM php:8-fpm-alpine
LABEL maintainer="markus@martialblog.de"
ARG version='5.0.4+210614'
ARG sha256_checksum='b2981b68269f3c9711d7479a509bdef2763827e620b097f8a235f82dabc65f7b'
ARG USER=www-data
# Install OS dependencies
RUN set -ex; \
apk add --no-cache --virtual .build-deps \
freetype-dev \
libpng-dev \
libzip-dev \
libjpeg-turbo-dev \
tidyhtml-dev \
libsodium-dev \
openldap-dev \
oniguruma-dev \
imap-dev \
postgresql-dev && \
apk add --no-cache netcat-openbsd bash
# Install PHP Plugins
RUN set -ex; \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-imap-ssl && \
docker-php-ext-install \
exif \
gd \
imap \
ldap \
mbstring \
pdo \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
\
rm -rf "/tmp/limesurvey.tar.gz" \
/var/www/html/docs \
/var/www/html/tests \
/var/www/html/*.md && \
chown -R "${USER}:root" /var/www/ ; \
chmod -R g=u /var/www
EXPOSE 9000
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
USER $USER
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["php-fpm"]

144
5.0/fpm-alpine/entrypoint.sh Executable file
View File

@@ -0,0 +1,144 @@
#!/bin/bash
# Entrypoint for Docker Container
DB_TYPE=${DB_TYPE:-'mysql'}
DB_HOST=${DB_HOST:-'mysql'}
DB_PORT=${DB_PORT:-'3306'}
DB_SOCK=${DB_SOCK:-}
DB_NAME=${DB_NAME:-'limesurvey'}
DB_TABLE_PREFIX=${DB_TABLE_PREFIX:-'lime_'}
DB_USERNAME=${DB_USERNAME:-'limesurvey'}
DB_PASSWORD=${DB_PASSWORD:-}
ENCRYPT_KEYPAIR=${ENCRYPT_KEYPAIR:-}
ENCRYPT_PUBLIC_KEY=${ENCRYPT_PUBLIC_KEY:-}
ENCRYPT_SECRET_KEY=${ENCRYPT_SECRET_KEY:-}
ADMIN_USER=${ADMIN_USER:-'admin'}
ADMIN_NAME=${ADMIN_NAME:-'admin'}
ADMIN_EMAIL=${ADMIN_EMAIL:-'foobar@example.com'}
ADMIN_PASSWORD=${ADMIN_PASSWORD:-}
BASE_URL=${BASE_URL:-}
PUBLIC_URL=${PUBLIC_URL:-}
URL_FORMAT=${URL_FORMAT:-'path'}
SHOW_SCRIPT_NAME=${SHOW_SCRIPT_NAME:-'true'}
DEBUG=${DEBUG:-0}
DEBUG_SQL=${DEBUG_SQL:-0}
if [ -z "$DB_PASSWORD" ]; then
echo >&2 'Error: Missing DB_PASSWORD'
exit 1
fi
if [ -z "$ADMIN_PASSWORD" ]; then
echo >&2 'Error: Missing ADMIN_PASSWORD'
exit 1
fi
# Check if database is available
if [ -z "$DB_SOCK" ]; then
until nc -z -v -w30 $DB_HOST $DB_PORT
do
echo "Info: Waiting for database connection..."
sleep 5
done
fi
# Check if config 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'}
fi
if [ "$DB_TYPE" = 'pgsql' ]; then
echo 'Info: Using PostgreSQL configuration'
DB_CHARSET=${DB_CHARSET:-'utf8'}
fi
if [ ! -z "$DB_SOCK" ]; then
echo 'Info: Using unix socket'
DB_CONNECT='unix_socket'
else
echo 'Info: Using TCP connection'
DB_CONNECT='host'
fi
if [ -z "$PUBLIC_URL" ]; then
echo 'Info: Setting PublicURL'
fi
cat <<EOF > application/config/config.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
return array(
'components' => array(
'db' => array(
'connectionString' => '$DB_TYPE:$DB_CONNECT=$DB_HOST;port=$DB_PORT;dbname=$DB_NAME;',
'emulatePrepare' => true,
'username' => '$DB_USERNAME',
'password' => '$DB_PASSWORD',
'charset' => '$DB_CHARSET',
'tablePrefix' => '$DB_TABLE_PREFIX',
),
'urlManager' => array(
'urlFormat' => '$URL_FORMAT',
'rules' => array(),
'showScriptName' => $SHOW_SCRIPT_NAME,
),
'request' => array(
'baseUrl' => '$BASE_URL',
),
),
'config'=>array(
'publicurl'=>'$PUBLIC_URL',
'debug'=>$DEBUG,
'debugsql'=>$DEBUG_SQL,
)
);
EOF
fi
# Check if security config already provisioned
if [ -f application/config/security.php ]; then
echo 'Info: security.php already provisioned'
else
echo 'Info: Creating security.php'
if [ ! -z "$ENCRYPT_KEYPAIR" ]; then
cat <<EOF > application/config/security.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
\$config = array();
\$config['encryptionkeypair'] = '$ENCRYPT_KEYPAIR';
\$config['encryptionpublickey'] = '$ENCRYPT_PUBLIC_KEY';
\$config['encryptionsecretkey'] = '$ENCRYPT_SECRET_KEY';
return \$config;
EOF
else
echo >&2 'Warning: No encryption keys were provided'
echo >&2 'Warning: A security.php config will be created by the application'
echo >&2 'Warning: THIS FILE NEEDS TO BE PERSISTENT'
fi
fi
# Check if LimeSurvey database is provisioned
echo 'Info: Check if database already provisioned. Nevermind the Stack trace.'
php application/commands/console.php updatedb
if [ $? -eq 0 ]; then
echo 'Info: Database already provisioned'
else
echo ''
echo 'Running console.php install'
php application/commands/console.php install $ADMIN_USER $ADMIN_PASSWORD $ADMIN_NAME $ADMIN_EMAIL
fi
exec "$@"

69
5.0/fpm/Dockerfile Normal file
View File

@@ -0,0 +1,69 @@
FROM php:8-fpm
LABEL maintainer="markus@martialblog.de"
ARG version='5.0.4+210614'
ARG sha256_checksum='b2981b68269f3c9711d7479a509bdef2763827e620b097f8a235f82dabc65f7b'
ARG USER=www-data
# Install OS dependencies
RUN set -ex; \
apt-get update && \
DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends -y \
\
libldap2-dev \
libfreetype6-dev \
libjpeg-dev \
libonig-dev \
zlib1g-dev \
libc-client-dev \
libkrb5-dev \
libpng-dev \
libpq-dev \
libzip-dev \
libtidy-dev \
libsodium-dev \
netcat \
\
&& apt-get -y autoclean; apt-get -y autoremove; \
rm -rf /var/lib/apt/lists/*
# Link LDAP library for PHP ldap extension
RUN set -ex; \
ln -fs /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/
# Install PHP Plugins and Configure PHP imap plugin
RUN set -ex; \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr && \
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j5 \
exif \
gd \
imap \
ldap \
mbstring \
pdo \
pdo_mysql \
pdo_pgsql \
pgsql \
sodium \
tidy \
zip
ENV LIMESURVEY_VERSION=$version
# Download, unzip and chmod LimeSurvey from official GitHub repository
RUN set -ex; \
curl -sSL "https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz" --output /tmp/limesurvey.tar.gz && \
echo "${sha256_checksum} /tmp/limesurvey.tar.gz" | sha256sum -c - && \
\
tar xzvf "/tmp/limesurvey.tar.gz" --strip-components=1 -C /var/www/html/ && \
rm -f "/tmp/limesurvey.tar.gz" && \
chown -R "$USER:$USER" /var/www/html
EXPOSE 9000
WORKDIR /var/www/html
COPY entrypoint.sh entrypoint.sh
USER $USER
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["php-fpm"]

144
5.0/fpm/entrypoint.sh Executable file
View File

@@ -0,0 +1,144 @@
#!/bin/bash
# Entrypoint for Docker Container
DB_TYPE=${DB_TYPE:-'mysql'}
DB_HOST=${DB_HOST:-'mysql'}
DB_PORT=${DB_PORT:-'3306'}
DB_SOCK=${DB_SOCK:-}
DB_NAME=${DB_NAME:-'limesurvey'}
DB_TABLE_PREFIX=${DB_TABLE_PREFIX:-'lime_'}
DB_USERNAME=${DB_USERNAME:-'limesurvey'}
DB_PASSWORD=${DB_PASSWORD:-}
ENCRYPT_KEYPAIR=${ENCRYPT_KEYPAIR:-}
ENCRYPT_PUBLIC_KEY=${ENCRYPT_PUBLIC_KEY:-}
ENCRYPT_SECRET_KEY=${ENCRYPT_SECRET_KEY:-}
ADMIN_USER=${ADMIN_USER:-'admin'}
ADMIN_NAME=${ADMIN_NAME:-'admin'}
ADMIN_EMAIL=${ADMIN_EMAIL:-'foobar@example.com'}
ADMIN_PASSWORD=${ADMIN_PASSWORD:-}
BASE_URL=${BASE_URL:-}
PUBLIC_URL=${PUBLIC_URL:-}
URL_FORMAT=${URL_FORMAT:-'path'}
SHOW_SCRIPT_NAME=${SHOW_SCRIPT_NAME:-'true'}
DEBUG=${DEBUG:-0}
DEBUG_SQL=${DEBUG_SQL:-0}
if [ -z "$DB_PASSWORD" ]; then
echo >&2 'Error: Missing DB_PASSWORD'
exit 1
fi
if [ -z "$ADMIN_PASSWORD" ]; then
echo >&2 'Error: Missing ADMIN_PASSWORD'
exit 1
fi
# Check if database is available
if [ -z "$DB_SOCK" ]; then
until nc -z -v -w30 $DB_HOST $DB_PORT
do
echo "Info: Waiting for database connection..."
sleep 5
done
fi
# Check if config 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'}
fi
if [ "$DB_TYPE" = 'pgsql' ]; then
echo 'Info: Using PostgreSQL configuration'
DB_CHARSET=${DB_CHARSET:-'utf8'}
fi
if [ ! -z "$DB_SOCK" ]; then
echo 'Info: Using unix socket'
DB_CONNECT='unix_socket'
else
echo 'Info: Using TCP connection'
DB_CONNECT='host'
fi
if [ -z "$PUBLIC_URL" ]; then
echo 'Info: Setting PublicURL'
fi
cat <<EOF > application/config/config.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
return array(
'components' => array(
'db' => array(
'connectionString' => '$DB_TYPE:$DB_CONNECT=$DB_HOST;port=$DB_PORT;dbname=$DB_NAME;',
'emulatePrepare' => true,
'username' => '$DB_USERNAME',
'password' => '$DB_PASSWORD',
'charset' => '$DB_CHARSET',
'tablePrefix' => '$DB_TABLE_PREFIX',
),
'urlManager' => array(
'urlFormat' => '$URL_FORMAT',
'rules' => array(),
'showScriptName' => $SHOW_SCRIPT_NAME,
),
'request' => array(
'baseUrl' => '$BASE_URL',
),
),
'config'=>array(
'publicurl'=>'$PUBLIC_URL',
'debug'=>$DEBUG,
'debugsql'=>$DEBUG_SQL,
)
);
EOF
fi
# Check if security config already provisioned
if [ -f application/config/security.php ]; then
echo 'Info: security.php already provisioned'
else
echo 'Info: Creating security.php'
if [ ! -z "$ENCRYPT_KEYPAIR" ]; then
cat <<EOF > application/config/security.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
\$config = array();
\$config['encryptionkeypair'] = '$ENCRYPT_KEYPAIR';
\$config['encryptionpublickey'] = '$ENCRYPT_PUBLIC_KEY';
\$config['encryptionsecretkey'] = '$ENCRYPT_SECRET_KEY';
return \$config;
EOF
else
echo >&2 'Warning: No encryption keys were provided'
echo >&2 'Warning: A security.php config will be created by the application'
echo >&2 'Warning: THIS FILE NEEDS TO BE PERSISTENT'
fi
fi
# Check if LimeSurvey database is provisioned
echo 'Info: Check if database already provisioned. Nevermind the Stack trace.'
php application/commands/console.php updatedb
if [ $? -eq 0 ]; then
echo 'Info: Database already provisioned'
else
echo ''
echo 'Running console.php install'
php application/commands/console.php install $ADMIN_USER $ADMIN_PASSWORD $ADMIN_NAME $ADMIN_EMAIL
fi
exec "$@"

14
Makefile Normal file
View File

@@ -0,0 +1,14 @@
# .PHONY: apache fpm fpm-alpine
apache-lts:
docker build --pull -t martialblog/limesurvey:3-apache 3.0/apache
apache-latest:
docker build --pull -t martialblog/limesurvey:5-apache 5.0/apache
fpm-alpine-lts:
docker build --pull -t martialblog/limesurvey:3-fpm-alpine 3.0/fpm-alpine
fpm-alpine-latest:
docker build --pull -t martialblog/limesurvey:5-fpm-alpine 5.0/fpm-alpine
fpm-lts:
docker build --pull -t martialblog/limesurvey:3-fpm 3.0/fpm
fpm-latest:
docker build --pull -t martialblog/limesurvey:5-fpm 5.0/fpm

View File

@@ -12,16 +12,18 @@ Dockerfile to build a [LimeSurvey](https://limesurvey.org) Image for the Docker
## Supported tags and respective Dockerfile links
- [`4-apache`, `4.<BUILD-NUMBER>-apache`, `latest` ](https://github.com/martialblog/docker-limesurvey/blob/master/4.0/apache/Dockerfile)
- [`4-fpm`, `4.<BUILD-NUMBER>-fpm`](https://github.com/martialblog/docker-limesurvey/blob/master/4.0/fpm/Dockerfile)
- [`4-fpm-alpine`, `4.<BUILD-NUMBER>-fpm-alpine`](https://github.com/martialblog/docker-limesurvey/blob/master/4.0/fpm-alpine/Dockerfile)
- [`5-apache`, `5.<BUILD-NUMBER>-apache`, `latest` ](https://github.com/martialblog/docker-limesurvey/blob/master/5.0/apache/Dockerfile)
- [`5-fpm`, `5.<BUILD-NUMBER>-fpm`](https://github.com/martialblog/docker-limesurvey/blob/master/5.0/fpm/Dockerfile)
- [`5-fpm-alpine`, `5.<BUILD-NUMBER>-fpm-alpine`](https://github.com/martialblog/docker-limesurvey/blob/master/5.0/fpm-alpine/Dockerfile)
- [`3-apache`, `3.<BUILD-NUMBER>-apache`](https://github.com/martialblog/docker-limesurvey/blob/master/3.0/apache/Dockerfile)
- [`3-fpm`, `3.<BUILD-NUMBER>-fpm`](https://github.com/martialblog/docker-limesurvey/blob/master/3.0/fpm/Dockerfile)
- [`3-fpm-alpine`, `3.<BUILD-NUMBER>-fpm-alpine`](https://github.com/martialblog/docker-limesurvey/blob/master/3.0/fpm-alpine/Dockerfile)
# Using the Apache Image
The apache image comes with an Apache Webserver and PHP installed.
The `apache` image comes with an Apache Webserver and PHP installed.
This image is also available in a `rootless` variant with `www-data` as default user and Apache listening on 8080. Starting from 5.0, the `rootless` variant is the default for Apache images.
## Apache Configuration
@@ -31,6 +33,8 @@ To change to Apache Webserver configuration, mount a Volume into the Container a
See the example configuration provided.
The Apache port can be specified by setting the environment variable `LISTEN_PORT` (e.g. `LISTEN_PORT=8080`). Starting from 5.0, Apache defaults to listening on a non-privilged port (8080) in inside the container.
# Using the fpm Image
To use the fpm image, you need an additional web server that can proxy http-request to the fpm-port of the container. See *docker-compose.fpm.yml* for example.
@@ -69,7 +73,7 @@ To change to LimeSurvey configuration, you can mount a Volume into the Container
## Data encryption
LimeSurvey 4 supports data encryption, this image give you these options:
LimeSurvey version 4.0 and newer support data encryption, this image give you these options:
* Provide a security.php file directly (volume)
* Provide encryption keys for the `security.php` file (environment variables)
@@ -107,11 +111,13 @@ For further details on the settings see: https://manual.limesurvey.org/Data_encr
| PUBLIC_URL | Public URL for public scripts |
| BASE_URL | Application Base URL |
| URL_FORMAT | URL Format. path or get |
| SHOW_SCRIPT_NAME | Script name in URL (true|false). Default: true |
| DEBUG | Debug level (0, 1, 2). Default: 0 |
| DEBUG_SQL | SQL Debug level (0, 1, 2). Default 0 |
| ENCRYPT_KEYPAIR | Data encryption keypair |
| ENCRYPT_PUBLIC_KEY | Data encryption public key |
| ENCRYPT_SECRET_KEY | Data encryption secret key |
| LISTEN_PORT | Apache: Listen port. Default: 8080 |
For further details on the settings see: https://manual.limesurvey.org/Optional_settings#Advanced_Path_Settings
@@ -129,6 +135,42 @@ http://localhost:8080/
http://localhost:8080/index.php/admin
```
# Upgrade Guide
These guides are only referring to the Docker Image, for details on the application users should consult the [official LimeSurvey documentation](https://manual.limesurvey.org/Upgrading_from_a_previous_version) for details.
## Upgrading the FPM Images
If you are using docker-compose to run the FPM Images, you need to stop the application and webserver Containers and delete the application volume:
```
$ docker volume ls
DRIVER VOLUME NAME
local docker-limesurvey_lime
$ docker volume rm docker-limesurvey_lime
```
## Upgrading to 5.0 from 4.x
The default user in the Container will now be *www-data* (uid 33 in Debian, uid 82 in Alpine), any volumes mounted need the corresponding permissions:
```
# Debian
$ ls -ln upload/
total 4
drwxr-xr-x 3 33 33 4096 Jun 3 13:51 surveys
```
```
# Alpine
$ ls -ln upload/
total 4
drwxr-xr-x 3 82 82 4096 Jun 3 13:51 surveys
```
If you are using the Apache2 Images, the default port will now be **8080**. Depending on your setup the port configurations might need adjustment.
# References
- https://www.limesurvey.org/

View File

@@ -18,12 +18,14 @@ services:
volumes:
- limesurvey:/var/www/html/upload/surveys
ports:
- 8080:80
- 8080:8080
depends_on:
- db
db:
image: postgres:9.6-alpine
image: postgres:10-alpine
restart: always
volumes:
- db-data:/var/lib/postgresql
environment:
- POSTGRES_USER=limesurvey
- POSTGRES_DB=limesurvey
@@ -31,3 +33,4 @@ services:
volumes:
limesurvey:
db-data:

View File

@@ -2,9 +2,10 @@ version: "3.0"
services:
limesurvey:
build:
context: 4.0/fpm/
context: 5.0/fpm/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent
- /tmp/upload/surveys:/var/www/html/upload/surveys
- lime:/var/www/html
links:

View File

@@ -2,9 +2,10 @@ version: "3.0"
services:
limesurvey:
build:
context: 4.0/fpm-alpine/
context: 5.0/fpm-alpine/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent
- /tmp/upload/surveys:/var/www/html/upload/surveys
- lime:/var/www/html
links:

View File

@@ -2,9 +2,10 @@ version: "3.0"
services:
limesurvey:
build:
context: 4.0/fpm/
context: 5.0/fpm/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent
- /tmp/upload/surveys:/var/www/html/upload/surveys
- lime:/var/www/html
links:

View File

@@ -2,16 +2,17 @@ version: "3.0"
services:
limesurvey:
build:
context: 4.0/apache/
context: 5.0/apache/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent
- /tmp/upload/surveys:/var/www/html/upload/surveys
links:
- lime-db
depends_on:
- lime-db
ports:
- "8080:80"
- "8080:8080"
environment:
- "DB_TYPE=pgsql"
- "DB_PORT=5432"
@@ -20,7 +21,12 @@ services:
- "ADMIN_PASSWORD=foobar"
lime-db:
image: postgres:10
volumes:
- db-data:/var/lib/postgresql
environment:
- "POSTGRES_USER=limesurvey"
- "POSTGRES_DB=limesurvey"
- "POSTGRES_PASSWORD=secret"
volumes:
db-data:

View File

@@ -2,16 +2,17 @@ version: "3.0"
services:
limesurvey:
build:
context: 4.0/apache/
context: 5.0/apache/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent
- /tmp/upload/surveys:/var/www/html/upload/surveys
links:
- lime-db
depends_on:
- lime-db
ports:
- "8080:80"
- "8080:8080"
environment:
- "DB_HOST=lime-db"
- "DB_PASSWORD=secret"

View File

@@ -1,4 +1,4 @@
<VirtualHost *:80>
<VirtualHost *:8080>
ServerAdmin foo@bar.com
DocumentRoot /var/www/html
Alias /lime "/var/www/html"

View File

@@ -1,14 +0,0 @@
.PHONY: apache fpm fpm-alpine
apache3:
docker build --pull -t martialblog/limesurvey:3-apache 3.0/apache
apache4:
docker build --pull -t martialblog/limesurvey:4-apache 4.0/apache
fpm-alpine3:
docker build --pull -t martialblog/limesurvey:3-fpm-alpine 3.0/fpm-alpine
fpm-alpine4:
docker build --pull -t martialblog/limesurvey:4-fpm-alpine 4.0/fpm-alpine
fpm3:
docker build --pull -t martialblog/limesurvey:3-fpm 3.0/fpm
fpm4:
docker build --pull -t martialblog/limesurvey:4-fpm 4.0/fpm

View File

@@ -1,10 +1,14 @@
FROM nginx
RUN apt-get update && \
apt-get install -y certbot curl python-certbot-nginx && \
FROM nginx:stable
LABEL maintainer="markus@martialblog.de"
RUN set -ex; \
apt-get update && \
DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends -y \
certbot curl python-certbot-nginx && \
apt-get -y autoclean; apt-get -y autoremove; \
rm -rf /var/lib/apt/lists/*
COPY entrypoint.sh /entrypoint.sh
RUN chmod 700 /entrypoint.sh
CMD ["/entrypoint.sh"]

View File

@@ -32,4 +32,4 @@ sed -r -i -e "s/[A-Fa-f0-9]{64}/$SHA256_CHECKSUM/" $MAJOR_VERSION/apache/Dockerf
# After that, check and commit
echo "git add 3.0 ; git commit -m 'Upgrading to LTS Version ${NEW_VERSION}' && git tag ${NEW_VERSION}"
echo "git add 4.0 ; git commit -m 'Upgrading to Version ${NEW_VERSION}' && git tag ${NEW_VERSION}"
echo "git add 5.0 ; git commit -m 'Upgrading to Version ${NEW_VERSION}' && git tag ${NEW_VERSION}"