version: '3'

services:
  base: &base
    build:
      context: .
      dockerfile: ./docker/Dockerfile
      args:
        BUNDLE_WITHOUT: ''
        EXECJS_RUNTIME: 'Node'
        RAILS_ENV: 'development'
        RAILS_SERVE_STATIC_FILES: 'false'
    tty: true
    stdin_open: true
    image: kb:development
    env_file: .docker.env

  rails:
    <<: *base
    build:
      context: .
      dockerfile: ./docker/dockerfiles/rails.Dockerfile
    image: kb-rails:development
    volumes:
      - ./:/app:delegated
      - node_modules:/app/node_modules
      - packs:/app/public/packs
      #- cache:/app/tmp/cache
      - bundle:/usr/local/bundle
    depends_on:
      - mysql
      - redis
      - elastic
      #- webpack
      #- sidekiq
    ports:
      - 3000:3000
    env_file: .docker.env
    environment:
      - WEBPACKER_DEV_SERVER_HOST=webpack
      - NODE_ENV=development
      - RAILS_ENV=development
    entrypoint: docker/entrypoints/rails.sh
    command: ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"]

  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=kb_dev
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password
    command:
      - "--character-set-server=utf8mb4"
      - "--collation-server=utf8mb4_unicode_ci"
    volumes:
      - mysql:/var/lib/mysql
      #- ./docker/initfile.sql:/docker-entrypoint-initdb.d/initfile.sql:ro
      - ./docker/mycustom.cnf:/etc/mysql/conf.d/custom.cnf
      #- ./docker/hello.sh:/docker-entrypoint-initdb.d/hello.sh
    ports:
      - "3306:3306"

  elastic:
    image: peterzhang/elasticsearch-analysis-ik
    restart: always
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - cluster.name=tommy-es
      - bootstrap.memory_lock=true
      - discovery.type=single-node
    volumes:
      - elastic:/usr/share/elasticsearch/data

  sidekiq:
    <<: *base
    image: kb-rails:development
    volumes:
      - ./:/app:delegated
      - node_modules:/app/node_modules
      - packs:/app/public/packs
      - cache:/app/tmp/cache
      - bundle:/usr/local/bundle
    depends_on:
      - mysql
      - redis
    environment:
      - NODE_ENV=development
      - RAILS_ENV=development
    command: ["bundle", "exec", "sidekiq", "-C", "config/sidekiq.yml"]

  webpack:
    <<: *base
    build:
      context: .
      dockerfile: ./docker/dockerfiles/webpack.Dockerfile
    image: kb-webpack:development
    volumes:
      - ./:/app:delegated
      - node_modules:/app/node_modules # Node modules shared across containers
      - packs:/app/public/packs
      - cache:/app/tmp/cache
      - bundle:/usr/local/bundle
    ports:
      - "3035" # Webpack dev server
    environment:
      - WEBPACKER_DEV_SERVER_HOST=0.0.0.0
      - NODE_ENV=development
      - RAILS_ENV=development
    entrypoint: docker/entrypoints/webpack.sh
    command: bin/webpack-dev-server

  redis:
    image: redis:alpine
    restart: always
    command: ["sh", "-c", "redis-server --requirepass \"$REDIS_PASSWORD\""]
    env_file: .docker.env
    volumes:
      - redis:/data/redis
    ports:
      - '6379:6379'
      
  openresty:
    tty: true
    restart: always
    stdin_open: true
    ports:
      - '8000:8000'
    image: hooopo/hypercable-openresty:latest
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
    depends_on:
      - redis

volumes:
  elastic:
  mysql:
  redis:
  packs:
  node_modules:
  cache:
  bundle:
