Compare commits

...

52 Commits

Author SHA1 Message Date
Markus Opolka
0d5d7e6e4d Update GitHub Actions 2023-04-12 13:00:38 +02:00
Markus Opolka
eb3f48b0dc Merge pull request #139 from martialblog/release-6
Update Repository for new 6.0 Release
2023-04-12 11:40:39 +02:00
Markus Opolka
2f82a36dc0 Move GitHub Actions for ARM for separate file
- We will include these long running jobs only on special branches
2023-04-12 11:37:36 +02:00
Markus Opolka
128e7b4595 Update GitHub Action versions
- Mainly due to Node 12 deprecation
2023-04-12 11:06:12 +02:00
Markus Opolka
663bf2f03b Add ARM build in GitHub Actions
- Hint: Tried to use the plattform parameter of the build-push-action,
   however this failed with an error in the Jobs.
   Therefore, I used a matrix with the platforms.
 - The ARM build takes a long time.
2023-04-12 10:57:51 +02:00
Markus Opolka
0732424f79 Update Repository for new 6.0 Release 2023-04-12 10:54:54 +02:00
Markus Opolka
1c709f7780 Upgrading to Version 5.6.14+230403 2023-04-05 14:29:53 +02:00
Markus Opolka
b4ec3009b6 Upgrading to LTS Version 3.28.55+230328 2023-04-05 14:29:27 +02:00
Markus Opolka
5150ab73cf Upgrading to Version 5.6.12+230327 2023-03-29 18:50:47 +02:00
Markus Opolka
2bf13290c7 Upgrading to LTS Version 3.28.54+230321 2023-03-29 18:48:39 +02:00
Markus Opolka
6014fc72df Upgrading to Version 5.6.10+230313 2023-03-21 14:32:35 +01:00
Markus Opolka
25ab1cb849 Upgrading to LTS Version 3.28.53+230314 2023-03-21 14:31:33 +01:00
Markus Opolka
d777bfc285 Updat nginx.conf example 2023-03-20 15:01:06 +01:00
Markus Opolka
2498c148e3 Merge pull request #137 from martialblog/docs/apache-proxy
Add docker-compose example with Apache reverse-proxy
2023-03-16 16:28:48 +01:00
Markus Opolka
c1e931ee8f Update Traefik Examples
Acked-by: Markus Opolka <markus.opolka@netways.de>
2023-03-16 16:23:31 +01:00
Markus Opolka
e694afe33e Add docker-compose example with Apache reverse-proxy 2023-03-16 15:34:59 +01:00
Markus Opolka
8ecd8012c5 Upgrading to Version 5.6.9+230306 2023-03-14 08:34:42 +01:00
Markus Opolka
e3671f0dc2 Upgrading to LTS Version 3.28.52+230307 2023-03-14 08:34:13 +01:00
Markus Opolka
8d77a697df Upgrading to Version 5.6.8+230227 2023-03-06 20:00:13 +01:00
Markus Opolka
8e78295423 Upgrading to LTS Version 3.28.51+230228 2023-03-06 19:59:33 +01:00
Markus Opolka
1bbcede235 Upgrading to Version 5.6.7+230222 2023-03-01 08:38:59 +01:00
Markus Opolka
2fb47a0151 Upgrading to LTS Version 3.28.50+230221 2023-03-01 08:38:27 +01:00
Markus Opolka
827fb0f6e0 Upgrading to Version 5.6.6+230220 2023-02-21 17:10:43 +01:00
Markus Opolka
32bd800846 Upgrading to LTS Version 3.28.49+230215 2023-02-21 17:10:18 +01:00
Markus Opolka
6709d9964f Upgrading to Version 5.6.4+230206 2023-02-14 12:48:11 +01:00
Markus Opolka
24c3f9fcd2 Upgrading to LTS Version 3.28.48+230207 2023-02-14 12:47:30 +01:00
Markus Opolka
f80cd5ce70 Upgrading to Version 5.6.3+230130 2023-02-06 16:35:45 +01:00
Markus Opolka
dae147ad6f Upgrading to LTS Version 3.28.47+230131 2023-02-06 16:35:15 +01:00
Markus Opolka
ae6de116f2 Upgrading to Version 5.6.2+230125 2023-01-31 19:08:54 +01:00
Markus Opolka
8b2b966ab2 Upgrading to LTS Version 3.28.46+230124 2023-01-31 19:08:14 +01:00
Markus Opolka
b2425303f6 Upgrading to Version 5.6.1+230123 2023-01-25 08:07:46 +01:00
Markus Opolka
ccb8047f80 Upgrading to Version 5.6.0+230116 2023-01-24 09:08:00 +01:00
Markus Opolka
66b6a31821 Upgrading to LTS Version 3.28.45+230117 2023-01-24 09:07:35 +01:00
Markus Opolka
bd81c0b44a Upgrading to Version 5.5.2+230109 2023-01-16 15:04:50 +01:00
Markus Opolka
59986c3205 Upgrading to LTS Version 3.28.44+230110 2023-01-16 15:04:28 +01:00
Markus Opolka
269774947b Upgrading to Version 5.5.1+230103 2023-01-10 08:06:09 +01:00
Markus Opolka
64f001f58c Upgrading to LTS Version 3.28.43+221221 2023-01-10 08:05:37 +01:00
Markus Opolka
142839f135 Upgrading to Version 5.5.0+221219 2023-01-04 08:52:47 +01:00
Markus Opolka
74f928b609 Upgrading to Version 5.4.15+221212 2022-12-20 08:26:56 +01:00
Markus Opolka
4877b85128 Upgrading to Version 5.4.14+221205 2022-12-12 20:33:59 +01:00
Markus Opolka
908a2817fb Upgrading to LTS Version 3.28.41+221206 2022-12-12 20:33:34 +01:00
Markus Opolka
618b89cadb Upgrading to Version 5.4.13+221128 2022-12-06 12:13:48 +01:00
Markus Opolka
da706033f6 Upgrading to LTS Version 3.28.40+221129 2022-12-06 12:13:26 +01:00
Markus Opolka
ee98ccea0c Upgrading to Version 5.4.12+221121 2022-11-28 12:22:05 +01:00
Markus Opolka
e3dcead592 Upgrading to LTS Version 3.28.39+221122 2022-11-28 12:21:35 +01:00
Markus Opolka
3c7de94fdd Upgrading to Version 5.4.11+221114 2022-11-22 08:57:51 +01:00
Markus Opolka
43a2c383ff Upgrading to LTS Version 3.28.38+221115 2022-11-22 08:57:15 +01:00
Markus Opolka
19efe662d1 Upgrading to Version 5.4.10+221107 2022-11-15 13:20:29 +01:00
Markus Opolka
51f45a8513 Upgrading to LTS Version 3.28.37+221108 2022-11-15 13:19:17 +01:00
Markus Opolka
f0b55dacf9 Update README
- Added known issues section
2022-11-15 09:44:38 +01:00
Markus Opolka
d9eb6aff10 Upgrading to Version 5.4.9+221101 2022-11-08 13:20:42 +01:00
Markus Opolka
d979eb5aa4 Upgrading to LTS Version 3.28.36+221102 2022-11-08 13:20:03 +01:00
35 changed files with 1124 additions and 87 deletions

