version: '2.2'

services:
  web:
    image: azuracast/azuracast_web:latest
    build:
      context: ../docker-azuracast-web
    depends_on:
      - mariadb
      - influxdb
      - stations
      - redis
    environment: &default-environment
      APPLICATION_ENV: "development" # "production" or "development"
      MYSQL_HOST: "mariadb"         # You can change this if you plan to connect to an external DB host.
      MYSQL_PORT: 3306              # ^
      MYSQL_USER: "azuracast"       # Once the database has been installed, don't change this.
      MYSQL_PASSWORD: "azur4c457"   # ^
      MYSQL_DATABASE: "azuracast"   # ^
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      AZURACAST_DC_REVISION: 2      # Only modified when this Docker Compose file has changed.
    volumes:
      - .:/var/azuracast/www
      - tmp_data:/var/azuracast/www_tmp
      - station_data:/var/azuracast/stations
    init: true
    restart: always

  nginx:
    image: azuracast/azuracast_nginx:latest
    build:
      context: ../docker-azuracast-nginx
    ports:
      - '80:80'
      - '443:443'
    depends_on:
      - web
      - stations
    volumes:
      - .:/var/azuracast/www
      - nginx_letsencrypt_certs:/etc/nginx/ssl
      - nginx_letsencrypt_www:/var/www/letsencrypt
    restart: always

  # To use the LetsEncrypt support:
  # docker-compose run --rm letsencrypt certonly --webroot -w /var/www/letsencrypt
  letsencrypt:
    image: certbot/certbot
    command: /bin/true
    volumes:
      - nginx_letsencrypt_certs:/etc/letsencrypt
      - nginx_letsencrypt_www:/var/www/letsencrypt

  mariadb:
    image: azuracast/azuracast_db:latest
    build:
      context: ../docker-azuracast-db
    ports:
     - "127.0.0.1:3306:3306"
    volumes:
      - db_data:/var/lib/mysql
    environment:
      << : *default-environment
    restart: always

  influxdb:
    image: azuracast/azuracast_influxdb:latest
    build:
      context: ../docker-azuracast-influxdb
    volumes:
      - influx_data:/var/lib/influxdb
    restart: always

  redis:
    image: azuracast/azuracast_redis:latest
    build:
      context: ../docker-azuracast-redis
    ports:
     - "127.0.0.1:6379:6379"
    restart: always

  cron:
    container_name: azuracast_cron
    image: azuracast/azuracast_web:latest
    volumes_from:
      - web
    depends_on:
      - mariadb
      - influxdb
      - stations
      - redis
    environment:
      << : *default-environment
    command: 'cron'
    init: true
    restart: always

  cli:
    build:
      context: ./util/docker/testing
    volumes_from:
      - web
    depends_on:
      - mariadb
      - influxdb
      - stations
      - redis
    environment:
      << : *default-environment
      INIT_BASE_URL: "docker.local"
      INIT_GMAPS_API_KEY: "" # Populate this!
      INIT_INSTANCE_NAME: "local development"
      INIT_ADMIN_USERNAME: "" # Populate this!
      INIT_ADMIN_PASSWORD: "" # Populate this!
      INIT_MUSIC_PATH: "/var/azuracast/www/util/fixtures/init_music"
    user: 'azuracast'
    working_dir: '/var/azuracast/www'
    command: 'bash'
    tty: true # Pretty colors
    init: true

  stations:
    container_name: azuracast_stations
    image: azuracast/azuracast_stations:latest
    build:
      context: ../docker-azuracast-stations
    ports:
     - '8000:8000'
     - '8005:8005'
     - '8006:8006'
     - '8010:8010'
     - '8015:8015'
     - '8016:8016'
     - '8020:8020'
     - '8025:8025'
     - '8026:8026'
     - '8030:8030'
     - '8035:8035'
     - '8036:8036'
     - '8040:8040'
     - '8045:8045'
     - '8046:8046'
    volumes:
     - station_data:/var/azuracast/stations
     - nginx_letsencrypt_certs:/etc/nginx/ssl:ro
    init: true
    restart: always

  # Developer Mode services
  static:
    build:
      context: ./util/docker/static
    volumes:
      - ./web/static:/data

  chronograf:
    image: chronograf:alpine
    ports:
     - "8888:8888"
    command: "chronograf --influxdb-url=http://influxdb:8086"

  redis-commander:
    image: rediscommander/redis-commander:latest
    depends_on:
    - redis
    environment:
      REDIS_HOSTS: "local-app:redis:6379:0,local-sessions:redis:6379:1,local-doctrine:redis:6379:2"
    ports:
    - "127.0.0.1:8081:8081"

volumes:
  nginx_letsencrypt_certs: {}
  nginx_letsencrypt_www: {}
  db_data: {}
  influx_data: {}
  station_data: {}
  tmp_data: {}
