diff --git a/tdev-website/docs/dokku/drone-ci/drone-runner.mdx b/tdev-website/docs/dokku/drone-ci/drone-runner.mdx
new file mode 100644
index 000000000..46108d420
--- /dev/null
+++ b/tdev-website/docs/dokku/drone-ci/drone-runner.mdx
@@ -0,0 +1,52 @@
+---
+page_id: 77aa276d-fed2-4ddb-9567-80e58fd4a48c
+---
+
+import { Val, TemplateCode, DynamicInput } from '@tdev-components/DynamicValues';
+
+# Drone Runner
+
+[Drone Docker Runner](https://docs.drone.io/runner/docker/installation/linux/) auf Dokku deployen.
+
+
+
+
+
+
+
+
+
+ ```bash title="root@dokku"
+ dokku apps:create {{APP}}
+
+ # Umgebungsvariablen für die Verbindung zum Drone Server
+ dokku config:set --no-restart {{APP}} DRONE_RPC_SECRET="$(dokku config:get {{DRONE_SERVER_APP}} DRONE_RPC_SECRET)"
+ dokku config:set --no-restart {{APP}} DRONE_RPC_PROTO="{{DRONE_RPC_PROTO}}"
+ dokku config:set --no-restart {{APP}} DRONE_RPC_HOST="{{DRONE_RPC_HOST}}"
+ dokku config:set --no-restart {{APP}} DRONE_RUNNER_CAPACITY="{{DRONE_RUNNER_CAPACITY}}"
+ dokku config:set --no-restart {{APP}} DRONE_RUNNER_NAME="{{DRONE_RUNNER_NAME}}"
+
+ # Docker Socket mounten, damit Builds/Container gestartet werden können
+ dokku storage:mount {{APP}} /var/run/docker.sock:/var/run/docker.sock
+
+ # Port-Mapping (Runner lauscht auf 3000)
+ dokku ports:set {{APP}} http:3000:3000
+
+ # Deploy
+ dokku git:from-image {{APP}} drone/drone-runner-docker:latest
+ ```
+
+
+## Update
+
+
+
+
+
+ ```bash title="root@dokku"
+ docker pull drone/drone-runner-docker:{{IMAGE_TAG}}
+ dokku git:from-image {{APP}} drone/drone-runner-docker:{{IMAGE_TAG}}
+ ```
+
+
+Verfügbare Tags: [drone/drone-runner-docker/tags](https://hub.docker.com/r/drone/drone-runner-docker/tags)
diff --git a/tdev-website/docs/dokku/drone-ci/drone-server.mdx b/tdev-website/docs/dokku/drone-ci/drone-server.mdx
new file mode 100644
index 000000000..052dc705d
--- /dev/null
+++ b/tdev-website/docs/dokku/drone-ci/drone-server.mdx
@@ -0,0 +1,110 @@
+---
+page_id: 912ac919-b418-4b2a-bf6e-6ae875311ed9
+---
+
+import { DynamicInput, TemplateCode } from '@tdev-components/DynamicValues';
+
+# Drone Server
+
+Drone Server auf Dokku deployen.
+
+Referenz
+: [docs.drone.io](https://docs.drone.io/server/provider/github/)
+Dockerhub
+: [hub.docker.com/r/drone/drone](https://hub.docker.com/r/drone/drone)
+
+
+
+
+
+
+
+
+
+
+## Dokku vorbereiten und deployen
+
+
+ ```bash title="root@dokku"
+ # App erstellen
+ dokku apps:create {{APP}}
+
+ # Domain und Port setzen
+ dokku domains:set {{APP}} {{DOMAIN}}
+ dokku ports:add {{APP}} http:80:80
+
+ # Persistentes Verzeichnis für die SQLite-Datenbank mounten
+ mkdir -p /var/lib/dokku/data/storage/{{APP}}
+ chown -R 1000:1000 /var/lib/dokku/data/storage/{{APP}}
+ dokku storage:mount {{APP}} /var/lib/dokku/data/storage/{{APP}}:/data
+
+ # GitHub OAuth und Drone-Konfiguration
+ dokku config:set --no-restart {{APP}} DRONE_GITHUB_CLIENT_ID="{{DRONE_GITHUB_CLIENT_ID}}"
+ dokku config:set --no-restart {{APP}} DRONE_GITHUB_CLIENT_SECRET="{{DRONE_GITHUB_CLIENT_SECRET}}"
+ dokku config:set --no-restart {{APP}} DRONE_RPC_SECRET=$(openssl rand -hex 32)
+ dokku config:set --no-restart {{APP}} DRONE_SERVER_HOST="{{DOMAIN}}"
+ dokku config:set --no-restart {{APP}} DRONE_SERVER_PROTO="http"
+
+ # Nur bekannte Benutzer zulassen
+ dokku config:set --no-restart {{APP}} DRONE_USER_FILTER="{{DRONE_USER_FILTER}}"
+
+ # Admin-Benutzer definieren
+ dokku config:set --no-restart {{APP}} DRONE_USER_CREATE="{{DRONE_USER_CREATE}}"
+
+ # Optional: E-Mail für Let's Encrypt setzen
+ dokku config:set --no-restart {{APP}} DOKKU_LETSENCRYPT_EMAIL="{{DOKKU_LETSENCRYPT_EMAIL}}"
+
+ # Image deployen
+ dokku git:from-image {{APP}} {{DRONE_IMAGE}}
+
+ # Optional: SSL aktivieren
+ dokku letsencrypt:enable {{APP}}
+ ```
+
+
+:::info[DRONE_RPC_SECRET]
+Der Wert ist ein gemeinsames Secret zwischen Drone Server und Runnern. Server und Runner müssen exakt denselben Wert verwenden.
+
+Ein sicheres Secret kann so generiert werden:
+
+
+ ```bash title="root@dokku"
+ openssl rand -hex 32
+ ```
+
+:::
+
+:::warning[DRONE_SERVER_PROTO auf http lassen]
+Bei Dokku wird TLS von Nginx terminiert. Intern wird die Anfrage per HTTP an den Container weitergeleitet.
+
+Wenn hier `https` gesetzt wird, kann es zu Redirect-Loops kommen.
+:::
+
+:::warning[DRONE_USER_FILTER setzen]
+Ohne `DRONE_USER_FILTER` kann sich standardmässig jeder authentifizieren, der über den konfigurierten Provider verfügt.
+
+Beispiel:
+
+
+ ```bash title="root@dokku"
+ dokku config:set --no-restart {{APP}} DRONE_USER_FILTER="{{DRONE_USER_FILTER}}"
+ ```
+
+:::
+
+## Update
+
+
+ ```bash title="root@dokku"
+ docker pull {{DRONE_IMAGE}}
+ dokku ps:rebuild {{APP}}
+ ```
+
+
+Falls auf eine spezifische Version aktualisiert werden soll:
+
+
+ ```bash title="root@dokku"
+ dokku git:from-image {{APP}} drone/drone:2.7.3
+ ```
+
\ No newline at end of file
diff --git a/tdev-website/docs/dokku/drone-ci/index.mdx b/tdev-website/docs/dokku/drone-ci/index.mdx
new file mode 100644
index 000000000..05b0820ae
--- /dev/null
+++ b/tdev-website/docs/dokku/drone-ci/index.mdx
@@ -0,0 +1,54 @@
+---
+page_id: 7dd02198-e086-4464-b803-71f4f5eb095e
+---
+
+# Drone CI
+
+
+[Drone CI](https://www.drone.io/) kann einfach mit Github, *Bitbucket, Gitlab* usw. verwendet werden. Diese Beschreibung bezieht sich auf die Integration mit Github.
+
+Für das Deployment auf Dokku werden zwei Apps benötigt: [drone-server](./drone-server.mdx) und [drone-runner](./drone-runner.mdx).
+
+Eine `.drone.yml` im Root-Verzeichnis des Repositorys definiert die auszuführenden Schritte.
+
+Als Beispiel folgt hier das minimale Skript, das diese Seite baut und deployt, ohne Cache.
+
+```yml title=.drone.yml
+---
+kind: pipeline
+type: docker
+name: default
+
+steps:
+
+- name: submodules
+ image: alpine/git
+ commands:
+ - git submodule update --init --recursive
+
+- name: website
+ image: node:16.11.1
+ commands:
+ - mkdir -p $HOME/.ssh
+ - ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts
+ - echo "$GITHUB_PRIVATE_KEY" > "$HOME/.ssh/id_rsa"
+ - chmod 0600 $HOME/.ssh/id_rsa
+ - yarn install --frozen-lockfile
+ - npm run deploy
+ environment:
+ USE_SSH: true
+ GIT_USER: $DRONE_COMMIT_AUTHOR
+ GITHUB_PRIVATE_KEY:
+ from_secret: "git_deploy_private_key"
+ when:
+ event:
+ include:
+ - push
+ - pull_request
+
+trigger:
+ branch:
+ - main
+```
+
+Das Setup erwartet eine Umgebungsvariable mit dem Namen `git_deploy_private_key`, die den privaten Schlüssel enthält. Der zugehörige öffentliche Schlüssel muss beispielsweise in Github als Deploy Key hinterlegt sein.
\ No newline at end of file