2
0
mirror of https://github.com/inventree/inventree-docs.git synced 2025-04-27 21:26:43 +00:00

Updated docs for production setup

This commit is contained in:
Oliver 2021-08-18 15:07:04 +10:00
parent 21a3c4dd70
commit 8434a496ef
3 changed files with 29 additions and 205 deletions

View File

@ -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

View File

@ -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;
}
}

View File

@ -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.
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.
!!! 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