diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/docker/django/Dockerfile b/docker/django/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..646c05809439df8eea54d56b067fc27a92480479
--- /dev/null
+++ b/docker/django/Dockerfile
@@ -0,0 +1,30 @@
+FROM python:3.10.15-bullseye
+
+# Set variables
+ENV DEBIAN_FRONTEND=noninteractive
+ENV TZ="Europe/Berlin"
+
+# Install dependencies
+RUN apt-get update -qq  && apt-get upgrade -qqy \
+    && apt-get install -qqy \
+    python3-pip \
+    htop \
+    vim \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/*
+
+# Create the folder at the container
+WORKDIR /c3buttons
+
+# Install python requirements
+COPY ../../django/requirements.txt ./
+RUN pip3 install -r requirements.txt
+
+# Copy App
+COPY ../../django/ .
+
+### TEST
+# CMD ["sleep", "10000000"]
+
+### PROD
+CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..dd063421d6633c3c09f4720e78c9aee303039940
--- /dev/null
+++ b/docker/docker-compose.yml
@@ -0,0 +1,108 @@
+---
+
+services:
+  django:
+    image: c3buttons-django:latest
+    container_name: c3buttons-django
+    restart: unless-stopped
+    healthcheck:
+      test: ["CMD-SHELL", "curl -f http://localhost:8000/auth/test/open || exit 1"]
+      interval: 30s
+      timeout: 5s
+      retries: 5
+    ### DISABLE PORTS FOR PRODUCTION
+    ports:
+      - '8000:8000'
+    # volumes:
+    #   - ./django/data/db.sqlite3:/c3buttons/db.sqlite3
+    environment:
+      ###
+      ### PLEASE CHANGE THIS
+      ###
+      - DEFAULT_TOKEN_REFRESH_DAYS=7
+      - DEFAULT_TOKEN_EXPIRE_MIN=10080 # 10080 min --> 7 days
+      - DEFAULT_DJANGO_DEBUG=true
+
+  gpio:
+    image: c3buttons-gpio:latest
+    container_name: c3buttons-gpio
+    restart: unless-stopped
+    #########
+    # healthcheck:
+    #   test: ["CMD-SHELL", "curl -f http://localhost:8000/auth/test/open || exit 1"]
+    #   interval: 30s
+    #   timeout: 5s
+    #   retries: 5
+    #########
+    # depends_on:
+    #   django:
+    #     condition: service_healthy
+    links:
+      - django
+    privileged: true
+    devices:
+      - /dev/gpiomem:/dev/gpiomem
+    volumes:
+      # - /dev/gpiomem:/dev/gpiomem
+      ### DEBUG
+      - ../gpio_buttons:/c3buttons
+    environment:
+      ###
+      ### PLEASE CHANGE THIS
+      ###
+      - 'DATABASE_API_TOKEN=<PLEASE_CHANGE_THIS>'
+      - 'BOXES_USED="BUTTON_BOX_1, BUTTON_BOX_2, BUTTON_BOX_3"'
+      # - 'BOXES_USED="BUTTON_BOX_1, BUTTON_BOX_2"'
+      - 'BUTTON_BOX_1={"pin_button": 16, "pin_led": 14}'
+      - 'BUTTON_BOX_2={"pin_button": 20, "pin_led": 19}'
+      - 'BUTTON_BOX_3={"pin_button": 21, "pin_led": 13}'
+
+  grafana:
+    image: grafana/grafana:latest
+    container_name: c3buttons-grafana
+    restart: unless-stopped
+    healthcheck:
+      test: ["CMD-SHELL", "curl -f http://localhost:3000/api/health || exit 1"]
+      interval: 30s
+      timeout: 5s
+      retries: 5
+    # depends_on:
+    #   django:
+    #     condition: service_healthy
+    links:
+      - django
+    ### DISABLE PORTS FOR PRODUCTION
+    ports:
+      - '3000:3000'
+    volumes:
+      - ./grafana/data:/var/lib/grafana
+    environment:
+      - FOO=BAR
+      - GF_FEATURE_TOGGLES_PUBLICDASHBOARDS=true
+      - TLS_SKIP_VERIFY_INSECURE=true
+
+  proxy:
+    image: 'jc21/nginx-proxy-manager:latest'
+    container_name: c3buttons-proxy
+    restart: unless-stopped
+    healthcheck:
+      test: ["CMD-SHELL", "curl -f http://localhost:81 || exit 1"]
+      interval: 30s
+      timeout: 5s
+      retries: 5
+    # depends_on:
+    #   django:
+    #     condition: service_healthy
+    #   grafana:
+    #     condition: service_healthy
+    links:
+      - django
+      - grafana
+    ports:
+      - '80:80'
+      - '443:443'
+      ### This is the admin port, disable for Production
+      - '81:81'
+    volumes:
+      - ./proxy/data:/data
+      - ./proxy/letsencrypt:/etc/letsencrypt
diff --git a/docker/gpio/Dockerfile b/docker/gpio/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..d1771ad8996f7fe3c52852790ef2a2ebcf1ee695
--- /dev/null
+++ b/docker/gpio/Dockerfile
@@ -0,0 +1,50 @@
+FROM ubuntu:24.04
+
+# Set variables
+ENV DEBIAN_FRONTEND=noninteractive
+ENV TZ="Europe/Berlin"
+
+# Install dependencies
+RUN apt-get update -qq  && apt-get upgrade -qqy \
+# python3-dev \
+# python3-venv \
+    && apt-get install -qqy \
+    python3-pip \
+    python3-lgpio \
+    python3-pigpio \
+    python3-rpi.gpio \
+    htop \
+    vim \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/*
+
+# New debian base FUCKING shit
+RUN rm -rfv /usr/lib/python3*/EXTERNALLY-MANAGED
+
+# Change user for installing python packages -> Set user and group
+ARG user=appuser
+ARG group=appuser
+ARG uid=2000
+ARG gid=2000
+RUN groupadd -g ${gid} ${group}
+# <--- the '-m' create a user home directory
+RUN useradd -u ${uid} -g ${group} -s /bin/sh -m ${user}
+
+# Create the folder at the container
+WORKDIR /home/appuser/c3buttons
+
+# Install python requirements
+COPY ../../gpio_buttons/requirements.txt ./
+RUN pip3 install -r requirements.txt
+
+# Install GPIO
+RUN pip3 install gpiozero --break-system-packages
+
+# Copy App
+COPY ../../gpio_buttons/ .
+
+### TEST
+CMD ["sleep", "1000000"]
+
+### PROD
+# CMD ["python3", "main.py"]