mirror of
				https://github.com/inventree/inventree-docs.git
				synced 2025-10-31 12:55:37 +00:00 
			
		
		
		
	Updated docs for production setup
This commit is contained in:
		| @@ -1,115 +0,0 @@ | ||||
| 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 | ||||
|         ports: | ||||
|             - 5432/tcp | ||||
|         environment: | ||||
|             - PGDATA=/var/lib/postgresql/data/pgdb | ||||
|             # The pguser and pgpassword values must be the same in the other containers | ||||
|             - 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 | ||||
|         image: inventree/inventree:latest | ||||
|         expose: | ||||
|             - 8000 | ||||
|         depends_on: | ||||
|             - inventree-db | ||||
|         volumes: | ||||
|             # Data volume must map to /home/inventree/data | ||||
|             - data:/home/inventree/data | ||||
|         environment: | ||||
|             # Default environment variables are configured to match the 'db' container | ||||
|             # Note: If you change the database image, these will need to be adjusted | ||||
|             # Note: INVENTREE_DB_HOST should match the container name of the database | ||||
|             - INVENTREE_DB_USER=pguser | ||||
|             - INVENTREE_DB_PASSWORD=pgpassword | ||||
|             - INVENTREE_DB_ENGINE=postgresql | ||||
|             - INVENTREE_DB_NAME=inventree | ||||
|             - INVENTREE_DB_HOST=inventree-db | ||||
|             - INVENTREE_DB_PORT=5432 | ||||
|         restart: unless-stopped | ||||
|  | ||||
|     # Background worker process handles long-running or periodic tasks | ||||
|     inventree-worker: | ||||
|         container_name: inventree-worker | ||||
|         image: inventree/inventree:latest | ||||
|         entrypoint: ./start_prod_worker.sh | ||||
|         depends_on: | ||||
|             - inventree-db | ||||
|             - inventree-server | ||||
|         volumes: | ||||
|             # Data volume must map to /home/inventree/data | ||||
|             - data:/home/inventree/data | ||||
|         environment: | ||||
|             # Default environment variables are configured to match the 'db' container | ||||
|             # Note: If you change the database image, these will need to be adjusted | ||||
|             # Note: INVENTREE_DB_HOST should match the container name of the database | ||||
|             - INVENTREE_DB_USER=pguser | ||||
|             - INVENTREE_DB_PASSWORD=pgpassword | ||||
|             - INVENTREE_DB_ENGINE=postgresql | ||||
|             - INVENTREE_DB_NAME=inventree | ||||
|             - INVENTREE_DB_HOST=inventree-db | ||||
|             - INVENTREE_DB_PORT=5432 | ||||
|         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 | ||||
|         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 | ||||
| @@ -1,57 +0,0 @@ | ||||
|  | ||||
| server { | ||||
|  | ||||
|     # Listen for connection on (internal) port 80 | ||||
|     listen 80; | ||||
|  | ||||
|     location / { | ||||
|         # Change 'inventree-server' to the name of the inventree server container, | ||||
|         # and '8000' to the INVENTREE_WEB_PORT (if not default) | ||||
|         proxy_pass http://inventree-server:8000; | ||||
|  | ||||
|         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|         proxy_set_header Host $host; | ||||
|  | ||||
|         proxy_redirect off; | ||||
|  | ||||
|         client_max_body_size 100M; | ||||
|  | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-Proto $scheme; | ||||
|  | ||||
|         proxy_buffering off; | ||||
|         proxy_request_buffering off; | ||||
|  | ||||
|     } | ||||
|  | ||||
|     # Redirect any requests for static files | ||||
|     location /static/ { | ||||
|         alias /var/www/static/; | ||||
|         autoindex on; | ||||
|  | ||||
|         # Caching settings | ||||
|         expires 30d; | ||||
|         add_header Pragma public; | ||||
|         add_header Cache-Control "public"; | ||||
|     } | ||||
|  | ||||
|     # Redirect any requests for media files | ||||
|     location /media/ { | ||||
|         alias /var/www/media/; | ||||
|  | ||||
|         # Media files require user authentication | ||||
|         auth_request /auth; | ||||
|     } | ||||
|  | ||||
|     # Use the 'user' API endpoint for auth | ||||
|     location /auth { | ||||
|         internal; | ||||
|  | ||||
|         proxy_pass http://inventree-server:8000/auth/; | ||||
|  | ||||
|         proxy_pass_request_body off; | ||||
|         proxy_set_header Content-Length ""; | ||||
|         proxy_set_header X-Original-URI $request_uri; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -13,17 +13,11 @@ Using the [InvenTree docker image](./docker.md) streamlines the setup process fo | ||||
|  | ||||
| It is strongly recommended that you use a [docker-compose](https://docs.docker.com/compose/) script to manage your InvenTree docker image. | ||||
|  | ||||
| An example docker compose script is provided below, which provides a robust "out of the box" setup for running InvenTree. | ||||
|  | ||||
| Firstly, here is the complete `docker-compose.yml` file which can be used "as is" or as a starting point for a custom setup: | ||||
|  | ||||
| ``` yaml | ||||
| {% include 'docker-compose.yml' %} | ||||
| ``` | ||||
| An example docker compose file can be [found here](https://github.com/inventree/InvenTree/blob/master/docker/docker-compose.yml) - the documentation below will be using this docker compose file. | ||||
|  | ||||
| ### Containers | ||||
|  | ||||
| The following containers are created: | ||||
| The example docker-compose file launches the following containers: | ||||
|  | ||||
| | Container | Description | | ||||
| | --- | --- | | ||||
| @@ -52,11 +46,7 @@ Nginx working as a reverse proxy, separating requests for static and media files | ||||
|  | ||||
| This container uses the official [nginx image](https://hub.docker.com/_/nginx). | ||||
|  | ||||
| An nginx configuration file must be provided to the image. Use the example configuration below as a starting point: | ||||
|  | ||||
| ``` | ||||
| {% include 'nginx.conf' %} | ||||
| ``` | ||||
| An nginx configuration file must be provided to the image. Use the [example configuration file](https://github.com/inventree/InvenTree/blob/master/docker/nginx.conf) as a starting point. | ||||
|  | ||||
| *__Note__: You must save this conf file in the same directory as your docker-compose.yml file* | ||||
|  | ||||
| @@ -87,21 +77,27 @@ With the docker-compose recipe above, follow the instructions below to initializ | ||||
|  | ||||
| The following files are required on your local machine (use the examples above, or edit as required): | ||||
|  | ||||
| - [docker-compose.yml](https://github.com/inventree/InvenTree/blob/master/docker/docker-compose.yml) | ||||
| - [nginx.conf](https://github.com/inventree/InvenTree/blob/master/docker/nginx.conf) | ||||
| | File | Description | | ||||
| | --- | --- | | ||||
| | [docker-compose.yml](https://github.com/inventree/InvenTree/blob/master/docker/docker-compose.yml) | docker-compose script | | ||||
| | [nginx.conf](https://github.com/inventree/InvenTree/blob/master/docker/nginx.conf) | nginx proxy server configuration file | | ||||
| | [prod-config.env](https://github.com/inventree/InvenTree/blob/master/docker/prod-config.env) | Docker container environment variables | | ||||
|  | ||||
| !!! info "Command Directory" | ||||
|     It is assumed that all commands will be run from the directory where `docker-compose.yml` is located.  | ||||
|     It is assumed that all following commands will be run from the directory where `docker-compose.yml` is located.  | ||||
|  | ||||
| ### Configure Compose File | ||||
| #### Edit Configuration Files | ||||
|  | ||||
| Save and edit the `docker-compose.yml` file as required. | ||||
| Edit the `docker-compose.yml` file as required. | ||||
|  | ||||
| !!! warning "Change Data Directory" | ||||
|     The only **required** change is to ensure that the `/path/to/data` entry (at the end of the file) points to the correct directory on your local file system, where you want InvenTree data to be stored. | ||||
|  | ||||
| !!! info "Database Credentials" | ||||
|     You may also wish to change the default postgresql username and password! | ||||
|  | ||||
| You may also edit the `nginx.conf` and `prod-config.env` files if necessary. | ||||
|  | ||||
| ### Launch Database Container | ||||
|  | ||||
| Before we can create the database, we need to launch the database server container: | ||||
| @@ -110,11 +106,14 @@ Before we can create the database, we need to launch the database server contain | ||||
| docker-compose up -d inventree-db | ||||
| ``` | ||||
|  | ||||
| This starts the database container. | ||||
| This starts the database container (in this example, a PostgreSQL server). | ||||
|  | ||||
| ### Create Database | ||||
|  | ||||
| As this is the first time we are interacting with the docker containers, the InvenTree database has not yet been created. | ||||
| If this is the first time we are interacting with the docker containers, the InvenTree database has not yet been created. | ||||
|  | ||||
| !!! success "First Run Only" | ||||
|     If you have already created the InvenTree database you can progress to the next step | ||||
|  | ||||
| Run the following command to open a shell session for the database: | ||||
|  | ||||
| @@ -135,27 +134,24 @@ create database inventree; | ||||
|  | ||||
| Then exit the shell with <kbd>Ctrl</kbd>+<kbd>d</kbd> | ||||
|  | ||||
| ### Perform Database Migrations | ||||
| ### Database Setup | ||||
|  | ||||
| The database has now been created, but it is empty! We need to perform the initial database migrations: | ||||
| The database has now been created, but it is empty! Perform the initial database setup by running the following command: | ||||
|  | ||||
| ``` | ||||
| docker-compose run inventree-server invoke migrate | ||||
| docker-compose run inventree-server invoke update | ||||
| ``` | ||||
|  | ||||
| This will perform the required schema updates to create the required database tables. | ||||
| This command performs the following steps: | ||||
|  | ||||
| ### Collect Static Files | ||||
|  | ||||
| On first run, the required static files must be collected into the `static` volume: | ||||
|  | ||||
| ``` | ||||
| docker-compose run inventree-server invoke static | ||||
| ``` | ||||
| - Ensure required python packages are installed | ||||
| - Perform the required schema updates to create the required database tables | ||||
| - Update translation files | ||||
| - Collect all required static files into a directory where they can be served by nginx | ||||
|  | ||||
| ### Create Admin Account | ||||
|  | ||||
| You need to create an admin (superuser) account for the database. Run the command below, and follow the prompts: | ||||
| If you are creating the initial database, you need to create an admin (superuser) account for the database. Run the command below, and follow the prompts: | ||||
|  | ||||
| ``` | ||||
| docker-compose run inventree-server invoke superuser | ||||
|   | ||||
		Reference in New Issue
	
	Block a user