services:
  postgres:
    restart: unless-stopped
    env_file: .env
    environment:
      - "POSTGRES_HOST_AUTH_METHOD=trust"
    image: postgres:15-alpine
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    networks:
      # - default
      - traefik-public

  redis:
    restart: unless-stopped
    env_file: .env
    image: redis:7-alpine
    volumes:
      - ./data/redis:/data
    networks:
      # - default
      - traefik-public

  celeryworker:
    restart: unless-stopped
    image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
    depends_on:
      - postgres
      - redis
    env_file: .env
    # Celery workers handle background tasks (such file imports or federation
    # messaging). The more processes a worker gets, the more tasks
    # can be processed in parallel. However, more processes also means
    # a bigger memory footprint.
    # By default, a worker will span a number of process equal to your number
    # of CPUs. You can adjust this, by explicitly setting the --concurrency
    # flag:
    #   celery -A funkwhale_api.taskapp worker -l INFO --concurrency=4
    networks:
      # - default
      - traefik-public
    command:
      - celery
      - --app=funkwhale_api.taskapp
      - worker
      - --loglevel=INFO
      - --concurrency=${CELERYD_CONCURRENCY-0}
    environment:
      - C_FORCE_ROOT=true
    volumes:
      - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro"
      - "${MEDIA_ROOT}:${MEDIA_ROOT}"

  celerybeat:
    restart: unless-stopped
    image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
    networks:
      # - default
      - traefik-public
    command:
      - celery
      - --app=funkwhale_api.taskapp
      - beat
      - --loglevel=INFO
    depends_on:
      - postgres
      - redis
    env_file: .env

  api:
    restart: unless-stopped
    image: funkwhale/api:${FUNKWHALE_VERSION:-latest}
    depends_on:
      - postgres
      - redis
    env_file: .env
    networks:
      # - default
      - traefik-public
    volumes:
      - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro"
      - "${MEDIA_ROOT}:${MEDIA_ROOT}"
      - "${STATIC_ROOT}:${STATIC_ROOT}"

  front:
    restart: unless-stopped
    image: funkwhale/front:${FUNKWHALE_VERSION:-latest}
    depends_on:
      - api
    env_file:
      - .env
    environment:
      # Override those variables in your .env file if needed
      - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}"
    volumes:
      # Uncomment if you want to use your previous nginx config, please let us
      # know what special configuration you need, so we can support it with out
      # upstream nginx configuration!
      # - "./nginx/funkwhale.template:/etc/nginx/nginx.conf:ro"
      # - "./nginx/funkwhale.template:/etc/nginx/templates/default.conf.template:ro"
      # - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro"

      - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_PATH-/music}:ro"
      - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro"
      - "${STATIC_ROOT}:/usr/share/nginx/html/staticfiles:ro"
    # ports:
    #   # override those variables in your .env file if needed
    #   - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80"

    labels:
      traefik.enable: true
      traefik.http.services.funkwhale.loadbalancer.server.port: 80
      traefik.http.routers.funkwhale.entrypoints: websecure
      traefik.http.routers.funkwhale.rule: Host(`audio.alice.ufsj.edu.br`)
      # traefik.http.routers.funkwhale.middlewares: "funkwhale"
      traefik.http.middlewares.funkwhale.headers.stsSeconds: '15552000'
      traefik.http.middlewares.funkwhale.headers.framedeny: true
      traefik.http.middlewares.funkwhale.headers.stsIncludeSubdomains: true
      traefik.http.middlewares.funkwhale.headers.customFrameOptionsValue: SAMEORIGIN
      traefik.http.middlewares.funkwhale.headers.stsPreload: true
      traefik.http.middlewares.funkwhale.headers.sslredirect: true
      traefik.http.middlewares.funkwhale.headers.customrequestheaders.X-Forwarded-Proto: https
      # traefik.http.middlewares.funkwhale.headers.forwardedHeaders: true
      # traefik.http.middlewares.funkwhale.headers.customrequestheaders.X-Forwarded-User: https
      # traefik.http.middlewares.funkwhale.forwardauth.trustforwardheader: true
      # traefik.http.middlewares.funkwhale.forwardauth.authresponseheaders: "X-Forwarded-User"

        

    networks:
      # - default
      - traefik-public

  typesense:
    restart: unless-stopped
    env_file:
      - .env
    image: typesense/typesense:0.24.0
    volumes:
      - ./typesense/data:/data
    command: --data-dir /data --enable-cors
    profiles:
      - typesense
    networks:
      # - default
      - traefik-public

networks:
  # default:
  traefik-public:
    external: true