bitmagnet/docker-compose.yml
Alberto Leal d5d3535acc
Some checks are pending
Checks / lint (push) Waiting to run
Checks / test (push) Waiting to run
Checks / generated (push) Waiting to run
CodeQL / Analyze (go) (push) Waiting to run
CodeQL / Analyze (javascript-typescript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
chore: Update docker-compose.yml (#370)
`gluetun` may take a while before a VPN connection is established. Before that completes, `bitmagnet` will immediately start attempting to make connection attempts, which will fail.

`gluetun` provides a healthcheck via its `Dockerfile`: https://github.com/qdm12/gluetun-wiki/blob/main/faq/healthcheck.md

Co-authored-by: mgdigital <mgdigital@users.noreply.github.com>
2025-01-25 14:50:02 +00:00

203 lines
5.8 KiB
YAML

# This is a full-featured example for running bitmagnet through a gluetun VPN connection with Grafana/Prometheus observability services.
# See https://bitmagnet.io/setup/installation.html for a minimal docker-compose example.
services:
bitmagnet:
container_name: bitmagnet
image: ghcr.io/bitmagnet-io/bitmagnet:latest
volumes:
- ./config:/root/.config/bitmagnet
# Mount data folder (currently only used for logs when file rotation is enabled):
- ./data/bitmagnet:/root/.local/share/bitmagnet
restart: unless-stopped
environment:
# Enable logging to rotating files for ingest to Loki:
- LOG_FILE_ROTATOR_ENABLED=true
- POSTGRES_HOST=postgres
- POSTGRES_PASSWORD=postgres
# - TMDB_API_KEY=your_api_key
network_mode: service:gluetun
depends_on:
postgres:
condition: service_healthy
gluetun:
condition: service_healthy
command:
- worker
- run
# Run all workers:
- --all
# Or enable individual workers:
# - --keys=http_server
# - --keys=queue_server
# - --keys=dht_crawler
gluetun:
container_name: bitmagnet-gluetun
image: qmcgaw/gluetun:latest
cap_add:
- NET_ADMIN
ports:
# The bitmagnet ports must be exposed by the gluetun container:
- "3333:3333"
# BitTorrent ports:
- "3334:3334/tcp"
- "3334:3334/udp"
environment:
# Put your personal gluetun/VPN account config and credentials here:
# (See https://github.com/qdm12/gluetun-wiki/tree/main/setup/providers)
- VPN_SERVICE_PROVIDER=your_vpn_provider
devices:
# See https://github.com/qdm12/gluetun/issues/2538
- /dev/net/tun:/dev/net/tun
restart: always
# Host names must be manually mapped here for bitmagnet to resolve them:
extra_hosts:
- "postgres:192.168.55.11"
networks:
bitmagnet:
ipv4_address: 192.168.55.10
postgres:
image: postgres:16-alpine
container_name: bitmagnet-postgres
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
bitmagnet:
ipv4_address: 192.168.55.11
ports:
- "5432:5432"
shm_size: 1g
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=bitmagnet
- PGUSER=postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
start_period: 20s
# Optional observability services:
# (ensure you have the config files in the `observability` directory in your project root)
# Visualization and dashboards:
grafana:
container_name: bitmagnet-grafana
image: grafana/grafana:latest
environment:
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
volumes:
- ./data/grafana:/var/lib/grafana
# Provisioned data sources and dashboards:
- ./observability/grafana.datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml
- ./observability/grafana.dashboards.yaml:/etc/grafana/provisioning/dashboards/dashboards.yaml
- ./observability/grafana-dashboards:/etc/dashboards
ports:
- "3000:3000"
networks:
- bitmagnet
# Metrics and logs scraping:
grafana-agent:
container_name: bitmagnet-grafana-agent
image: grafana/agent:latest
volumes:
- ./data/bitmagnet/logs:/var/log/bitmagnet
# Mount the logs and metrics scraping configurations:
- ./observability/grafana-agent.config.river:/etc/agent-config/config.river
command:
- run
- /etc/agent-config/config.river
- --server.http.listen-addr=0.0.0.0:12345
environment:
HOSTNAME: grafana-agent
AGENT_MODE: flow
LOKI_HOST: loki:3100
POSTGRES_HOST: postgres:5432
REDIS_HOST: redis:6379
# The bitmagnet host must be mapped to the gluetun container:
extra_hosts:
- "bitmagnet:192.168.55.10"
ports:
- "12345:12345"
depends_on:
- gluetun
- loki
networks:
- bitmagnet
# Metrics storage and aggregation:
prometheus:
image: prom/prometheus:latest
container_name: bitmagnet-prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
ports:
- 9090:9090
# The bitmagnet host must be mapped to the gluetun container:
extra_hosts:
- "bitmagnet:192.168.55.10"
restart: unless-stopped
volumes:
- ./data/prometheus:/prometheus
- ./observability/prometheus.config.yaml:/etc/prometheus/prometheus.yml
networks:
- bitmagnet
# Log storage and aggregation:
loki:
container_name: bitmagnet-loki
image: grafana/loki:latest
ports:
- "3100:3100"
volumes:
- ./data/loki:/loki
- ./observability/loki.config.yaml:/etc/loki/local-config.yaml
command: -config.file=/etc/loki/local-config.yaml
networks:
- bitmagnet
# Runtime profiling:
pyroscope:
container_name: bitmagnet-pyroscope
image: grafana/pyroscope:latest
deploy:
restart_policy:
condition: on-failure
ports:
- "4040:4040"
command:
- "server"
volumes:
- ./observability/pyroscope.config.yaml:/etc/pyroscope/server.yaml
- ./data/pyroscope:/var/lib/pyroscope
networks:
- bitmagnet
# Prometheus metrics for Postgres:
postgres-exporter:
image: prometheuscommunity/postgres-exporter:latest
container_name: bitmagnet-postgres-exporter
ports:
- 9187:9187
environment:
DATA_SOURCE_NAME: "postgresql://postgres:postgres@postgres:5432/bitmagnet?sslmode=disable"
links:
- postgres
- prometheus
networks:
- bitmagnet
networks:
bitmagnet:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.55.0/24
gateway: 192.168.55.1