mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-03-31 13:35:08 -05:00
121 lines
2.5 KiB
Bash
Executable File
121 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
wait_for_postgres() {
|
|
local attempt_num=1
|
|
local -r max_attempts=5
|
|
|
|
echo "Waiting for PostgreSQL to start..."
|
|
|
|
local -r host="${PAPERLESS_DBHOST:-localhost}"
|
|
local -r port="${PAPERLESS_DBPORT:-5432}"
|
|
|
|
# Disable warning, host and port can't have spaces
|
|
# shellcheck disable=SC2086
|
|
while [ ! "$(pg_isready --host ${host} --port ${port})" ]; do
|
|
|
|
if [ $attempt_num -eq $max_attempts ]; then
|
|
echo "Unable to connect to database."
|
|
exit 1
|
|
else
|
|
echo "Attempt $attempt_num failed! Trying again in 5 seconds..."
|
|
fi
|
|
|
|
attempt_num=$(("$attempt_num" + 1))
|
|
sleep 5
|
|
done
|
|
echo "Connected to PostgreSQL"
|
|
}
|
|
|
|
wait_for_mariadb() {
|
|
echo "Waiting for MariaDB to start..."
|
|
|
|
local -r host="${PAPERLESS_DBHOST:=localhost}"
|
|
local -r port="${PAPERLESS_DBPORT:=3306}"
|
|
|
|
local attempt_num=1
|
|
local -r max_attempts=5
|
|
|
|
# Disable warning, host and port can't have spaces
|
|
# shellcheck disable=SC2086
|
|
while ! true > /dev/tcp/$host/$port; do
|
|
|
|
if [ $attempt_num -eq $max_attempts ]; then
|
|
echo "Unable to connect to database."
|
|
exit 1
|
|
else
|
|
echo "Attempt $attempt_num failed! Trying again in 5 seconds..."
|
|
|
|
fi
|
|
|
|
attempt_num=$(("$attempt_num" + 1))
|
|
sleep 5
|
|
done
|
|
echo "Connected to MariaDB"
|
|
}
|
|
|
|
wait_for_redis() {
|
|
# We use a Python script to send the Redis ping
|
|
# instead of installing redis-tools just for 1 thing
|
|
if ! python3 /sbin/wait-for-redis.py; then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
migrations() {
|
|
(
|
|
# flock is in place to prevent multiple containers from doing migrations
|
|
# simultaneously. This also ensures that the db is ready when the command
|
|
# of the current container starts.
|
|
flock 200
|
|
echo "Apply database migrations..."
|
|
python3 manage.py migrate --skip-checks --no-input
|
|
) 200>"${DATA_DIR}/migration_lock"
|
|
}
|
|
|
|
django_checks() {
|
|
# Explicitly run the Django system checks
|
|
echo "Running Django checks"
|
|
python3 manage.py check
|
|
}
|
|
|
|
search_index() {
|
|
|
|
local -r index_version=9
|
|
local -r index_version_file=${DATA_DIR}/.index_version
|
|
|
|
if [[ (! -f "${index_version_file}") || $(<"${index_version_file}") != "$index_version" ]]; then
|
|
echo "Search index out of date. Updating..."
|
|
python3 manage.py document_index reindex --no-progress-bar
|
|
echo ${index_version} | tee "${index_version_file}" >/dev/null
|
|
fi
|
|
}
|
|
|
|
superuser() {
|
|
if [[ -n "${PAPERLESS_ADMIN_USER}" ]]; then
|
|
python3 manage.py manage_superuser
|
|
fi
|
|
}
|
|
|
|
do_work() {
|
|
if [[ "${PAPERLESS_DBENGINE}" == "mariadb" ]]; then
|
|
wait_for_mariadb
|
|
elif [[ -n "${PAPERLESS_DBHOST}" ]]; then
|
|
wait_for_postgres
|
|
fi
|
|
|
|
wait_for_redis
|
|
|
|
migrations
|
|
|
|
django_checks
|
|
|
|
search_index
|
|
|
|
superuser
|
|
|
|
}
|
|
|
|
do_work
|