mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 12:06:44 +00:00
commit
c3048a1bf1
@ -235,8 +235,8 @@ MEDIA_URL = '/media/'
|
|||||||
if DEBUG:
|
if DEBUG:
|
||||||
logger.info("InvenTree running in DEBUG mode")
|
logger.info("InvenTree running in DEBUG mode")
|
||||||
|
|
||||||
logger.info(f"MEDIA_ROOT: '{MEDIA_ROOT}'")
|
logger.debug(f"MEDIA_ROOT: '{MEDIA_ROOT}'")
|
||||||
logger.info(f"STATIC_ROOT: '{STATIC_ROOT}'")
|
logger.debug(f"STATIC_ROOT: '{STATIC_ROOT}'")
|
||||||
|
|
||||||
# Application definition
|
# Application definition
|
||||||
|
|
||||||
@ -420,7 +420,7 @@ Configure the database backend based on the user-specified values.
|
|||||||
- The following code lets the user "mix and match" database configuration
|
- The following code lets the user "mix and match" database configuration
|
||||||
"""
|
"""
|
||||||
|
|
||||||
logger.info("Configuring database backend:")
|
logger.debug("Configuring database backend:")
|
||||||
|
|
||||||
# Extract database configuration from the config.yaml file
|
# Extract database configuration from the config.yaml file
|
||||||
db_config = CONFIG.get('database', {})
|
db_config = CONFIG.get('database', {})
|
||||||
@ -474,11 +474,9 @@ if db_engine in ['sqlite3', 'postgresql', 'mysql']:
|
|||||||
db_name = db_config['NAME']
|
db_name = db_config['NAME']
|
||||||
db_host = db_config.get('HOST', "''")
|
db_host = db_config.get('HOST', "''")
|
||||||
|
|
||||||
print("InvenTree Database Configuration")
|
logger.info(f"DB_ENGINE: {db_engine}")
|
||||||
print("================================")
|
logger.info(f"DB_NAME: {db_name}")
|
||||||
print(f"ENGINE: {db_engine}")
|
logger.info(f"DB_HOST: {db_host}")
|
||||||
print(f"NAME: {db_name}")
|
|
||||||
print(f"HOST: {db_host}")
|
|
||||||
|
|
||||||
DATABASES['default'] = db_config
|
DATABASES['default'] = db_config
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ def schedule_task(taskname, **kwargs):
|
|||||||
# If this task is already scheduled, don't schedule it again
|
# If this task is already scheduled, don't schedule it again
|
||||||
# Instead, update the scheduling parameters
|
# Instead, update the scheduling parameters
|
||||||
if Schedule.objects.filter(func=taskname).exists():
|
if Schedule.objects.filter(func=taskname).exists():
|
||||||
logger.info(f"Scheduled task '{taskname}' already exists - updating!")
|
logger.debug(f"Scheduled task '{taskname}' already exists - updating!")
|
||||||
|
|
||||||
Schedule.objects.filter(func=taskname).update(**kwargs)
|
Schedule.objects.filter(func=taskname).update(**kwargs)
|
||||||
else:
|
else:
|
||||||
|
@ -36,51 +36,47 @@ ENV INVENTREE_GUNICORN_WORKERS="4"
|
|||||||
ENV INVENTREE_BACKGROUND_WORKERS="4"
|
ENV INVENTREE_BACKGROUND_WORKERS="4"
|
||||||
|
|
||||||
# Default web server address:port
|
# Default web server address:port
|
||||||
ENV INVENTREE_WEB_ADDR="0.0.0.0"
|
ENV INVENTREE_WEB_ADDR=0.0.0.0
|
||||||
ENV INVENTREE_WEB_PORT="8000"
|
ENV INVENTREE_WEB_PORT=8000
|
||||||
|
|
||||||
LABEL org.label-schema.schema-version="1.0" \
|
LABEL org.label-schema.schema-version="1.0" \
|
||||||
org.label-schema.build-date=${DATE} \
|
org.label-schema.build-date=${DATE} \
|
||||||
org.label-schema.vendor="inventree" \
|
org.label-schema.vendor="inventree" \
|
||||||
org.label-schema.name="inventree/inventree" \
|
org.label-schema.name="inventree/inventree" \
|
||||||
org.label-schema.url="https://hub.docker.com/r/inventree/inventree" \
|
org.label-schema.url="https://hub.docker.com/r/inventree/inventree" \
|
||||||
org.label-schema.version=${INVENTREE_VERSION} \
|
org.label-schema.vcs-url=${INVENTREE_GIT_REPO} \
|
||||||
org.label-schema.vcs-url=${INVENTREE_REPO} \
|
org.label-schema.vcs-branch=${INVENTREE_GIT_BRANCH} \
|
||||||
org.label-schema.vcs-branch=${BRANCH} \
|
org.label-schema.vcs-ref=${INVENTREE_GIT_TAG}
|
||||||
org.label-schema.vcs-ref=${COMMIT}
|
|
||||||
|
|
||||||
# Create user account
|
# Create user account
|
||||||
RUN addgroup -S inventreegroup && adduser -S inventree -G inventreegroup
|
RUN addgroup -S inventreegroup && adduser -S inventree -G inventreegroup
|
||||||
|
|
||||||
WORKDIR ${INVENTREE_HOME}
|
|
||||||
|
|
||||||
# Install required system packages
|
# Install required system packages
|
||||||
RUN apk add --no-cache git make bash \
|
RUN apk add --no-cache git make bash \
|
||||||
gcc libgcc g++ libstdc++ \
|
gcc libgcc g++ libstdc++ \
|
||||||
libjpeg-turbo libjpeg-turbo-dev jpeg jpeg-dev \
|
libjpeg-turbo libjpeg-turbo-dev jpeg jpeg-dev \
|
||||||
libffi libffi-dev \
|
libffi libffi-dev \
|
||||||
zlib zlib-dev
|
zlib zlib-dev \
|
||||||
|
# Cairo deps for WeasyPrint (these will be deprecated once WeasyPrint drops cairo requirement)
|
||||||
|
cairo cairo-dev pango pango-dev \
|
||||||
|
# Fonts
|
||||||
|
fontconfig ttf-droid ttf-liberation ttf-dejavu ttf-opensans ttf-ubuntu-font-family font-croscore font-noto \
|
||||||
|
# Core python
|
||||||
|
python3 python3-dev py3-pip \
|
||||||
|
# SQLite support
|
||||||
|
sqlite \
|
||||||
|
# PostgreSQL support
|
||||||
|
postgresql postgresql-contrib postgresql-dev libpq \
|
||||||
|
# MySQL/MariaDB support
|
||||||
|
mariadb-connector-c mariadb-dev mariadb-client
|
||||||
|
|
||||||
# Cairo deps for WeasyPrint (these will be deprecated once WeasyPrint drops cairo requirement)
|
# Install required base-level python packages
|
||||||
RUN apk add --no-cache cairo cairo-dev pango pango-dev
|
COPY requirements.txt requirements.txt
|
||||||
RUN apk add --no-cache fontconfig ttf-droid ttf-liberation ttf-dejavu ttf-opensans ttf-ubuntu-font-family font-croscore font-noto
|
RUN pip install --no-cache-dir -U -r requirements.txt
|
||||||
|
|
||||||
# Python
|
|
||||||
RUN apk add --no-cache python3 python3-dev py3-pip
|
|
||||||
|
|
||||||
# SQLite support
|
|
||||||
RUN apk add --no-cache sqlite
|
|
||||||
|
|
||||||
# PostgreSQL support
|
|
||||||
RUN apk add --no-cache postgresql postgresql-contrib postgresql-dev libpq
|
|
||||||
|
|
||||||
# MySQL support
|
|
||||||
RUN apk add --no-cache mariadb-connector-c mariadb-dev mariadb-client
|
|
||||||
|
|
||||||
# Install required python packages
|
|
||||||
RUN pip install --no-cache-dir -U psycopg2 mysqlclient pgcli mariadb
|
|
||||||
|
|
||||||
|
# Production code (pulled from tagged github release)
|
||||||
FROM base as production
|
FROM base as production
|
||||||
|
|
||||||
# Clone source code
|
# Clone source code
|
||||||
RUN echo "Downloading InvenTree from ${INVENTREE_GIT_REPO}"
|
RUN echo "Downloading InvenTree from ${INVENTREE_GIT_REPO}"
|
||||||
|
|
||||||
@ -89,23 +85,24 @@ RUN git clone --branch ${INVENTREE_GIT_BRANCH} --depth 1 ${INVENTREE_GIT_REPO} $
|
|||||||
# Checkout against a particular git tag
|
# Checkout against a particular git tag
|
||||||
RUN if [ -n "${INVENTREE_GIT_TAG}" ] ; then cd ${INVENTREE_HOME} && git fetch --all --tags && git checkout tags/${INVENTREE_GIT_TAG} -b v${INVENTREE_GIT_TAG}-branch ; fi
|
RUN if [ -n "${INVENTREE_GIT_TAG}" ] ; then cd ${INVENTREE_HOME} && git fetch --all --tags && git checkout tags/${INVENTREE_GIT_TAG} -b v${INVENTREE_GIT_TAG}-branch ; fi
|
||||||
|
|
||||||
|
RUN chown -R inventree:inventreegroup ${INVENTREE_HOME}/*
|
||||||
|
|
||||||
|
# Drop to the inventree user
|
||||||
|
USER inventree
|
||||||
|
|
||||||
# Install InvenTree packages
|
# Install InvenTree packages
|
||||||
RUN pip install --no-cache-dir -U -r ${INVENTREE_HOME}/requirements.txt
|
RUN pip3 install --no-cache-dir --disable-pip-version-check -r ${INVENTREE_HOME}/requirements.txt
|
||||||
|
|
||||||
# Copy gunicorn config file
|
# Need to be running from within this directory
|
||||||
COPY gunicorn.conf.py ${INVENTREE_HOME}/gunicorn.conf.py
|
WORKDIR ${INVENTREE_MNG_DIR}
|
||||||
|
|
||||||
# Copy startup scripts
|
# Server init entrypoint
|
||||||
COPY start_prod_server.sh ${INVENTREE_HOME}/start_prod_server.sh
|
ENTRYPOINT ["/bin/bash", "../docker/init.sh"]
|
||||||
COPY start_prod_worker.sh ${INVENTREE_HOME}/start_prod_worker.sh
|
|
||||||
|
|
||||||
RUN chmod 755 ${INVENTREE_HOME}/start_prod_server.sh
|
# Launch the production server
|
||||||
RUN chmod 755 ${INVENTREE_HOME}/start_prod_worker.sh
|
# TODO: Work out why environment variables cannot be interpolated in this command
|
||||||
|
# TODO: e.g. -b ${INVENTREE_WEB_ADDR}:${INVENTREE_WEB_PORT} fails here
|
||||||
WORKDIR ${INVENTREE_HOME}
|
CMD gunicorn -c ./docker/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:8000 --chdir ./InvenTree
|
||||||
|
|
||||||
# Let us begin
|
|
||||||
CMD ["bash", "./start_prod_server.sh"]
|
|
||||||
|
|
||||||
FROM base as dev
|
FROM base as dev
|
||||||
|
|
||||||
@ -114,6 +111,10 @@ FROM base as dev
|
|||||||
|
|
||||||
ENV INVENTREE_DEV_DIR="${INVENTREE_HOME}/dev"
|
ENV INVENTREE_DEV_DIR="${INVENTREE_HOME}/dev"
|
||||||
|
|
||||||
|
# Location for python virtual environment
|
||||||
|
# If the INVENTREE_PY_ENV variable is set, the entrypoint script will use it!
|
||||||
|
ENV INVENTREE_PY_ENV="${INVENTREE_DEV_DIR}/env"
|
||||||
|
|
||||||
# Override default path settings
|
# Override default path settings
|
||||||
ENV INVENTREE_STATIC_ROOT="${INVENTREE_DEV_DIR}/static"
|
ENV INVENTREE_STATIC_ROOT="${INVENTREE_DEV_DIR}/static"
|
||||||
ENV INVENTREE_MEDIA_ROOT="${INVENTREE_DEV_DIR}/media"
|
ENV INVENTREE_MEDIA_ROOT="${INVENTREE_DEV_DIR}/media"
|
||||||
@ -122,5 +123,9 @@ ENV INVENTREE_SECRET_KEY_FILE="${INVENTREE_DEV_DIR}/secret_key.txt"
|
|||||||
|
|
||||||
WORKDIR ${INVENTREE_HOME}
|
WORKDIR ${INVENTREE_HOME}
|
||||||
|
|
||||||
|
# Entrypoint ensures that we are running in the python virtual environment
|
||||||
|
ENTRYPOINT ["/bin/bash", "./docker/init.sh"]
|
||||||
|
|
||||||
# Launch the development server
|
# Launch the development server
|
||||||
CMD ["bash", "/home/inventree/docker/start_dev_server.sh"]
|
CMD ["invoke", "server", "-a", "${INVENTREE_WEB_ADDR}:${INVENTREE_WEB_PORT}"]
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
target: dev
|
target: dev
|
||||||
entrypoint: /home/inventree/docker/start_dev_worker.sh
|
command: invoke worker
|
||||||
depends_on:
|
depends_on:
|
||||||
- inventree-dev-server
|
- inventree-dev-server
|
||||||
volumes:
|
volumes:
|
||||||
|
@ -21,12 +21,13 @@ services:
|
|||||||
# just make sure that you change the INVENTREE_DB_xxx vars below
|
# just make sure that you change the INVENTREE_DB_xxx vars below
|
||||||
inventree-db:
|
inventree-db:
|
||||||
container_name: inventree-db
|
container_name: inventree-db
|
||||||
image: postgres
|
image: postgres:13
|
||||||
ports:
|
ports:
|
||||||
- 5432/tcp
|
- 5432/tcp
|
||||||
environment:
|
environment:
|
||||||
- PGDATA=/var/lib/postgresql/data/pgdb
|
- PGDATA=/var/lib/postgresql/data/pgdb
|
||||||
# The pguser and pgpassword values must be the same in the other containers
|
# 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_USER=pguser
|
||||||
- POSTGRES_PASSWORD=pgpassword
|
- POSTGRES_PASSWORD=pgpassword
|
||||||
volumes:
|
volumes:
|
||||||
@ -38,6 +39,8 @@ services:
|
|||||||
# Uses gunicorn as the web server
|
# Uses gunicorn as the web server
|
||||||
inventree-server:
|
inventree-server:
|
||||||
container_name: 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
|
image: inventree/inventree:latest
|
||||||
expose:
|
expose:
|
||||||
- 8000
|
- 8000
|
||||||
@ -46,39 +49,27 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
# Data volume must map to /home/inventree/data
|
# Data volume must map to /home/inventree/data
|
||||||
- data:/home/inventree/data
|
- data:/home/inventree/data
|
||||||
environment:
|
env_file:
|
||||||
# Default environment variables are configured to match the 'db' container
|
# Environment variables required for the production server are configured in prod-config.env
|
||||||
# Note: If you change the database image, these will need to be adjusted
|
- prod-config.env
|
||||||
# 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
|
restart: unless-stopped
|
||||||
|
|
||||||
# Background worker process handles long-running or periodic tasks
|
# Background worker process handles long-running or periodic tasks
|
||||||
inventree-worker:
|
inventree-worker:
|
||||||
container_name: 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
|
image: inventree/inventree:latest
|
||||||
entrypoint: ./start_prod_worker.sh
|
command: invoke worker
|
||||||
depends_on:
|
depends_on:
|
||||||
- inventree-db
|
- inventree-db
|
||||||
- inventree-server
|
- inventree-server
|
||||||
volumes:
|
volumes:
|
||||||
# Data volume must map to /home/inventree/data
|
# Data volume must map to /home/inventree/data
|
||||||
- data:/home/inventree/data
|
- data:/home/inventree/data
|
||||||
environment:
|
env_file:
|
||||||
# Default environment variables are configured to match the 'db' container
|
# Environment variables required for the production server are configured in prod-config.env
|
||||||
# Note: If you change the database image, these will need to be adjusted
|
- prod-config.env
|
||||||
# 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
|
restart: unless-stopped
|
||||||
|
|
||||||
# nginx acts as a reverse proxy
|
# nginx acts as a reverse proxy
|
||||||
@ -88,7 +79,7 @@ services:
|
|||||||
# NOTE: You will need to provide a working nginx.conf file!
|
# NOTE: You will need to provide a working nginx.conf file!
|
||||||
inventree-proxy:
|
inventree-proxy:
|
||||||
container_name: inventree-proxy
|
container_name: inventree-proxy
|
||||||
image: nginx
|
image: nginx:stable
|
||||||
depends_on:
|
depends_on:
|
||||||
- inventree-server
|
- inventree-server
|
||||||
ports:
|
ports:
|
||||||
|
42
docker/init.sh
Normal file
42
docker/init.sh
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# exit when any command fails
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Create required directory structure (if it does not already exist)
|
||||||
|
if [[ ! -d "$INVENTREE_STATIC_ROOT" ]]; then
|
||||||
|
echo "Creating directory $INVENTREE_STATIC_ROOT"
|
||||||
|
mkdir -p $INVENTREE_STATIC_ROOT
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "$INVENTREE_MEDIA_ROOT" ]]; then
|
||||||
|
echo "Creating directory $INVENTREE_MEDIA_ROOT"
|
||||||
|
mkdir -p $INVENTREE_MEDIA_ROOT
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if "config.yaml" has been copied into the correct location
|
||||||
|
if test -f "$INVENTREE_CONFIG_FILE"; then
|
||||||
|
echo "$INVENTREE_CONFIG_FILE exists - skipping"
|
||||||
|
else
|
||||||
|
echo "Copying config file to $INVENTREE_CONFIG_FILE"
|
||||||
|
cp $INVENTREE_HOME/InvenTree/config_template.yaml $INVENTREE_CONFIG_FILE
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Setup a python virtual environment
|
||||||
|
# This should be done on the *mounted* filesystem,
|
||||||
|
# so that the installed modules persist!
|
||||||
|
if [[ -n "$INVENTREE_PY_ENV" ]]; then
|
||||||
|
echo "Using Python virtual environment: ${INVENTREE_PY_ENV}"
|
||||||
|
# Setup a virtual environment (within the "dev" directory)
|
||||||
|
python3 -m venv ${INVENTREE_PY_ENV}
|
||||||
|
|
||||||
|
# Activate the virtual environment
|
||||||
|
source ${INVENTREE_PY_ENV}/bin/activate
|
||||||
|
|
||||||
|
# Note: Python packages will have to be installed on first run
|
||||||
|
# e.g docker-compose -f docker-compose.dev.yml run inventree-dev-server invoke install
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd ${INVENTREE_HOME}
|
||||||
|
|
||||||
|
# Launch the CMD *after* the ENTRYPOINT completes
|
||||||
|
exec "$@"
|
16
docker/prod-config.env
Normal file
16
docker/prod-config.env
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# InvenTree environment variables for a production setup
|
||||||
|
|
||||||
|
# Note: If your production setup varies from the example, you may want to change these values
|
||||||
|
|
||||||
|
# Ensure debug is false for a production setup
|
||||||
|
INVENTREE_DEBUG=False
|
||||||
|
INVENTREE_LOG_LEVEL="WARNING"
|
||||||
|
|
||||||
|
# Database configuration
|
||||||
|
# Note: The example setup is for a PostgreSQL database (change as required)
|
||||||
|
INVENTREE_DB_ENGINE=postgresql
|
||||||
|
INVENTREE_DB_NAME=inventree
|
||||||
|
INVENTREE_DB_HOST=inventree-db
|
||||||
|
INVENTREE_DB_PORT=5432
|
||||||
|
INVENTREE_DB_USER=pguser
|
||||||
|
INVENTREE_DB_PASSWORD=pgpassword
|
13
docker/requirements.txt
Normal file
13
docker/requirements.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Base python requirements for docker containers
|
||||||
|
|
||||||
|
# Basic package requirements
|
||||||
|
setuptools>=57.4.0
|
||||||
|
wheel>=0.37.0
|
||||||
|
invoke>=1.4.0 # Invoke build tool
|
||||||
|
gunicorn>=20.1.0 # Gunicorn web server
|
||||||
|
|
||||||
|
# Database links
|
||||||
|
psycopg2>=2.9.1
|
||||||
|
mysqlclient>=2.0.3
|
||||||
|
pgcli>=3.1.0
|
||||||
|
mariadb>=1.0.7
|
@ -1,51 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Create required directory structure (if it does not already exist)
|
|
||||||
if [[ ! -d "$INVENTREE_STATIC_ROOT" ]]; then
|
|
||||||
echo "Creating directory $INVENTREE_STATIC_ROOT"
|
|
||||||
mkdir -p $INVENTREE_STATIC_ROOT
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -d "$INVENTREE_MEDIA_ROOT" ]]; then
|
|
||||||
echo "Creating directory $INVENTREE_MEDIA_ROOT"
|
|
||||||
mkdir -p $INVENTREE_MEDIA_ROOT
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if "config.yaml" has been copied into the correct location
|
|
||||||
if test -f "$INVENTREE_CONFIG_FILE"; then
|
|
||||||
echo "$INVENTREE_CONFIG_FILE exists - skipping"
|
|
||||||
else
|
|
||||||
echo "Copying config file to $INVENTREE_CONFIG_FILE"
|
|
||||||
cp $INVENTREE_HOME/InvenTree/config_template.yaml $INVENTREE_CONFIG_FILE
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Setup a virtual environment (within the "dev" directory)
|
|
||||||
python3 -m venv ./dev/env
|
|
||||||
|
|
||||||
# Activate the virtual environment
|
|
||||||
source ./dev/env/bin/activate
|
|
||||||
|
|
||||||
echo "Installing required packages..."
|
|
||||||
pip install --no-cache-dir -U -r ${INVENTREE_HOME}/requirements.txt
|
|
||||||
|
|
||||||
echo "Starting InvenTree server..."
|
|
||||||
|
|
||||||
# Wait for the database to be ready
|
|
||||||
cd ${INVENTREE_HOME}/InvenTree
|
|
||||||
python3 manage.py wait_for_db
|
|
||||||
|
|
||||||
sleep 10
|
|
||||||
|
|
||||||
echo "Running InvenTree database migrations..."
|
|
||||||
|
|
||||||
# We assume at this stage that the database is up and running
|
|
||||||
# Ensure that the database schema are up to date
|
|
||||||
python3 manage.py check || exit 1
|
|
||||||
python3 manage.py migrate --noinput || exit 1
|
|
||||||
python3 manage.py migrate --run-syncdb || exit 1
|
|
||||||
python3 manage.py clearsessions || exit 1
|
|
||||||
|
|
||||||
invoke static
|
|
||||||
|
|
||||||
# Launch a development server
|
|
||||||
python3 manage.py runserver ${INVENTREE_WEB_ADDR}:${INVENTREE_WEB_PORT}
|
|
@ -1,19 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "Starting InvenTree worker..."
|
|
||||||
|
|
||||||
cd $INVENTREE_HOME
|
|
||||||
|
|
||||||
# Activate virtual environment
|
|
||||||
source ./dev/env/bin/activate
|
|
||||||
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
# Wait for the database to be ready
|
|
||||||
cd InvenTree
|
|
||||||
python3 manage.py wait_for_db
|
|
||||||
|
|
||||||
sleep 10
|
|
||||||
|
|
||||||
# Now we can launch the background worker process
|
|
||||||
python3 manage.py qcluster
|
|
@ -1,42 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Create required directory structure (if it does not already exist)
|
|
||||||
if [[ ! -d "$INVENTREE_STATIC_ROOT" ]]; then
|
|
||||||
echo "Creating directory $INVENTREE_STATIC_ROOT"
|
|
||||||
mkdir -p $INVENTREE_STATIC_ROOT
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -d "$INVENTREE_MEDIA_ROOT" ]]; then
|
|
||||||
echo "Creating directory $INVENTREE_MEDIA_ROOT"
|
|
||||||
mkdir -p $INVENTREE_MEDIA_ROOT
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if "config.yaml" has been copied into the correct location
|
|
||||||
if test -f "$INVENTREE_CONFIG_FILE"; then
|
|
||||||
echo "$INVENTREE_CONFIG_FILE exists - skipping"
|
|
||||||
else
|
|
||||||
echo "Copying config file to $INVENTREE_CONFIG_FILE"
|
|
||||||
cp $INVENTREE_HOME/InvenTree/config_template.yaml $INVENTREE_CONFIG_FILE
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Starting InvenTree server..."
|
|
||||||
|
|
||||||
# Wait for the database to be ready
|
|
||||||
cd $INVENTREE_MNG_DIR
|
|
||||||
python3 manage.py wait_for_db
|
|
||||||
|
|
||||||
sleep 10
|
|
||||||
|
|
||||||
echo "Running InvenTree database migrations and collecting static files..."
|
|
||||||
|
|
||||||
# We assume at this stage that the database is up and running
|
|
||||||
# Ensure that the database schema are up to date
|
|
||||||
python3 manage.py check || exit 1
|
|
||||||
python3 manage.py migrate --noinput || exit 1
|
|
||||||
python3 manage.py migrate --run-syncdb || exit 1
|
|
||||||
python3 manage.py prerender || exit 1
|
|
||||||
python3 manage.py collectstatic --noinput || exit 1
|
|
||||||
python3 manage.py clearsessions || exit 1
|
|
||||||
|
|
||||||
# Now we can launch the server
|
|
||||||
gunicorn -c $INVENTREE_HOME/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:$INVENTREE_WEB_PORT
|
|
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "Starting InvenTree worker..."
|
|
||||||
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
# Wait for the database to be ready
|
|
||||||
cd $INVENTREE_MNG_DIR
|
|
||||||
python3 manage.py wait_for_db
|
|
||||||
|
|
||||||
sleep 10
|
|
||||||
|
|
||||||
# Now we can launch the background worker process
|
|
||||||
python3 manage.py qcluster
|
|
@ -1,9 +1,3 @@
|
|||||||
# Basic package requirements
|
|
||||||
setuptools>=57.4.0
|
|
||||||
wheel>=0.37.0
|
|
||||||
invoke>=1.4.0 # Invoke build tool
|
|
||||||
gunicorn>=20.1.0 # Gunicorn web server
|
|
||||||
|
|
||||||
# Django framework
|
# Django framework
|
||||||
Django==3.2.4 # Django package
|
Django==3.2.4 # Django package
|
||||||
|
|
||||||
|
38
tasks.py
38
tasks.py
@ -65,7 +65,7 @@ def manage(c, cmd, pty=False):
|
|||||||
cmd - django command to run
|
cmd - django command to run
|
||||||
"""
|
"""
|
||||||
|
|
||||||
c.run('cd "{path}" && python3 manage.py {cmd}'.format(
|
result = c.run('cd "{path}" && python3 manage.py {cmd}'.format(
|
||||||
path=managePyDir(),
|
path=managePyDir(),
|
||||||
cmd=cmd
|
cmd=cmd
|
||||||
), pty=pty)
|
), pty=pty)
|
||||||
@ -80,14 +80,6 @@ def install(c):
|
|||||||
# Install required Python packages with PIP
|
# Install required Python packages with PIP
|
||||||
c.run('pip3 install -U -r requirements.txt')
|
c.run('pip3 install -U -r requirements.txt')
|
||||||
|
|
||||||
# If a config.yaml file does not exist, copy from the template!
|
|
||||||
CONFIG_FILE = os.path.join(localDir(), 'InvenTree', 'config.yaml')
|
|
||||||
CONFIG_TEMPLATE_FILE = os.path.join(localDir(), 'InvenTree', 'config_template.yaml')
|
|
||||||
|
|
||||||
if not os.path.exists(CONFIG_FILE):
|
|
||||||
print("Config file 'config.yaml' does not exist - copying from template.")
|
|
||||||
copyfile(CONFIG_TEMPLATE_FILE, CONFIG_FILE)
|
|
||||||
|
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def shell(c):
|
def shell(c):
|
||||||
@ -97,13 +89,6 @@ def shell(c):
|
|||||||
|
|
||||||
manage(c, 'shell', pty=True)
|
manage(c, 'shell', pty=True)
|
||||||
|
|
||||||
@task
|
|
||||||
def worker(c):
|
|
||||||
"""
|
|
||||||
Run the InvenTree background worker process
|
|
||||||
"""
|
|
||||||
|
|
||||||
manage(c, 'qcluster', pty=True)
|
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def superuser(c):
|
def superuser(c):
|
||||||
@ -113,6 +98,7 @@ def superuser(c):
|
|||||||
|
|
||||||
manage(c, 'createsuperuser', pty=True)
|
manage(c, 'createsuperuser', pty=True)
|
||||||
|
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def check(c):
|
def check(c):
|
||||||
"""
|
"""
|
||||||
@ -121,13 +107,24 @@ def check(c):
|
|||||||
|
|
||||||
manage(c, "check")
|
manage(c, "check")
|
||||||
|
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def wait(c):
|
def wait(c):
|
||||||
"""
|
"""
|
||||||
Wait until the database connection is ready
|
Wait until the database connection is ready
|
||||||
"""
|
"""
|
||||||
|
|
||||||
manage(c, "wait_for_db")
|
return manage(c, "wait_for_db")
|
||||||
|
|
||||||
|
|
||||||
|
@task(pre=[wait])
|
||||||
|
def worker(c):
|
||||||
|
"""
|
||||||
|
Run the InvenTree background worker process
|
||||||
|
"""
|
||||||
|
|
||||||
|
manage(c, 'qcluster', pty=True)
|
||||||
|
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def rebuild(c):
|
def rebuild(c):
|
||||||
@ -137,6 +134,7 @@ def rebuild(c):
|
|||||||
|
|
||||||
manage(c, "rebuild_models")
|
manage(c, "rebuild_models")
|
||||||
|
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def clean_settings(c):
|
def clean_settings(c):
|
||||||
"""
|
"""
|
||||||
@ -145,7 +143,7 @@ def clean_settings(c):
|
|||||||
|
|
||||||
manage(c, "clean_settings")
|
manage(c, "clean_settings")
|
||||||
|
|
||||||
@task
|
@task(post=[rebuild])
|
||||||
def migrate(c):
|
def migrate(c):
|
||||||
"""
|
"""
|
||||||
Performs database migrations.
|
Performs database migrations.
|
||||||
@ -156,7 +154,7 @@ def migrate(c):
|
|||||||
print("========================================")
|
print("========================================")
|
||||||
|
|
||||||
manage(c, "makemigrations")
|
manage(c, "makemigrations")
|
||||||
manage(c, "migrate")
|
manage(c, "migrate --noinput")
|
||||||
manage(c, "migrate --run-syncdb")
|
manage(c, "migrate --run-syncdb")
|
||||||
manage(c, "check")
|
manage(c, "check")
|
||||||
|
|
||||||
@ -190,7 +188,7 @@ def translate(c):
|
|||||||
|
|
||||||
path = os.path.join('InvenTree', 'script', 'translation_stats.py')
|
path = os.path.join('InvenTree', 'script', 'translation_stats.py')
|
||||||
|
|
||||||
c.run(f'python {path}')
|
c.run(f'python3 {path}')
|
||||||
|
|
||||||
|
|
||||||
@task(pre=[install, migrate, translate, clean_settings])
|
@task(pre=[install, migrate, translate, clean_settings])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user