diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6e3299a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,106 @@ +version: "3.8" + +# Docker compose recipe for InvenTree +# - Runs PostgreSQL as the database backend +# - Runs Gunicorn as the InvenTree web server +# - Runs the InvenTree background worker process +# - Runs nginx as a reverse proxy + +# --------------------------------- +# IMPORTANT - READ BEFORE STARTING! +# --------------------------------- +# Before running, ensure that you change the "/path/to/data" directory, +# specified in the "volumes" section at the end of this file. +# This path determines where the InvenTree data will be stored! +# + +services: + # Database service + # Use PostgreSQL as the database backend + # Note: this can be changed to a different backend, + # just make sure that you change the INVENTREE_DB_xxx vars below + inventree-db: + container_name: inventree-db + image: postgres:13 + ports: + - 5432/tcp + environment: + - PGDATA=/var/lib/postgresql/data/pgdb + # The pguser and pgpassword values must be the same in the other containers + # Ensure that these are correctly configured in your prod-config.env file + - POSTGRES_USER=pguser + - POSTGRES_PASSWORD=pgpassword + volumes: + # Map 'data' volume such that postgres database is stored externally + - data:/var/lib/postgresql/data/ + restart: unless-stopped + + # InvenTree web server services + # Uses gunicorn as the web server + inventree-server: + container_name: inventree-server + # If you wish to specify a particular InvenTree version, do so here + # e.g. image: inventree/inventree:0.5.2 + image: inventree/inventree:latest + expose: + - 8000 + depends_on: + - inventree-db + volumes: + # Data volume must map to /home/inventree/data + - data:/home/inventree/data + env_file: + # Environment variables required for the production server are configured in prod-config.env + - prod-config.env + restart: unless-stopped + + # Background worker process handles long-running or periodic tasks + inventree-worker: + container_name: inventree-worker + # If you wish to specify a particular InvenTree version, do so here + # e.g. image: inventree/inventree:0.5.2 + image: inventree/inventree:latest + command: invoke worker + depends_on: + - inventree-db + - inventree-server + volumes: + # Data volume must map to /home/inventree/data + - data:/home/inventree/data + env_file: + # Environment variables required for the production server are configured in prod-config.env + - prod-config.env + restart: unless-stopped + + # nginx acts as a reverse proxy + # static files are served directly by nginx + # media files are served by nginx, although authentication is redirected to inventree-server + # web requests are redirected to gunicorn + # NOTE: You will need to provide a working nginx.conf file! + inventree-proxy: + container_name: inventree-proxy + image: nginx:stable + depends_on: + - inventree-server + ports: + # Change "1337" to the port that you want InvenTree web server to be available on + - 1337:80 + volumes: + # Provide ./nginx.conf file to the container + # Refer to the provided example file as a starting point + - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro + # nginx proxy needs access to static and media files + - data:/var/www + restart: unless-stopped + +volumes: + # NOTE: Change /path/to/data to a directory on your local machine + # Persistent data, stored external to the container(s) + data: + driver: local + driver_opts: + type: none + o: bind + # This directory specified where InvenTree data are stored "outside" the docker containers + # Change this path to a local system path where you want InvenTree data stored + device: /path/to/data