diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9477420dea1c587d8fa31cdaedd904ae94b92a96..5de51760a840a224bf67b3b63afd053b7f0120e7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: registry.gitlab.tugraz.at/dbp/middleware/dbp-api/api-core-bundle/main:v1
+image: registry.gitlab.tugraz.at/dbp/middleware/dbp-api/api-server-template/main:v1
 
 before_script:
   - 'git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.tugraz.at/".insteadOf "git@gitlab.tugraz.at:"'
diff --git a/.gitlab-ci/Dockerfile b/.gitlab-ci/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..83bd83a48d9d7d7d297e16fb7eb4f065ac99a2ac
--- /dev/null
+++ b/.gitlab-ci/Dockerfile
@@ -0,0 +1,81 @@
+FROM debian:buster
+
+ENV LANG C.UTF-8
+ENV DEBIAN_FRONTEND noninteractive
+
+# Basics
+RUN apt-get update && apt-get install -y \
+    composer \
+    php-zip \
+    rsync \
+    sudo \
+    wget \
+    curl \
+    lsb-release \
+    && rm -rf /var/lib/apt/lists/*
+
+# PHP Repo
+RUN wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
+RUN echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
+
+# PHP 7.3
+RUN apt-get update && apt-get install -y \
+    php7.3 \
+    php7.3-curl \
+    php7.3-soap \
+    php7.3-xml \
+    php7.3-ldap \
+    php7.3-zip \
+    php7.3-gmp \
+    php7.3-xdebug \
+    php7.3-mbstring \
+    && rm -rf /var/lib/apt/lists/*
+COPY ./php-ini-overrides.ini /etc/php/7.3/cli/conf.d/
+
+# PHP 7.4
+RUN apt-get update && apt-get install -y \
+    php7.4 \
+    php7.4-curl \
+    php7.4-soap \
+    php7.4-xml \
+    php7.4-ldap \
+    php7.4-zip \
+    php7.4-gmp \
+    php7.4-xdebug \
+    php7.4-mbstring \
+    && rm -rf /var/lib/apt/lists/*
+COPY ./php-ini-overrides.ini /etc/php/7.4/cli/conf.d/
+
+# PHP 8.0
+# FIXME: php8.0-xdebug not installed because it leads to segfaults
+# https://gitlab.tugraz.at/dbp/middleware/api/-/issues/65#note_21039
+RUN apt-get update && apt-get install -y \
+    php8.0 \
+    php8.0-curl \
+    php8.0-soap \
+    php8.0-xml \
+    php8.0-ldap \
+    php8.0-zip \
+    php8.0-gmp \
+    php8.0-mbstring \
+    && rm -rf /var/lib/apt/lists/*
+COPY ./php-ini-overrides.ini /etc/php/8.0/cli/conf.d/
+
+# Default to PHP 7.3
+RUN sudo update-alternatives --set php /usr/bin/php7.3
+RUN sudo update-alternatives --set phar /usr/bin/phar7.3
+RUN sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.3
+
+# Add a normal user and enable sudo
+RUN useradd -u 1000 -ms /bin/bash user
+RUN echo 'user ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
+USER user
+
+# Install a newer composer
+RUN mkdir -p /home/user/.local/bin
+WORKDIR /home/user/.local/bin
+RUN wget https://raw.githubusercontent.com/composer/getcomposer.org/bfd95e2a4383ee9cf7c058c2df29d7acb5f86d77/web/installer  -O - -q | php --
+RUN mv composer.phar composer
+ENV PATH "/home/user/.local/bin:$PATH"
+
+WORKDIR /home/user
\ No newline at end of file
diff --git a/.gitlab-ci/README.md b/.gitlab-ci/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..3465c9bb78526c77cea65b99e4810dd79326ed60
--- /dev/null
+++ b/.gitlab-ci/README.md
@@ -0,0 +1,4 @@
+* In case of an incompatible change increase the tag version number in build.sh
+* ./build.sh
+* (first time) sudo docker login registry.gitlab.tugraz.at
+* sudo docker push registry.gitlab.tugraz.at/dbp/middleware/dbp-api/api-server-template/main:v1
\ No newline at end of file
diff --git a/.gitlab-ci/build.sh b/.gitlab-ci/build.sh
new file mode 100755
index 0000000000000000000000000000000000000000..52192df67bfa83769089c36cbb68aaee4f523ab8
--- /dev/null
+++ b/.gitlab-ci/build.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+set -e
+TAG="registry.gitlab.tugraz.at/dbp/middleware/dbp-api/api-server-template/main:v1"
+sudo docker build --tag "${TAG}" --file "Dockerfile" .
+sudo docker run --rm --security-opt label=disable \
+    --volume "$(pwd)/..:/home/user/app" --workdir "/home/user/app" \
+    --tty --interactive "${TAG}" bash
+echo "Now run: sudo docker push '$TAG'"
diff --git a/.gitlab-ci/php-ini-overrides.ini b/.gitlab-ci/php-ini-overrides.ini
new file mode 100644
index 0000000000000000000000000000000000000000..83a111612b6c9e9162a5c9b0d9d13c2a62171b58
--- /dev/null
+++ b/.gitlab-ci/php-ini-overrides.ini
@@ -0,0 +1 @@
+zend.assertions = 1
\ No newline at end of file