Enhancing Your Pangolin Deployment with Middleware Manager

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

1 Like

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?

1 Like

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.

1 Like

I’m getting an error when trying to docker compose up -d.

image

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?

1 Like

choose what’s needed and deploy

alright. That seemed to work.
I’ll be able to play around with it some more tomorrow

1 Like

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

2 Likes

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.

1 Like

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 :stuck_out_tongue:

(root) additional property middleware-manager is not allowed
1 Like

just use docker compose up -d

Even with that it says the same.

1 Like

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.

1 Like

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.

1 Like

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
1 Like

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
1 Like