Docker Stack For InvenTree
Use Docker Compose or Docker Swarm to deploy for either development or production. Templates included for using NGINX or Traefik for SSL termination.
Tags follow this naming scheme:
- *.*.* - InvenTree Release Tag
- InvenTree Tag-Commit Stub (A commit on master newer than the InvenTree Release Tag)
- latest (this will be the same as the newest InvenTree Tag-Commit Stub)
Using one of the Release Tags is recommended as the other tags are untested and may not work properly.
- 0.2.2
- 0.2.1
- 0.1.7
- v0.1.3
- 0.1.1
- 0.1.0
- 0.0.10
- 0.0.8
- Python:Alpine for InvenTree
- NGINX:Alpine
- MariaDB:10
Configuration consists of environment variables in the .yml
and .conf
files.
- inventree_nginx.conf = NGINX config file (only needs to be modified if you're using NGINX for SSL termination)
- Make whatever changes you need to the appropriate
.yml
. All environment variables for InvenTree can be found indocker-entrypoint.sh
- yourdomain.test.crt = The SSL certificate for your domain (you'll need to create/copy this)
- yourdomain.test.key = The SSL key for your domain (you'll need to create/copy this)
Using multiple Docker Compose files makes it easier to differentiate between use cases. docker-compose.yml
is the base configuration file and production.yml
or development.yml
are used to either add to or override the base configuration.
Clone the repository, create a config
folder inside the inventree-docker
directory, and put the relevant configuration files you created/modified into it.
Run with docker-compose -f docker-compose.yml -f production.yml up -d
. View using 127.0.0.1:9080
.
I personally use this with Traefik as a reverse proxy, I've included an example traefik.yml
but it's not necessary.
You'll need to create the appropriate Docker Secrets and Docker Configs.
Run with docker stack deploy --compose-file docker-swarm.yml inventree
On first run you'll need to create a superuser using the variables in the .yml
file.
The Dockerfile uses multi-stage builds, build hooks, and labels for automated builds on Docker Hub.
The multi-stage build creates a container that can be used for development and another for production. The development container has all the build dependencies for the python packages which are installed into a python virtual environment. The production container copies the python virtual environment from the development container and runs InvenTree from there, this allows it to be much more lightweight.
On startup, the container first runs the docker-entrypoint.sh
script before running the gunicorn -c gunicorn.conf.py InvenTree.wsgi
command.
docker-entrypoint.sh
creates configuration files and runs commands based on environment variables that are declared in the various .yml
files.
env_secrets_expand.sh
handles using Docker Secrets.
Used as a web server. It serves up the static files and passes everything else off to gunicorn/InvenTree.
SQL database.
Clone the InvenTree repository into a folder called InvenTree
and build the development Docker image by running docker build . --target development -t inventree:development
. Then use docker-compose -f docker-compose.yml -f development.yml up -d
to grab all the other Docker images and run InvenTree.
The clone you made of InvenTree replaces the one in the Docker container when the container is started (as seen in development.yml
). So any changes you make are reflected in the Docker container (you may need to restart the container for those changes to take effect).
If you want to develop/test using the production container you can build it using docker build . --target production -t inventree:production
, then change the image tag in development.yml
.
If you need to change which python packages are installed you can create/alter the dev_requirements.txt
file and uncomment the line in the Dockerfile
. Then run docker build . --target development -t inventree:development
to rebuild the container, this will install dev_requirements.txt
instead of the default InvenTree requirements.txt
.
If you installed the required packages using dev_requirements.txt
you can make the docs by running docker exec -it inventree -w /usr/src/app make docs
.
Useful for database administration, you can connect to phpMyAdmin at 127.0.0.1:6060
.
You can use VSCode to work in the container directly on either your computer or a remote one. I've included a sample devcontainer.json
for that purpose. You'll need to check the official documentation to set that up.