View File

@@ -2,7 +2,7 @@ name: Publish Latest Container Images
on:
push:
tags:
- '5.*'
- '6.*'
jobs:
lint_dockerfiles:
@@ -11,11 +11,11 @@ jobs:
strategy:
matrix:
dockerfile:
- 5.0/apache/Dockerfile
- 5.0/fpm-alpine/Dockerfile
- 5.0/fpm/Dockerfile
- 6.0/apache/Dockerfile
- 6.0/fpm-alpine/Dockerfile
- 6.0/fpm/Dockerfile
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: hadolint/hadolint-action@v1.5.0
with:
dockerfile: ${{ matrix.dockerfile }}
@@ -31,20 +31,24 @@ jobs:
contents: read
steps:
- name: 'Check out the repo'
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: 'Set up QEMU'
uses: docker/setup-qemu-action@v2
with:
platforms: 'arm64,arm'
- name: 'Set up Docker Buildx'
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
with:
buildkitd-flags: --debug
- name: 'Log in to DockerHub'
if: github.event_name != 'pull_request'
uses: docker/login-action@v1
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: 'Apache variant metadata'
id: metadata-apache
uses: docker/metadata-action@v3
uses: docker/metadata-action@v4
with:
images: |
docker.io/martialblog/limesurvey
@@ -55,16 +59,17 @@ jobs:
latest=true
suffix=-apache
- name: 'Build and push latest Apache container images'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: 5.0/apache
context: 6.0/apache
push: true
tags: ${{ steps.metadata-apache.outputs.tags }}
labels: ${{ steps.metadata-apache.outputs.labels }}
platforms: linux/amd64,linux/arm64
- name: 'FPM variant metadata'
id: metadata-fpm
uses: docker/metadata-action@v3
uses: docker/metadata-action@v4
with:
images: |
docker.io/martialblog/limesurvey
@@ -75,16 +80,17 @@ jobs:
latest=false
suffix=-fpm
- name: 'Build and push latest fpm container images'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: 5.0/fpm
context: 6.0/fpm
push: true
tags: ${{ steps.metadata-fpm.outputs.tags }}
labels: ${{ steps.metadata-fpm.outputs.labels }}
platforms: linux/amd64,linux/arm64
- name: 'FPM Alpine variant metadata'
id: metadata-fpm-alpine
uses: docker/metadata-action@v3
uses: docker/metadata-action@v4
with:
images: |
docker.io/martialblog/limesurvey
@@ -95,9 +101,10 @@ jobs:
latest=false
suffix=-fpm-alpine
- name: 'Build and push latest fpm-alpine container images'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: 5.0/fpm-alpine
context: 6.0/fpm-alpine
push: true
tags: ${{ steps.metadata-fpm-alpine.outputs.tags }}
labels: ${{ steps.metadata-fpm-alpine.outputs.labels }}
platforms: linux/amd64,linux/arm64

