yaml
services:

  gluetun:
    image: qmcgaw/gluetun
    container_name: gluetun
    restart: always
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    ports:
      - 8080:8080 # Porta del servizio agganciato (es: SearXNG)
      - 8000:8000 # Control Server API (opzionale, per monitoraggio)
    volumes:
      - ./gluetun/config:/gluetun
    environment:
      - VPN_SERVICE_PROVIDER=${VPN_PROVIDER}
      - VPN_TYPE=wireguard
      - WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY}
      - WIREGUARD_ADDRESSES=${WIREGUARD_ADDRESSES}
      - SERVER_COUNTRIES=${VPN_COUNTRY}
      - TZ=Europe/Rome
      - UPDATER_PERIOD=8h
      - HTTP_CONTROL_SERVER_ADDRESS=:8000
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/v1/vpn/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

  searxng:
    image: docker.io/searxng/searxng:latest
    container_name: searxng
    restart: unless-stopped
    network_mode: "service:gluetun"
    depends_on:
      gluetun:
        condition: service_healthy
    volumes:
      - ./searxng/config:/etc/searxng
      - ./searxng/data:/var/cache/searxng
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
bash
VPN_PROVIDER=protonvpn
WIREGUARD_PRIVATE_KEY=your_wireguard_private_key
WIREGUARD_ADDRESSES=10.2.0.2/32
VPN_COUNTRY=Switzerland