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"VPN_PROVIDER=protonvpn
WIREGUARD_PRIVATE_KEY=your_wireguard_private_key
WIREGUARD_ADDRESSES=10.2.0.2/32
VPN_COUNTRY=Switzerland