View File

@@ -2,7 +2,7 @@ name: Publish LTS Container Images
on:
push:
tags:
- '3.*'
- '5.*'
jobs:
lint_dockerfiles:
@@ -11,11 +11,11 @@ jobs:
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
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: hadolint/hadolint-action@v1.5.0
with:
dockerfile: ${{ matrix.dockerfile }}
@@ -29,22 +29,31 @@ jobs:
permissions:
packages: write
contents: read
strategy:
matrix:
platform:
- linux/amd64
- linux/arm64
steps:
- name: 'Check out the repo'
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: 'Set up QEMU'
uses: docker/setup-qemu-action@v2
with:
platforms: 'arm64,arm'
- name: 'Set up Docker Buildx'
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
with:
buildkitd-flags: --debug
- name: 'Log in to DockerHub'
if: github.event_name != 'pull_request'
uses: docker/login-action@v1
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: 'Apache variant metadata'
id: metadata-apache
uses: docker/metadata-action@v3
uses: docker/metadata-action@v4
with:
images: |
docker.io/martialblog/limesurvey
@@ -55,16 +64,17 @@ jobs:
latest=false
suffix=-apache
- name: 'Build and push LTS apache container images'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: 3.0/apache
context: 5.0/apache
push: true
tags: ${{ steps.metadata-apache.outputs.tags }}
labels: ${{ steps.metadata-apache.outputs.labels }}
platforms: ${{ matrix.platform }}
- name: 'FPM variant metadata'
id: metadata-fpm
uses: docker/metadata-action@v3
uses: docker/metadata-action@v4
with:
images: |
docker.io/martialblog/limesurvey
@@ -75,16 +85,17 @@ jobs:
latest=false
suffix=-fpm
- name: 'Build and push LTS fpm container images'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: 3.0/fpm
context: 5.0/fpm
push: true
tags: ${{ steps.metadata-fpm.outputs.tags }}
labels: ${{ steps.metadata-apache.outputs.labels }}
platforms: ${{ matrix.platform }}
- name: 'FPM Alpine variant metadata'
id: metadata-fpm-alpine
uses: docker/metadata-action@v3
uses: docker/metadata-action@v4
with:
images: |
docker.io/martialblog/limesurvey
@@ -95,9 +106,10 @@ jobs:
latest=false
suffix=-fpm-alpine
- name: 'Build and push LTS fpm-alpine container images'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: 3.0/fpm-alpine
context: 5.0/fpm-alpine
push: true
tags: ${{ steps.metadata-fpm-alpine.outputs.tags }}
labels: ${{ steps.metadata-apache.outputs.labels }}
platforms: ${{ matrix.platform }}

View File

@@ -9,15 +9,15 @@ jobs:
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
- 6.0/apache/Dockerfile
- 6.0/fpm-alpine/Dockerfile
- 6.0/fpm/Dockerfile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: hadolint/hadolint-action@v1.5.0
with:
dockerfile: ${{ matrix.dockerfile }}

View File

@@ -0,0 +1,48 @@
name: Test ARM Container Images
on:
push:
branches:
- 'arm/**'
pull_request:
branches:
- 'arm/**'
jobs:
test_images:
name: Test Latest Container Images
runs-on: ubuntu-latest
strategy:
matrix:
context:
- apache
- fpm-alpine
- fpm
platform:
- linux/arm64
steps:
- name: 'Check out the repo'
uses: actions/checkout@v3
- name: 'Set up QEMU'
uses: docker/setup-qemu-action@v2
with:
platforms: 'arm64,arm'
- name: 'Set up Docker Buildx'
uses: docker/setup-buildx-action@v2
- name: 'Build Container images'
uses: docker/build-push-action@v3
with:
context: 6.0/${{ matrix.context }}
push: false
load: true
tags: docker.io/martialblog/limesurvey:6-${{ matrix.context }}
platforms: ${{ matrix.platform }}
- name: 'Run Structure tests'
uses: plexsystems/container-structure-test-action@v0.2.0
with:
image: docker.io/martialblog/limesurvey:6-${{ matrix.context }}
config: tests/${{ matrix.context }}-tests.yaml

