OTOBO

Flexible web-based ticketing system used for Customer Service, Help Desk, IT Service Management.

Directory Structure

    • .env
    • docker-compose.yml

docker-compose.yml

# Docker compose file for the OTOBO webapp.
# Note that no port is exposed as both HTTP and HTTPS are supported.
# For HTTP see the extension file docker-compose/otobo-override-http.yml.
# For HTTPS see the extension file docker-compose/otobo-override-https.yml.
 
# See also README.md.
 
# most current docker-compose file version, as of 2020-05-21
version: '3.3'
 
services:
 
  # the database
  db:
    image: ${OTOBO_IMAGE_DB:-mariadb:10.5}
    user: mysql:mysql
    cap_drop:
        - ALL
    cap_add:
        - CAP_SYS_CHROOT
    restart: always
    logging:
        driver: "local"
        options:
            max-file: "5"
            max-size: "10m"
    volumes:
      - mariadb_data:/var/lib/mysql
 
    # Within the container network the MariaDB server listens to its default port 3306.
    # Per default this port is not exposed to the outside world.
    # One can use 'docker-compose exec -it db mysql ...' when access to the database is needed.
    # But for development it can be useful to expose the port 3306. E.g. when a graphical client
    # like MySQL Workbench or DBeaver is used. Uncomment the following lines for making MariaDB available
    # on port 3307 on the Docker host. A non-standard port is chosen here, because 3306 is
    # often already used on the Docker host.
    # ports:
    #   - "3307:3306"
 
    # Set the db root password which has to be entered when running otobo/installer.pl.
    # The passwort is secret and can be stored in the file .env.
    # The content of the .env file is something like:
    # OTOBO_DB_ROOT_PASSWORD=otobo_root
    environment:
      MYSQL_ROOT_PASSWORD: ${OTOBO_DB_ROOT_PASSWORD:?err}
    command: --max-allowed-packet=136314880 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --innodb-log-file-size=268435456 --query-cache-size=${OTOBO_DB_QUERY_CACHE_SIZE:-33554432}
 
    # "mysqladmin ping" sets the exit code $?. The exit code will be 0 (success) when the server can be reached,
    # not 0 (failure) otherwise.
    # The host is given as db, because localhost might not be resolved on some systems.
    # The credentials are not really needed for pinging, but without them we would get "Access denied" log messages
    # every time the health check is executed.
    # Note: alternatively /usr/local/bin/healthcheck.sh could be used.
    healthcheck:
      test: mysqladmin -h db --user=root --password='${OTOBO_DB_ROOT_PASSWORD}' ping
 
  # a container running a webserver
  web:
    # The services 'web' and 'daemon' use the same image.
    image: ${OTOBO_IMAGE_OTOBO:-rotheross/otobo:latest-10_1}
    cap_drop:
        - ALL
    #cap_add:
    depends_on:
      - db
      - elastic
      - redis
    restart: always
    logging:
        driver: "local"
        options:
            max-file: "5"
            max-size: "10m"
    # The HTTP port might be specified in a docker-compose extension file, e.g. docker-compose/otobo-override-http.yml.
    # For HTTPS no HTTP port is exposed.
    #ports:
    #    - "80:5000"
    volumes:
      - opt_otobo:/opt/otobo
    command: web
    healthcheck:
      test: curl -s -f http://localhost:5000/robots.txt
 
  # a container running the OTOBO daemon
  daemon:
    # The services 'web' and 'daemon' use the same image.
    image: ${OTOBO_IMAGE_OTOBO:-rotheross/otobo:latest-10_1}
    cap_drop:
        - ALL
    #cap_add:
    depends_on:
      - web
    restart: always
    logging:
        driver: "local"
        options:
            max-file: "5"
            max-size: "10m"
    volumes:
      - opt_otobo:/opt/otobo
    command: daemon
    healthcheck:
      test: ./bin/otobo.Daemon.pl status | grep 'Daemon running'
 
  # a container running Elasticsearch
  elastic:
    image: ${OTOBO_IMAGE_OTOBO_ELASTICSEARCH:-rotheross/otobo-elasticsearch:latest-10_1}
    cap_drop:
        - ALL
    cap_add:
        - CAP_SYS_CHROOT
        - CAP_SETUID
        - CAP_SETGID
    restart: always
    logging:
        driver: "local"
        options:
            max-file: "5"
            max-size: "10m"
    environment:
      discovery.type: single-node
      ES_JAVA_OPTS: ${OTOBO_ELASTICSEARCH_ES_JAVA_OPTS:?err}
    volumes:
      - elasticsearch_data:/usr/share/elasticsearch/data
    healthcheck:
      test: curl -s -f http://localhost:9200/_cat/health
 
  # a container running Redis
  redis:
    image: ${OTOBO_IMAGE_REDIS:-redis:6.0-alpine}
    user: redis:redis
    cap_drop:
        - ALL
    #cap_add:
    restart: always
    logging:
        driver: "local"
        options:
            max-file: "5"
            max-size: "10m"
    volumes:
      - redis_data:/data
    healthcheck:
      test: redis-cli ping
 
 
# no volumes need to be exposed across services
volumes:
  mariadb_data: {}
  opt_otobo: {}
  elasticsearch_data: {}
  redis_data: {}

Resources

Website: https://otobo.io/

Docs: https://doc.otobo.org/

GitHub: https://github.com/RotherOSS/otobo

Docker Hub: https://hub.docker.com/r/rotheross/otobo

Configuration: https://github.com/RotherOSS/otobo-docker