you can. two dir. are needed here ./data and . /root/config/middleware-manager/ plus it has to talk with pangolin api so they should be in the same network.
thats it. but i will suggest having them in the same compose file if possible. let me know if you get stuck
noticed something today in the settings probably didnāt caught my attention. I saw Data Source Settings and its set for pangolin. What happens if I switched to traefik? will that cause an issue or would it be better to switch?
yes. if using pangolin donāt. it will confuse you. pangolin part is working flawsley. itās for general use if you are not with pangolin.
Iām getting an error when trying to docker compose up -d.
![]()
It looks like it thinks templates.yaml is a directory.
Here is the relevant section of the docker compose file.
you will have to create the yml file first.
what needs to go in the file?
choose whatās needed and deploy
alright. That seemed to work.
Iāll be able to play around with it some more tomorrow
This is how I fixed this:
Go into config directory and remove the directory which container has created
sudo rm -rv templates.yml
Then create the file menully
touch templates.yml
docker compose down && docker compose up -d
Hi HHF and everyone else!
Iāve docker and docker-compose running on my Pangolin server (VM in proxmox, running on Debian).
I tried adding the middleware-manager to the docker-compose.yml and then run the docker-compose up -d middleware-manager but it tells me āsudo: docker-compose: command not foundā
When I run docker compose version I get āDocker Compose version v2.33.1ā so itās there and installed - plus my Pangolin is running beautifully. But Iād like to secure it further.
EDIT: Should probably specify that my Pangolin is local. I donāt use a VPS.
docker compose up -d middleware-manager
docker compose down && docker compose up -d
Thanks!
When I try it with those I now at least get a new error ![]()
(root) additional property middleware-manager is not allowed
just use docker compose up -d
its yml indentation error.
name: pangolin
services:
pangolin:
image: fosrl/pangolin:1.2.0
container_name: pangolin
restart: unless-stopped
volumes:
- ./config:/app/config
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/api/v1/"]
interval: "3s"
timeout: "3s"
retries: 5
gerbil:
image: fosrl/gerbil:1.0.0
container_name: gerbil
restart: unless-stopped
depends_on:
pangolin:
condition: service_healthy
command:
- --reachableAt=http://gerbil:3003
- --generateAndSaveKeyTo=/var/config/key
- --remoteConfig=http://pangolin:3001/api/v1/gerbil/get-config
- --reportBandwidthTo=http://pangolin:3001/api/v1/gerbil/receive-bandwidth
volumes:
- ./config/:/var/config
cap_add:
- NET_ADMIN
- SYS_MODULE
ports:
- 51820:51820/udp
- 8080:8080
- 443:443 # Port for traefik because of the network_mode
- 80:80 # Port for traefik because of the network_mode
traefik:
image: traefik:v3.3.3
container_name: traefik
restart: unless-stopped
network_mode: service:gerbil # Ports appear on the gerbil service
depends_on:
pangolin:
condition: service_healthy
command:
- --configFile=/etc/traefik/traefik_config.yml
volumes:
- ./config/traefik:/etc/traefik:ro # Volume to store the Traefik configuration
- ./config/letsencrypt:/letsencrypt # Volume to store the Let's Encrypt certificates
- ./config/traefik/logs:/var/log/traefik # Volume to store Traefik logs
- ./config/traefik/rules:/rules
middleware-manager:
image: hhftechnology/middleware-manager:traefik-int
container_name: middleware-manager
restart: unless-stopped
volumes:
- ./data:/data
- ./config/traefik/rules:/conf
- ./config/middleware-manager/templates.yaml:/app/config/templates.yaml # Optional for custom templates
environment:
ports:
- "3456:3456"
error-pages:
image: ghcr.io/tarampampam/error-pages:3
container_name: error-pages
restart: unless-stopped
environment:
TEMPLATE_NAME: connection # Choose from available templates: ghost, connection, shuffle, etc.
labels:
traefik.enable: true
networks:
default:
driver: bridge
name: pangolin
Ah right! I always forgets that. So what now if Iāve removed the tabs from the updates I did (went back, and checked which files was altered, then removed tabs and added spaces instead).
Error remains.
Iām having some trouble getting Middleware Manager to work. Iām installing the 2.0 version into an existing Pangolin install on my Racknerd VPS, which is setup using the official guide on the Pangolin docs. I rarely if at all customized it.
I added the middleware-manager section to the docker-compose.yml file and restarted the whole VPS (just for peace of mind). I can still access Pangolin, but I cant figure out how to access the Middleware Manager dashboard. I tried accessing it via http://myracknerdip:3456 but that doesnāt work.
I also tried following the steps for moving the dynamic-config.yml file from traefik folder, and those other related steps in the github repo, but then after that I can no longer access the Pangolin dashboard either.
Hi, there are two ways you can access middleware manager. on by making, it a resource and other by directly putting it as router and service in the dynamic file.
I am sure you have not update traefik_config.yml file with correct paths.
you have to move dynamic file in to rules folder.
then
Check you compose file
Thanks for the reply. I reset everything back from a backup and started fresh now. I added the section in the compose yml first. Then I tried the traefik_config yml. I see that by default there already is a section like this. Do I delete the filename line?
providers:
file:
filename: /etc/traefik/dynamic_config.yml
correct and set similar like what i have shown in screenshot.
api:
insecure: true
dashboard: true
providers:
http:
endpoint: "http://pangolin:3001/api/v1/traefik-config"
pollInterval: "5s"
file:
directory: "/rules"
watch: true
experimental:
plugins:
badger:
moduleName: "github.com/fosrl/badger"
version: "v1.1.0"
log:
level: "INFO"
format: "common"
certificatesResolvers:
letsencrypt:
acme:
httpChallenge:
entryPoint: web
email: "discourse@hhf.technology"
storage: "/letsencrypt/acme.json"
caServer: "https://acme-v02.api.letsencrypt.org/directory"
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
transport:
respondingTimeouts:
readTimeout: "30m"
http:
tls:
certResolver: "letsencrypt"
serversTransport:
insecureSkipVerify: true