View File

@@ -4,7 +4,7 @@ on: [push, pull_request]
jobs:
test_images:
name: Test Latest Container Images with Trivy
name: Test Latest Container Images
runs-on: ubuntu-latest
strategy:
matrix:
@@ -14,21 +14,26 @@ jobs:
- fpm
steps:
- name: 'Check out the repo'
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: 'Set up QEMU'
uses: docker/setup-qemu-action@v2
with:
platforms: 'arm64,arm'
- name: 'Set up Docker Buildx'
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
- name: 'Build Container images'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: 5.0/${{ matrix.context }}
context: 6.0/${{ matrix.context }}
push: false
load: true
tags: docker.io/martialblog/limesurvey:5-${{ matrix.context }}
tags: docker.io/martialblog/limesurvey:6-${{ matrix.context }}
- name: 'Run Structure tests'
uses: plexsystems/container-structure-test-action@v0.2.0
with:
image: docker.io/martialblog/limesurvey:5-${{ matrix.context }}
image: docker.io/martialblog/limesurvey:6-${{ matrix.context }}
config: tests/${{ matrix.context }}-tests.yaml

View File

@@ -4,7 +4,7 @@ on: [push, pull_request]
jobs:
test_images:
name: Test LTS Container Images with Trivy
name: Test LTS Container Images
runs-on: ubuntu-latest
strategy:
matrix:
@@ -14,21 +14,24 @@ jobs:
- fpm
steps:
- name: 'Check out the repo'
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: 'Set up QEMU'
uses: docker/setup-qemu-action@v2
- name: 'Set up Docker Buildx'
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
- name: 'Build Container images'
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: 3.0/${{ matrix.context }}
context: 5.0/${{ matrix.context }}
push: false
load: true
tags: docker.io/martialblog/limesurvey:3-${{ matrix.context }}
tags: docker.io/martialblog/limesurvey:5-${{ matrix.context }}
- name: 'Run Structure tests'
uses: plexsystems/container-structure-test-action@v0.2.0
with:
image: docker.io/martialblog/limesurvey:3-${{ matrix.context }}
image: docker.io/martialblog/limesurvey:5-${{ matrix.context }}
config: tests/${{ matrix.context }}-tests.yaml

View File

@@ -59,8 +59,8 @@ RUN a2enmod headers rewrite remoteip; \
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
ARG version="3.28.35+221025"
ARG sha256_checksum="f34dd1196da0c098ebad28109deef54a47643451969cc4a839e284fa35c90e66"
ARG version="3.28.55+230328"
ARG sha256_checksum="7f820259aa68fcd2fff7a23e9261ad65af0b28085ef93a69bf14cc068ee829c5"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ARG USER=root
ARG LISTEN_PORT=80

View File

@@ -33,8 +33,8 @@ RUN set -ex; \
tidy \
zip
ARG version="3.28.35+221025"
ARG sha256_checksum="f34dd1196da0c098ebad28109deef54a47643451969cc4a839e284fa35c90e66"
ARG version="3.28.55+230328"
ARG sha256_checksum="7f820259aa68fcd2fff7a23e9261ad65af0b28085ef93a69bf14cc068ee829c5"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ENV LIMESURVEY_VERSION=$version

View File

@@ -46,8 +46,8 @@ RUN set -ex; \
tidy \
zip
ARG version="3.28.35+221025"
ARG sha256_checksum="f34dd1196da0c098ebad28109deef54a47643451969cc4a839e284fa35c90e66"
ARG version="3.28.55+230328"
ARG sha256_checksum="7f820259aa68fcd2fff7a23e9261ad65af0b28085ef93a69bf14cc068ee829c5"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ENV LIMESURVEY_VERSION=$version

View File

@@ -60,8 +60,8 @@ RUN a2enmod headers rewrite remoteip; \
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
ARG version="5.4.8+221024"
ARG sha256_checksum="8445c4f14dee4b16513a19d7e5298e86da885d02823b58ded9905496f558132c"
ARG version="5.6.14+230403"
ARG sha256_checksum="671689d54db6c018c5dd764c852fccd5e582c4cf743bd7fe50329d2fbab5f8a7"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ARG USER=www-data
ARG LISTEN_PORT=8080

View File

@@ -34,8 +34,8 @@ RUN set -ex; \
tidy \
zip
ARG version="5.4.8+221024"
ARG sha256_checksum="8445c4f14dee4b16513a19d7e5298e86da885d02823b58ded9905496f558132c"
ARG version="5.6.14+230403"
ARG sha256_checksum="671689d54db6c018c5dd764c852fccd5e582c4cf743bd7fe50329d2fbab5f8a7"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ARG USER=www-data
ENV LIMESURVEY_VERSION=$version

View File

