# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
version: "3"
services:
  mysql:
    image: mysql:8
    volumes:
      - mysql-storage:/var/lib/mysql
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_DATABASE: lake
      MYSQL_USER: merico
      MYSQL_PASSWORD: merico
      TZ: UTC
    command: --character-set-server=utf8mb4
      --collation-server=utf8mb4_bin
      --skip-log-bin

  postgres:
    image: postgres:14.2
    volumes:
      - postgres-storage:/var/lib/postgresql
    restart: always
    ports:
      - 5432:5432
    environment:
      POSTGRES_DB: lake
      POSTGRES_USER: merico
      POSTGRES_PASSWORD: merico
      TZ: UTC

  grafana:
    image: devlake.docker.scarf.sh/apache/devlake-dashboard:latest
    build:
      context: grafana/
    ports:
      - 3002:3000
    volumes:
      - grafana-storage:/var/lib/grafana
    environment:
      GF_SERVER_ROOT_URL: "http://localhost:4000/grafana"
      GF_USERS_DEFAULT_THEME: "light"
      MYSQL_URL: mysql:3306
      MYSQL_DATABASE: lake
      MYSQL_USER: merico
      MYSQL_PASSWORD: merico
      TZ: UTC
    restart: always
    depends_on:
      - mysql

  devlake:
    image: devlake.docker.scarf.sh/apache/devlake:latest
    build:
      context: backend
      args:
        HTTPS_PROXY: "${HTTPS_PROXY}"
        GOPROXY: "${GOPROXY}"
    ports:
      - 8080:8080
    restart: always
    volumes:
      - devlake-log:/app/logs
    env_file:
      - ./.env
    environment:
      LOGGING_DIR: /app/logs
      TZ: UTC
      # LOGOUT_URI: https://xxx.amazoncognito.com/logout?client_id=yyy&logout_uri=http%3A%2F%2Flocalhost%3A4180%2Foauth2%2Fsign_out
    depends_on:
      - mysql

  config-ui:
    image: devlake.docker.scarf.sh/apache/devlake-config-ui:latest
    build:
      context: "config-ui"
    ports:
      - 4000:4000
    env_file:
      - ./.env
    environment:
      DEVLAKE_ENDPOINT: devlake:8080
      GRAFANA_ENDPOINT: grafana:3000
      TZ: UTC
      #ADMIN_USER: devlake
      #ADMIN_PASS: letsdivein
    depends_on:
      - devlake

  authproxy:
    image: quay.io/oauth2-proxy/oauth2-proxy:v7.4.0-amd64
    network_mode: "host"
    ports:
      - 4180:4180
    env_file:
      - ./.env
    # environment:
    #   OAUTH2_PROXY_PROVIDER: oidc
    #   OAUTH2_PROXY_PROVIDER_DISPLAY_NAME: my provider
    #   OAUTH2_PROXY_COOKIE_SECRET:
    #   OAUTH2_PROXY_COOKIE_DOMAINS: localhost:4180
    #   OAUTH2_PROXY_COOKIE_SECURE: 'false'
    #   OAUTH2_PROXY_EMAIL_DOMAINS: *
    #   OAUTH2_PROXY_OIDC_ISSUER_URL:
    #   OAUTH2_PROXY_OIDC_JWKS_URL:
    #   OAUTH2_PROXY_CLIENT_ID:
    #   OAUTH2_PROXY_CLIENT_SECRET:
    #   OAUTH2_PROXY_UPSTREAMS: http://localhost:4000
    #   OAUTH2_PROXY_HTTP_ADDRESS: http://0.0.0.0:4180
    #   OAUTH2_PROXY_REVERSE_PROXY: 'true'
    #   OAUTH2_PROXY_SKIP_AUTH_ROUTES: ^/grafana.*

volumes:
  mysql-storage:
  grafana-storage:
  postgres-storage:
  devlake-log: