Docudjeex
Server core

Docker

Install Docker and Dockge on Debian to deploy and manage self-hosted services with simple container stacks.

Every app in this guide, Jellyfin, Vaultwarden, Immich, to name a few, comes with its own list of dependencies, its own version of Python or Node, its own quirks. Installing all of that directly on Debian works for a while, until two apps want a different version of the same library, or removing one leaves files scattered across the system with no clean way back.

A container sidesteps the problem: it packages an app together with everything it needs to run, isolated from the rest of the system and from every other container. Starting one doesn't touch Debian's own packages, and removing it is a single command that leaves nothing behind. It's not a virtual machine either, there's no second operating system to boot or resources to pre-allocate: a container shares the host's kernel and starts in about a second, using only the RAM and CPU the app inside it actually needs.

Docker is the tool that builds, starts and manages these containers. Point it at an image, a ready-made snapshot of an app maintained by its developers, and it downloads it and runs it in one command. The rest of Serveex is built entirely on it: every app from here on is one Docker container, or a handful of them working together.

Install Docker

Add the Docker repository and GPG key

Terminal
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Install the packages

Terminal
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Done !

More options: Install Docker for Debian 13

From here on, we assume the stacks are installed in the /srv/docker folder, created using the command:
Terminal
sudo mkdir /srv/docker

Install Dockge to manage and deploy containers

Dockge is a web tool to create, configure, launch, and manage Docker containers. It's a simple, intuitive interface that’s lighter and easier for beginners than using the CLI or Portainer.

Configuration

  • /
    • srv
      • docker
        • dockge
          • compose.yml

Create the stack folder

Terminal
cd /srv/docker
sudo mkdir dockge

Create the compose file

Terminal
cd /srv/docker/dockge
sudo nano compose.yml

Paste the following:

compose.yaml
---
services:
  dockge:
    image: louislam/dockge:1
    restart: unless-stopped
    container_name: dockge
    ports:
      - 3555:5001 # LAN-accessible port will be 3555

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /srv/docker/dockge/data:/app/data
      - /srv/docker:/srv/docker
    environment:
      - DOCKGE_STACKS_DIR=/srv/docker

Press Ctrl+O, then Enter to save, and Ctrl+X to exit.

Launch the container

Terminal
cd /srv/docker/dockge
sudo docker compose up -d

Then go to http://yourserverip:3555 in your browser to access the login page.

More info on Dockge and how to use it

Done !

And there you go! Docker and a tool to easily manage your containers are ready!

Watchtower, to auto-update containers

Watchtower is a container that checks for updates and pulls new images automatically, just by adding a label in your containers’ compose.yml files.

Configuration

Create the stack

  • Open Dockge in your browser
  • Click compose
  • Name the stack watchtower
  • Paste the config below into the default config area in Dockge
compose.yaml
---
services:
  watchtower:
    container_name: watchtower
    image: ghcr.io/nicholas-fedor/watchtower:latest
    restart: unless-stopped
    env_file:
      - .env
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE=${SCHEDULE}
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      # Discord notifications - uncomment if used
      #- WATCHTOWER_NOTIFICATIONS=slack
      #- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower
      #- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=${WH_URL}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Set your environment variables

Fill in the .env section in Dockge with the following:

.env
SCHEDULE=
WH_URL=
PropertyValueExamples
SCHEDULECron format0 0 6 * * * (every day at 6 AM)
WH_URLYour Discord webhook URL - append /slack at the endhttps://yourdiscordserver/webhook/slack

Enable Watchtower on other containers

To have Watchtower monitor your other containers, add this to their compose.yml:

compose.yaml
---
labels:
  - com.centurylinklabs.watchtower.enable=true

Then restart the modified stacks.

Done !

And that's it! You now have a solid base to start deploying the services you want!

Contributor:Djeex
Copyright © 2026