version: "3.8"

# Docker compose recipe for InvenTree development server
# - Runs sqlite database
# - Uses built-in django webserver
# - Runs the InvenTree background worker process
# - Serves media and static content directly from Django webserver

# IMPORANT NOTE:
# The InvenTree docker image does not clone source code from git.
# Instead, you must specify *where* the source code is located,
# (on your local machine).
# The django server will auto-detect any code changes and reload the server.

services:

    # InvenTree web server services
    # Uses gunicorn as the web server
    inventree-dev-server:
        container_name: inventree-dev-server
        build:
            context: .
            target: dev
        # Cache the built image to be used by the inventree-dev-worker process
        image: inventree-dev-image
        ports:
            # Expose web server on port 8000
            - 8000:8000
        volumes:
            # Ensure you specify the location of the 'src' directory at the end of this file
            - src:/home/inventree
        environment:
            - INVENTREE_DEBUG=True
            - INVENTREE_DB_ENGINE=sqlite
            - INVENTREE_DB_NAME=/home/inventree/db.sqlite3
        restart: unless-stopped

    # Background worker process handles long-running or periodic tasks
    inventree-dev-worker:
        container_name: inventree-dev-worker
        image: inventree-dev-image
        command: invoke worker
        depends_on:
            - inventree-dev-server
        volumes:
            # Ensure you specify the location of the 'src' directory at the end of this file
            - src:/home/inventree
        environment:
            - INVENTREE_DEBUG=True
            - INVENTREE_DB_ENGINE=sqlite
            - INVENTREE_DB_NAME=/home/inventree/db.sqlite3
        restart: unless-stopped

volumes:
    # NOTE: Change "../" to a directory on your local machine, where the InvenTree source code is located
    # Persistent data, stored external to the container(s)
    src:
        driver: local
        driver_opts:
            type: none
            o: bind
            # This directory specified where InvenTree source code is stored "outside" the docker containers
            # By default, this directory is one level above the "docker" directory
            device: ${INVENTREE_EXT_VOLUME:-../}
