services:
  # Start a local FTP server to demonstrate video upload with RCLONE (https://github.com/delfer/docker-alpine-ftp-server)
  ftp_server:
    image: delfer/alpine-ftp-server:latest
    container_name: ftp_server
    environment:
      - USERS=seluser|selenium.dev
    volumes:
      # Mount the local directory `/home/${USER}/Videos/upload` to the FTP server's `/ftp/seluser` directory to check out the uploaded videos
      - /tmp/upload:/ftp/seluser
    command: ["/bin/sh", "-c", "/sbin/tini -- /bin/start_vsftpd.sh && tail -f /dev/null"]
    stop_grace_period: 30s

  # File browser to manage the uploaded videos from the FTP server
  file_browser:
    image: filebrowser/filebrowser:latest
    container_name: file_browser
    restart: always
    ports:
      - "8081:80"
    volumes:
      # Mount the local directory `/tmp/upload` to file browser's `/srv` directory to check out the uploaded videos
      - /tmp/upload:/srv
    environment:
      - FB_NOAUTH=true

  chrome:
    deploy:
      mode: replicated
      replicas: 3
    image: selenium/node-chromium:4.47.0-20260808
    shm_size: 2gb
    depends_on:
      - selenium-hub
    volumes:
      - /tmp/videos:/videos
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_RETAIN_ON_FAILURE=true
      # Remote name and destination path to upload
      - SE_UPLOAD_DESTINATION_PREFIX=myftp://ftp/seluser
      # All configs required for RCLONE to upload to remote name myftp
      - RCLONE_CONFIG_MYFTP_TYPE=ftp
      - RCLONE_CONFIG_MYFTP_HOST=ftp_server
      - RCLONE_CONFIG_MYFTP_PORT=21
      - RCLONE_CONFIG_MYFTP_USER=seluser
      # Password encrypted using command: rclone obscure <your_password>
      - RCLONE_CONFIG_MYFTP_PASS=KkK8RsUIba-MMTBUSnuYIdAKvcnFyLl2pdhQig
      - RCLONE_CONFIG_MYFTP_FTP_CONCURRENCY=10
    stop_grace_period: 30s

  firefox:
    deploy:
      mode: replicated
      replicas: 3
    image: selenium/node-firefox:4.47.0-20260808
    shm_size: 2gb
    depends_on:
      - selenium-hub
    volumes:
      - /tmp/videos:/videos
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_RETAIN_ON_FAILURE=true
      # Remote name and destination path to upload
      - SE_UPLOAD_DESTINATION_PREFIX=myftp://ftp/seluser
      # All configs required for RCLONE to upload to remote name myftp
      - RCLONE_CONFIG_MYFTP_TYPE=ftp
      - RCLONE_CONFIG_MYFTP_HOST=ftp_server
      - RCLONE_CONFIG_MYFTP_PORT=21
      - RCLONE_CONFIG_MYFTP_USER=seluser
      # Password encrypted using command: rclone obscure <your_password>
      - RCLONE_CONFIG_MYFTP_PASS=KkK8RsUIba-MMTBUSnuYIdAKvcnFyLl2pdhQig
      - RCLONE_CONFIG_MYFTP_FTP_CONCURRENCY=10
    stop_grace_period: 30s

  selenium-hub:
    image: selenium/hub:4.47.0-20260808
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"