@@ -46,8 +46,8 @@ RUN set -ex; \
tidy \
zip
ARG version="5.4.8+221024"
ARG sha256_checksum="8445c4f14dee4b16513a19d7e5298e86da885d02823b58ded9905496f558132c"
ARG version="5.6.14+230403"
ARG sha256_checksum="671689d54db6c018c5dd764c852fccd5e582c4cf743bd7fe50329d2fbab5f8a7"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ARG USER=www-data
ENV LIMESURVEY_VERSION=$version

86
6.0/apache/Dockerfile Normal file
View File

@@ -0,0 +1,86 @@
FROM docker.io/php:8.1-apache
LABEL maintainer="markus@martialblog.de"
# 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
# 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"
ARG version="6.0.0+230405"
ARG sha256_checksum="ee636330911150b5f109323b6226c48d9fd7634856b251bbf66a75a29d4b4756"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ARG USER=www-data
ARG LISTEN_PORT=8080
ENV LIMESURVEY_VERSION=$version
# Download, unzip and chmod LimeSurvey from GitHub (defaults to the official LimeSurvey/LimeSurvey repository)
RUN set -ex; \
curl -sSL "${archive_url}" --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 /usr/local/bin/entrypoint.sh
COPY vhosts-access-log.conf /etc/apache2/conf-enabled/other-vhosts-access-log.conf
USER $USER
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["apache2-foreground"]

172
6.0/apache/entrypoint.sh Executable file
View File

