diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3f34e919c04cb83372bfcff3c08bcbde93701638
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,41 @@
+image: registry.gitlab.tugraz.at/dbp/middleware/dbp-api/api-server-template:v1
+
+before_script:
+  - 'git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.tugraz.at/".insteadOf "git@gitlab.tugraz.at:"'
+
+variables:
+  COMPOSER_CACHE_DIR: "$CI_PROJECT_DIR/_composer_cache"
+
+cache:
+  key: ${CI_PROJECT_PATH}
+  paths:
+    - _composer_cache
+
+stages:
+  - test
+
+.test_defaults: &test_defaults
+  script:
+    - sudo update-alternatives --set php "/usr/bin/${PHP}"
+    - composer install
+    - composer test
+
+test-php7.3:
+  stage: test
+  variables:
+    PHP: "php7.3"
+  <<: *test_defaults
+
+test-php7.4:
+  stage: test
+  variables:
+    PHP: "php7.4"
+  <<: *test_defaults
+
+lint:
+  stage: test
+  allow_failure: true
+  script:
+    - sudo update-alternatives --set php /usr/bin/php7.3
+    - composer install
+    - composer run lint
\ No newline at end of file
diff --git a/.gitlab-ci/Dockerfile b/.gitlab-ci/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..4e099f8bd198b6f268bc3739f9b74e6412436d0d
--- /dev/null
+++ b/.gitlab-ci/Dockerfile
@@ -0,0 +1,57 @@
+FROM debian:buster
+
+ENV LANG C.UTF-8
+ENV DEBIAN_FRONTEND noninteractive
+
+# Basics
+RUN apt-get update && apt-get install -y \
+    composer \
+    php-zip \
+    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/
+
+# 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
+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..8d8563a8a532ba9ea8d93a9ea671de518ce02a90
--- /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: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..bdc8b7409e69717470c2eb484fe41bb1ca50defb
--- /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:v1"
+docker build --tag "${TAG}" --file "Dockerfile" .
+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'"
\ No newline at end of file
diff --git a/.gitlab-ci/php-ini-overrides.ini b/.gitlab-ci/php-ini-overrides.ini
new file mode 100644
index 0000000000000000000000000000000000000000..23c8e404f963f4205366c1c3f65eba8c9c33988f
--- /dev/null
+++ b/.gitlab-ci/php-ini-overrides.ini
@@ -0,0 +1 @@
+zend.assertions = 1