From 8434a496ef95fbd5f0afad291c6711cfce06e3c8 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 18 Aug 2021 15:07:04 +1000 Subject: [PATCH] Updated docs for production setup --- _includes/docker-compose.yml | 115 ----------------------------------- _includes/nginx.conf | 57 ----------------- docs/start/docker_prod.md | 62 +++++++++---------- 3 files changed, 29 insertions(+), 205 deletions(-) delete mode 100644 _includes/docker-compose.yml delete mode 100644 _includes/nginx.conf diff --git a/_includes/docker-compose.yml b/_includes/docker-compose.yml deleted file mode 100644 index 0258853..0000000 --- a/_includes/docker-compose.yml +++ /dev/null @@ -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 diff --git a/_includes/nginx.conf b/_includes/nginx.conf deleted file mode 100644 index 2703787..0000000 --- a/_includes/nginx.conf +++ /dev/null @@ -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; - } - -} \ No newline at end of file diff --git a/docs/start/docker_prod.md b/docs/start/docker_prod.md index 9237e60..9e4211e 100644 --- a/docs/start/docker_prod.md +++ b/docs/start/docker_prod.md @@ -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 Ctrl+d -### 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