@@ -0,0 +1,172 @@
#!/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:-}
DB_MYSQL_ENGINE=${DB_MYSQL_ENGINE:-'MyISAM'}
ENCRYPT_KEYPAIR=${ENCRYPT_KEYPAIR:-}
ENCRYPT_PUBLIC_KEY=${ENCRYPT_PUBLIC_KEY:-}
ENCRYPT_SECRET_KEY=${ENCRYPT_SECRET_KEY:-}
ENCRYPT_NONCE=${ENCRYPT_NONCE:-}
ENCRYPT_SECRET_BOX_KEY=${ENCRYPT_SECRET_BOX_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'}
TABLE_SESSION=${TABLE_SESSION:-}
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 [ -n "$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//[[:space:]]/}',
),
//'session' => array (
// 'class' => 'application.core.web.DbHttpSession',
// 'connectionID' => 'db',
// 'sessionTableName' => '{{sessions}}',
//),
'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,
'mysqlEngine' => '$DB_MYSQL_ENGINE',
)
);
EOF
fi
# Enable Table Sessions if required
if [ -n "$TABLE_SESSION" ]; then
echo 'Info: Setting Table Session'
# Remove the comments in the config
sed -i "s/\/\///g" application/config/config.php
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 [ -n "$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';
\$config['encryptionnonce'] = '$ENCRYPT_NONCE';
\$config['encryptionsecretboxkey'] = '$ENCRYPT_SECRET_BOX_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
PHP_UPDATEDB_EXIT_CODE=$?
if [ $PHP_UPDATEDB_EXIT_CODE -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 "$@"

View File

@@ -0,0 +1,3 @@
SetEnvIF User-Agent "(?i)(check|health|probe)" dontlog
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!dontlog

63
6.0/fpm-alpine/Dockerfile Normal file
View File

@@ -0,0 +1,63 @@
FROM docker.io/php:8.1-fpm-alpine
LABEL maintainer="markus@martialblog.de"
# 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
ARG version="6.0.0+230405"
ARG sha256_checksum="ee636330911150b5f109323b6226c48d9fd7634856b251bbf66a75a29d4b4756"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ARG USER=www-data
ENV LIMESURVEY_VERSION=$version
# Download, unzip and chmod LimeSurvey from GitHub (defaults to the official LimeSurvey/LimeSurvey repository)
RUN set -ex; \
curl -sSL "${archive_url}" --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 /usr/local/bin/entrypoint.sh
USER $USER
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["php-fpm"]

165
6.0/fpm-alpine/entrypoint.sh Executable file
View File

@@ -0,0 +1,165 @@
#!/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:-}
DB_MYSQL_ENGINE=${DB_MYSQL_ENGINE:-'MyISAM'}
ENCRYPT_KEYPAIR=${ENCRYPT_KEYPAIR:-}
ENCRYPT_PUBLIC_KEY=${ENCRYPT_PUBLIC_KEY:-}
ENCRYPT_SECRET_KEY=${ENCRYPT_SECRET_KEY:-}
ENCRYPT_NONCE=${ENCRYPT_NONCE:-}
ENCRYPT_SECRET_BOX_KEY=${ENCRYPT_SECRET_BOX_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'}
TABLE_SESSION=${TABLE_SESSION:-}
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 [ -n "$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//[[:space:]]/}',
),
//'session' => array (
// 'class' => 'application.core.web.DbHttpSession',
// 'connectionID' => 'db',
// 'sessionTableName' => '{{sessions}}',
//),
'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,
'mysqlEngine' => '$DB_MYSQL_ENGINE',
)
);
EOF
fi
# Enable Table Sessions if required
if [ -n "$TABLE_SESSION" ]; then
echo 'Info: Setting Table Session'
# Remove the comments in the config
sed -i "s/\/\///g" application/config/config.php
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 [ -n "$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';
\$config['encryptionnonce'] = '$ENCRYPT_NONCE';
\$config['encryptionsecretboxkey'] = '$ENCRYPT_SECRET_BOX_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
PHP_UPDATEDB_EXIT_CODE=$?
if [ $PHP_UPDATEDB_EXIT_CODE -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 "$@"

70
6.0/fpm/Dockerfile Normal file
View File

@@ -0,0 +1,70 @@
FROM docker.io/php:8.1-fpm
LABEL maintainer="markus@martialblog.de"
# 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
ARG version="6.0.0+230405"
ARG sha256_checksum="ee636330911150b5f109323b6226c48d9fd7634856b251bbf66a75a29d4b4756"
ARG archive_url="https://github.com/LimeSurvey/LimeSurvey/archive/${version}.tar.gz"
ARG USER=www-data
ENV LIMESURVEY_VERSION=$version
# Download, unzip and chmod LimeSurvey from GitHub (defaults to the official LimeSurvey/LimeSurvey repository)
RUN set -ex; \
curl -sSL "${archive_url}" --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 /usr/local/bin/entrypoint.sh
USER $USER
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["php-fpm"]

165
6.0/fpm/entrypoint.sh Executable file
View File

@@ -0,0 +1,165 @@
#!/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:-}
DB_MYSQL_ENGINE=${DB_MYSQL_ENGINE:-'MyISAM'}
ENCRYPT_KEYPAIR=${ENCRYPT_KEYPAIR:-}
ENCRYPT_PUBLIC_KEY=${ENCRYPT_PUBLIC_KEY:-}
ENCRYPT_SECRET_KEY=${ENCRYPT_SECRET_KEY:-}
ENCRYPT_NONCE=${ENCRYPT_NONCE:-}
ENCRYPT_SECRET_BOX_KEY=${ENCRYPT_SECRET_BOX_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'}
TABLE_SESSION=${TABLE_SESSION:-}
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 [ -n "$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//[[:space:]]/}',
),
//'session' => array (
// 'class' => 'application.core.web.DbHttpSession',
// 'connectionID' => 'db',
// 'sessionTableName' => '{{sessions}}',
//),
'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,
'mysqlEngine' => '$DB_MYSQL_ENGINE',
)
);
EOF
fi
# Enable Table Sessions if required
if [ -n "$TABLE_SESSION" ]; then
echo 'Info: Setting Table Session'
# Remove the comments in the config
sed -i "s/\/\///g" application/config/config.php
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 [ -n "$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';
\$config['encryptionnonce'] = '$ENCRYPT_NONCE';
\$config['encryptionsecretboxkey'] = '$ENCRYPT_SECRET_BOX_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
PHP_UPDATEDB_EXIT_CODE=$?
if [ $PHP_UPDATEDB_EXIT_CODE -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 "$@"

View File

@@ -59,3 +59,9 @@ make fpm-alpine-latest
container-structure-test test --image docker.io/martialblog/limesurvey:5-fpm --config tests/fpm-tests.yaml
```
### ARM Platform
Changes related to the ARM platform should use branches starting with the `arm/` prefix, this ensures the GitHub Actions are triggered.
Background: ARM builds take a long time to finish on the GitHub Runners.

View File

@@ -1,14 +1,14 @@
RUNTIME?=podman
apache-lts:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:3-apache 3.0/apache
apache-latest:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:5-apache 5.0/apache
apache-latest:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:6-apache 6.0/apache
fpm-alpine-lts:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:3-fpm-alpine 3.0/fpm-alpine
fpm-alpine-latest:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:5-fpm-alpine 5.0/fpm-alpine
fpm-alpine-latest:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:6-fpm-alpine 6.0/fpm-alpine
fpm-lts:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:3-fpm 3.0/fpm
fpm-latest:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:5-fpm 5.0/fpm
fpm-latest:
$(RUNTIME) build --pull -t docker.io/martialblog/limesurvey:6-fpm 6.0/fpm

View File

@@ -14,12 +14,12 @@ Dockerfile to build a [LimeSurvey](https://limesurvey.org) Image for the Docker
## Supported tags and respective Dockerfile links
- [`6-apache`, `6.<BUILD-NUMBER>-apache`, `latest` ](https://github.com/martialblog/docker-limesurvey/blob/master/6.0/apache/Dockerfile)
- [`6-fpm`, `6.<BUILD-NUMBER>-fpm`](https://github.com/martialblog/docker-limesurvey/blob/master/6.0/fpm/Dockerfile)
- [`6-fpm-alpine`, `6.<BUILD-NUMBER>-fpm-alpine`](https://github.com/martialblog/docker-limesurvey/blob/master/6.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
@@ -85,6 +85,12 @@ For further details on the settings see: https://manual.limesurvey.org/Data_encr
# Reverse Proxy configuration
If you are running LimeSurvey behind a Reverse Proxy you might need some additional configuration in the Proxy. For example:
* Apache: `ProxyPreserveHost On`
* Nginx: `fastcgi_param HTTP_HOST my-survey.example.local;`
* Traefik: Set the Host Header explicitly via a customRequestHeaders
## Traefik example
**Hint**: if you want to deploy LimeSurvey on a sub-path (e.g. https://example.com/limesurvey) you have to set the BASE_URL and adjust the Containers Webservers. See the docker-compose Traefik example in the repository.
@@ -123,8 +129,8 @@ For further details on the settings see: https://manual.limesurvey.org/Data_encr
| ENCRYPT_KEYPAIR | Data encryption keypair |
| ENCRYPT_PUBLIC_KEY | Data encryption public key |
| ENCRYPT_SECRET_KEY | Data encryption secret key |
| ENCRYPT_NONCE | Data encryption nonce (used in 5.0) |
| ENCRYPT_SECRET_BOX_KEY | Data encryption secret box key (used in 5.0) |
| ENCRYPT_NONCE | Data encryption nonce (used in 5.0 and higher) |
| ENCRYPT_SECRET_BOX_KEY | Data encryption secret box key (used in 5.0 and higher) |
| LISTEN_PORT | Apache: Listen port. Default: 8080 |
For further details on the settings see: https://manual.limesurvey.org/Optional_settings#Advanced_Path_Settings
@@ -165,6 +171,12 @@ local docker-limesurvey_lime
$ docker volume rm docker-limesurvey_lime
```
## Upgrading to 6.0 from 5.x
The LimeSurvey 6 Images will use PHP 8.1 as Base Images.
LimeSurvey 5 will become the new LTS. LimeSurvey 3 is deprecated and will no longer be supported.
## 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:
@@ -185,6 +197,17 @@ 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.
# Known Issues
## LimeSurvey behind a reverse proxy with a subdirectory
When running LimeSurvey behind a reverse proxy with a subdirectory (i.e. example.com/limesurvey), the admin area might not be displayed correctly due to a routing issue. The application will forward you to the BASE URL regardless.
This might be fixed by setting the HTTP Host Header in the reverse proxy explicitly.
See:
- https://github.com/martialblog/docker-limesurvey/issues/127
# References
- https://www.limesurvey.org/

29
docker-compose.apache.yml Normal file
View File

@@ -0,0 +1,29 @@
version: "3.0"
services:
limesurvey:
image: docker.io/martialblog/limesurvey:latest
links:
- lime-db
depends_on:
- lime-db
environment:
- "DB_HOST=lime-db"
- "DB_PASSWORD=secret"
- "ADMIN_PASSWORD=foobar"
- "PUBLIC_URL=http://my.survey.localhost:8080" # Example, Change this
- "BASE_URL=http://my.survey.localhost:8080" # Example, Change this
proxy:
image: docker.io/httpd:bullseye
volumes:
- "./examples/apache-httpd.conf:/usr/local/apache2/conf/httpd.conf:ro"
- "./examples/apache-reverse-proxy.conf:/usr/local/apache2/conf/reverse-proxy.conf:ro"
ports:
- "8080:8080"
lime-db:
image: docker.io/mysql:5.7
environment:
- "MYSQL_USER=limesurvey"
- "MYSQL_DATABASE=limesurvey"
- "MYSQL_PASSWORD=secret"
- "MYSQL_ROOT_PASSWORD=secret"

View File

@@ -2,7 +2,7 @@ version: "3.0"
services:
limesurvey:
build:
context: 5.0/fpm/
context: 6.0/fpm/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent

View File

@@ -2,7 +2,7 @@ version: "3.0"
services:
limesurvey:
build:
context: 5.0/fpm-alpine/
context: 6.0/fpm-alpine/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent

View File

@@ -2,7 +2,7 @@ version: "3.0"
services:
limesurvey:
build:
context: 5.0/fpm/
context: 6.0/fpm/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent

View File

@@ -3,7 +3,7 @@ services:
limesurvey:
build:
# Hint: Change it to 3.0/apache/ if you want to use LimeSurvey 3.*
context: 5.0/apache/
context: 6.0/apache/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent

View File

@@ -0,0 +1,42 @@
version: "3.0"
services:
limesurvey:
build:
context: 6.0/apache/
dockerfile: Dockerfile
labels:
traefik.enable: 'true'
traefik.http.routers.limesurvey-http-router.entrypoints: "http"
traefik.http.routers.limesurvey-http-router.rule: "Host(`my.survey.localhost`)"
traefik.http.services.limesurvey-service.loadbalancer.server.port: "8080"
links:
- lime-db
depends_on:
- lime-db
environment:
- "DB_HOST=lime-db"
- "DB_PASSWORD=secret"
- "ADMIN_PASSWORD=foobar"
- "PUBLIC_URL=http://my.survey.localhost:8888"
- "BASE_URL=http://my.survey.localhost:8888"
traefik:
image: docker.io/traefik:v2.9
container_name: "traefik"
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.http.address=:8888"
ports:
- "8888:8888"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
lime-db:
image: docker.io/mysql:5.7
environment:
- "MYSQL_USER=limesurvey"
- "MYSQL_DATABASE=limesurvey"
- "MYSQL_PASSWORD=secret"
- "MYSQL_ROOT_PASSWORD=secret"

View File

@@ -2,7 +2,7 @@ version: "3.0"
services:
limesurvey:
build:
context: 5.0/apache/
context: 6.0/apache/
dockerfile: Dockerfile
labels:
traefik.enable: 'true'
@@ -24,7 +24,7 @@ services:
- "PUBLIC_URL=http://localhost:8888/limesurvey"
- "BASE_URL=http://localhost:8888/limesurvey"
traefik:
image: docker.io/traefik:v2.5
image: docker.io/traefik:v2.9
container_name: "traefik"
command:
- "--api.insecure=true"

View File

@@ -2,7 +2,7 @@ version: "3.0"
services:
limesurvey:
build:
context: 5.0/apache/
context: 6.0/apache/
dockerfile: Dockerfile
volumes:
# Hint: This is just an example, change /tmp to something persistent

131
examples/apache-httpd.conf Normal file
View File

@@ -0,0 +1,131 @@
ServerRoot "/usr/local/apache2"
Listen 8080
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule watchdog_module modules/mod_watchdog.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule suexec_module modules/mod_suexec.so
<IfModule !mpm_prefork_module>
</IfModule>
<IfModule mpm_prefork_module>
</IfModule>
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
ServerAdmin you@example.com
#
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog /proc/self/fd/2
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog /proc/self/fd/1 common
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule headers_module>
RequestHeader unset Proxy early
</IfModule>
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
# Configure mod_proxy_html to understand HTML4/XHTML1
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
IncludeOptional conf/reverse-proxy.conf

View File

@@ -0,0 +1,8 @@
<VirtualHost *:8080>
ServerAdmin admin@localhost.local
ServerName my.survey.localhost
ProxyPass / http://limesurvey:80/
ProxyPassReverse / http://limesurvey:80/
ProxyPreserveHost On
</VirtualHost>

View File

@@ -33,6 +33,8 @@ http {
fastcgi_pass limesurvey:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
# For Subdomains like https://survey.example.com
# fastcgi_param HTTP_HOST survey.example.com;
}
}
}

View File

@@ -21,9 +21,6 @@ fileExistenceTests:
path: '/var/www/html/admin/index.php'
shouldExist: true
permissions: '-rw-rw-r--'
- name: 'Ldap syslink'
path: '/usr/lib/x86_64-linux-gnu/libldap.so'
shouldExist: true
- name: "Dependencies - PHP - gd"
path: '/usr/local/etc/php/conf.d/docker-php-ext-gd.ini'
shouldExist: true

View File

@@ -34,5 +34,5 @@ sed -r -i -e "s/[0-9]+(\.[0-9]+)+\+[0-9]+/$NEW_VERSION/" "$MAJOR_VERSION/apache/
sed -r -i -e "s/[A-Fa-f0-9]{64}/$SHA256_CHECKSUM/" "$MAJOR_VERSION/apache/Dockerfile" "$MAJOR_VERSION/fpm/Dockerfile" "$MAJOR_VERSION/fpm-alpine/Dockerfile"
# After that, check and commit
echo "git add 3.0 ; git commit -m 'Upgrading to LTS Version ${NEW_VERSION}' && git tag ${NEW_TAG}"
echo "git add 5.0 ; git commit -m 'Upgrading to Version ${NEW_VERSION}' && git tag ${NEW_TAG}"
echo "git add 5.0 ; git commit -m 'Upgrading to LTS Version ${NEW_VERSION}' && git tag ${NEW_TAG}"
echo "git add 6.0 ; git commit -m 'Upgrading to Version ${NEW_VERSION}' && git tag ${NEW_TAG}"