# FARMBOT SERVICE LAYOUT # # ========================================== # # +--+ +-----+ +------+ +----+ # |DB| |REDIS| |PARCEL| |MQTT| # +--+ +-----+ +------+ +----+ # ^ ^ ^ ^ # | | | | # +----------------------------+ # | WEB | # +----------------------------+ # ^ ^ ^ # | | | # +-----------+ +-----------+ +-----------+ # |DELAYED_JOB| |LOG_DIGESTS| |RABBIT_JOBS| # +-----------+ +-----------+ +-----------+ # # ========================================== version: '3.4' x-rails: &rails_service env_file: .env image: farmbot_web volumes: [".:/farmbot", "./docker_volumes/bundle_cache:/bundle"] services: db: env_file: .env image: postgres volumes: ["./docker_volumes/db:/var/lib/postgresql/data"] redis: env_file: .env expose: ["6379"] image: redis volumes: - ./docker_volumes/redis/data:/data - ./docker_volumes/redis/conf:/usr/local/etc/redis parcel: <<: *rails_service command: bundle exec rake api:serve_assets ports: ["3808"] # Parcel HMR Server mqtt: build: context: ./docker_configs dockerfile: rabbitmq.Dockerfile env_file: .env environment: ["RABBITMQ_CONFIG_FILE=/farmbot/farmbot_rmq_config"] expose: ["15672"] # Management API (optional) ports: ["3002:15675", "5672", "1883", "8883"] volumes: ["./docker_volumes/rabbit:/farmbot"] web: <<: *rails_service depends_on: ["db", "redis", "mqtt"] stdin_open: true # Needed for binding.pry tty: true # Needed for binding.pry build: context: . dockerfile: docker_configs/api.Dockerfile command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -e development -p 3000 -b 0.0.0.0" ports: ["3000:3000"] # Web / API delayed_job: <<: *rails_service depends_on: ["web"] command: bundle exec rake jobs:work log_digests: <<: *rails_service depends_on: ["web"] command: bundle exec rake api:log_digest rabbit_jobs: <<: *rails_service depends_on: ["web"] command: bundle exec rails r lib/rabbit_workers.rb typescript: <<: *rails_service depends_on: ["web"] command: node_modules/typescript/bin/tsc -w --noEmit