1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# SPDX-FileCopyrightText: 2025 The superseedr Contributors
# SPDX-License-Identifier: GPL-3.0-or-later
services:
gluetun:
image: qmcgaw/gluetun
container_name: gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
# Volume for Gluetun's internal data
- gluetun-data:/gluetun
# Shared volume to write the port file
- forwarded-port:/tmp/gluetun
env_file:
- .gluetun.env
environment:
# If CLIENT_PORT is set in .env, this passes it to Gluetun.
# If CLIENT_PORT is NOT set, this will be empty, which is
# correct for users with dynamic port forwarding.
- FIREWALL_VPN_INPUT_PORTS=${CLIENT_PORT}
restart: unless-stopped
superseedr:
extends:
file: docker-compose.common.yml
service: superseedr
# This attaches superseedr to gluetun's network
network_mode: "service:gluetun"
depends_on:
volumes:
# --- App Volumes (from common.yml) ---
- ${HOST_SUPERSEEDR_DATA_PATH:-superseedr-data}:/superseedr-data
- ${HOST_SUPERSEEDR_CONFIG_PATH:-superseedr-config}:/root/.config/jagalite.superseedr
- ${HOST_SUPERSEEDR_SHARE_PATH:-superseedr-share}:/root/.local/share/jagalite.superseedr
# Add any addtional paths here
# /host/path:/container/path
# --- Shared Port Volume ---
# This is where superseedr reads the port file
- forwarded-port:/port-data
# Define all the volumes used
volumes:
superseedr-data:
superseedr-config:
superseedr-share:
gluetun-data:
forwarded-port: