version: '2.2'

services:
  web:
    image: azuracast/azuracast_web:latest
    depends_on:
      - mariadb
      - influxdb
      - stations
      - redis
    environment: &default-environment
      APPLICATION_ENV: "production" # "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:
      - www_data:/var/azuracast/www
      - tmp_data:/var/azuracast/www_tmp
      - station_data:/var/azuracast/stations
    init: true
    restart: always

  nginx:
    image: azuracast/azuracast_nginx:latest
    ports:
      - '80:80'
      - '443:443'
    depends_on:
      - web
      - stations
    volumes:
      - www_data:/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
    volumes:
      - db_data:/var/lib/mysql
    environment:
      << : *default-environment
    restart: always

  influxdb:
    image: azuracast/azuracast_influxdb:latest
    volumes:
      - influx_data:/var/lib/influxdb
    restart: always

  redis:
    image: azuracast/azuracast_redis:latest
    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:
    image: azuracast/azuracast_web:latest
    volumes_from:
      - web
    depends_on:
      - mariadb
      - influxdb
      - stations
      - redis
    environment:
      << : *default-environment
    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
    ports:
    # Uncomment the line below to expose the full range of available station ports.
    # Note: This is not recommended currently due to performance and memory usage problems with Docker.
    # - '8000-8500:8000-8500'
     - '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'
     - '8050:8050'
     - '8055:8055'
     - '8056:8056'
     - '8060:8060'
     - '8065:8065'
     - '8066:8066'
     - '8070:8070'
     - '8075:8075'
     - '8076:8076'
     - '8090:8090'
     - '8095:8095'
     - '8096:8096'
    volumes:
     - station_data:/var/azuracast/stations
     - nginx_letsencrypt_certs:/etc/nginx/ssl:ro
    init: true
    restart: always

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