2022-03-26 13:21:17 -07:00
#!/usr/bin/env bash
2020-10-29 00:46:57 +01:00
Add Dockerfile for application and documentation
This commit adds a `Dockerfile` to the root of the project, accompanied
by a `docker-compose.yml.example` for simplified deployment. The
`Dockerfile` is agnostic to whether it will be the webserver, the
consumer, or if it is run for a one-off command (i.e. creation of a
superuser, migration of the database, document export, ...).
The containers entrypoint is the `scripts/docker-entrypoint.sh` script.
This script verifies that the required permissions are set, remaps the
default users and/or groups id if required and installs additional
languages if the user wishes to.
After initialization, it analyzes the command the user supplied:
- If the command starts with a slash, it is expected that the user
wants to execute a binary file and the command will be executed
without further intervention. (Using `exec` to effectively replace
the started shell-script and not have any reaping-issues.)
- If the command does not start with a slash, the command will be
passed directly to the `manage.py` script without further
modification. (Again using `exec`.)
The default command is set to `--help`.
If the user wants to execute a command that is not meant for `manage.py`
but doesn't start with a slash, the Docker `--entrypoint` parameter can
be used to circumvent the mechanics of `docker-entrypoint.sh`.
Further information can be found in `docs/setup.rst` and in
`docs/migrating.rst`.
For additional convenience, a `Dockerfile` has been added to the `docs/`
directory which allows for easy building and serving of the
documentation. This is documented in `docs/requirements.rst`.
2016-02-17 18:45:04 +01:00
set -e
# Source: https://github.com/sameersbn/docker-gitlab/
map_uidgid( ) {
2021-05-19 22:26:51 +02:00
USERMAP_ORIG_UID = $( id -u paperless)
USERMAP_ORIG_GID = $( id -g paperless)
USERMAP_NEW_UID = ${ USERMAP_UID :- $USERMAP_ORIG_UID }
USERMAP_NEW_GID = ${ USERMAP_GID :- ${ USERMAP_ORIG_GID :- $USERMAP_NEW_UID } }
if [ [ ${ USERMAP_NEW_UID } != " ${ USERMAP_ORIG_UID } " || ${ USERMAP_NEW_GID } != " ${ USERMAP_ORIG_GID } " ] ] ; then
echo " Mapping UID and GID for paperless:paperless to $USERMAP_NEW_UID : $USERMAP_NEW_GID "
2022-03-18 23:26:04 +01:00
usermod -o -u " ${ USERMAP_NEW_UID } " paperless
2021-05-19 22:26:51 +02:00
groupmod -o -g " ${ USERMAP_NEW_GID } " paperless
fi
Add Dockerfile for application and documentation
This commit adds a `Dockerfile` to the root of the project, accompanied
by a `docker-compose.yml.example` for simplified deployment. The
`Dockerfile` is agnostic to whether it will be the webserver, the
consumer, or if it is run for a one-off command (i.e. creation of a
superuser, migration of the database, document export, ...).
The containers entrypoint is the `scripts/docker-entrypoint.sh` script.
This script verifies that the required permissions are set, remaps the
default users and/or groups id if required and installs additional
languages if the user wishes to.
After initialization, it analyzes the command the user supplied:
- If the command starts with a slash, it is expected that the user
wants to execute a binary file and the command will be executed
without further intervention. (Using `exec` to effectively replace
the started shell-script and not have any reaping-issues.)
- If the command does not start with a slash, the command will be
passed directly to the `manage.py` script without further
modification. (Again using `exec`.)
The default command is set to `--help`.
If the user wants to execute a command that is not meant for `manage.py`
but doesn't start with a slash, the Docker `--entrypoint` parameter can
be used to circumvent the mechanics of `docker-entrypoint.sh`.
Further information can be found in `docs/setup.rst` and in
`docs/migrating.rst`.
For additional convenience, a `Dockerfile` has been added to the `docs/`
directory which allows for easy building and serving of the
documentation. This is documented in `docs/requirements.rst`.
2016-02-17 18:45:04 +01:00
}
2022-06-03 09:18:48 -07:00
map_folders( ) {
# Export these so they can be used in docker-prepare.sh
export DATA_DIR = " ${ PAPERLESS_DATA_DIR :- /usr/src/paperless/data } "
export MEDIA_ROOT_DIR = " ${ PAPERLESS_MEDIA_ROOT :- /usr/src/paperless/media } "
}
Add Dockerfile for application and documentation
This commit adds a `Dockerfile` to the root of the project, accompanied
by a `docker-compose.yml.example` for simplified deployment. The
`Dockerfile` is agnostic to whether it will be the webserver, the
consumer, or if it is run for a one-off command (i.e. creation of a
superuser, migration of the database, document export, ...).
The containers entrypoint is the `scripts/docker-entrypoint.sh` script.
This script verifies that the required permissions are set, remaps the
default users and/or groups id if required and installs additional
languages if the user wishes to.
After initialization, it analyzes the command the user supplied:
- If the command starts with a slash, it is expected that the user
wants to execute a binary file and the command will be executed
without further intervention. (Using `exec` to effectively replace
the started shell-script and not have any reaping-issues.)
- If the command does not start with a slash, the command will be
passed directly to the `manage.py` script without further
modification. (Again using `exec`.)
The default command is set to `--help`.
If the user wants to execute a command that is not meant for `manage.py`
but doesn't start with a slash, the Docker `--entrypoint` parameter can
be used to circumvent the mechanics of `docker-entrypoint.sh`.
Further information can be found in `docs/setup.rst` and in
`docs/migrating.rst`.
For additional convenience, a `Dockerfile` has been added to the `docs/`
directory which allows for easy building and serving of the
documentation. This is documented in `docs/requirements.rst`.
2016-02-17 18:45:04 +01:00
initialize( ) {
2022-06-03 09:18:48 -07:00
# Change the user and group IDs if needed
2020-10-29 00:46:57 +01:00
map_uidgid
Add Dockerfile for application and documentation
This commit adds a `Dockerfile` to the root of the project, accompanied
by a `docker-compose.yml.example` for simplified deployment. The
`Dockerfile` is agnostic to whether it will be the webserver, the
consumer, or if it is run for a one-off command (i.e. creation of a
superuser, migration of the database, document export, ...).
The containers entrypoint is the `scripts/docker-entrypoint.sh` script.
This script verifies that the required permissions are set, remaps the
default users and/or groups id if required and installs additional
languages if the user wishes to.
After initialization, it analyzes the command the user supplied:
- If the command starts with a slash, it is expected that the user
wants to execute a binary file and the command will be executed
without further intervention. (Using `exec` to effectively replace
the started shell-script and not have any reaping-issues.)
- If the command does not start with a slash, the command will be
passed directly to the `manage.py` script without further
modification. (Again using `exec`.)
The default command is set to `--help`.
If the user wants to execute a command that is not meant for `manage.py`
but doesn't start with a slash, the Docker `--entrypoint` parameter can
be used to circumvent the mechanics of `docker-entrypoint.sh`.
Further information can be found in `docs/setup.rst` and in
`docs/migrating.rst`.
For additional convenience, a `Dockerfile` has been added to the `docs/`
directory which allows for easy building and serving of the
documentation. This is documented in `docs/requirements.rst`.
2016-02-17 18:45:04 +01:00
2022-06-03 09:18:48 -07:00
# Check for overrides of certain folders
map_folders
2022-06-03 11:21:13 -07:00
for dir in " ${ DATA_DIR } " " ${ DATA_DIR } /index " " ${ MEDIA_ROOT_DIR } " " ${ MEDIA_ROOT_DIR } /documents " " ${ MEDIA_ROOT_DIR } /documents/originals " " ${ MEDIA_ROOT_DIR } /documents/thumbnails " ; do
2022-06-03 09:18:48 -07:00
if [ [ ! -d " ${ dir } " ] ] ; then
echo " Creating directory ${ dir } "
mkdir " ${ dir } "
2020-10-29 00:46:57 +01:00
fi
done
Add Dockerfile for application and documentation
This commit adds a `Dockerfile` to the root of the project, accompanied
by a `docker-compose.yml.example` for simplified deployment. The
`Dockerfile` is agnostic to whether it will be the webserver, the
consumer, or if it is run for a one-off command (i.e. creation of a
superuser, migration of the database, document export, ...).
The containers entrypoint is the `scripts/docker-entrypoint.sh` script.
This script verifies that the required permissions are set, remaps the
default users and/or groups id if required and installs additional
languages if the user wishes to.
After initialization, it analyzes the command the user supplied:
- If the command starts with a slash, it is expected that the user
wants to execute a binary file and the command will be executed
without further intervention. (Using `exec` to effectively replace
the started shell-script and not have any reaping-issues.)
- If the command does not start with a slash, the command will be
passed directly to the `manage.py` script without further
modification. (Again using `exec`.)
The default command is set to `--help`.
If the user wants to execute a command that is not meant for `manage.py`
but doesn't start with a slash, the Docker `--entrypoint` parameter can
be used to circumvent the mechanics of `docker-entrypoint.sh`.
Further information can be found in `docs/setup.rst` and in
`docs/migrating.rst`.
For additional convenience, a `Dockerfile` has been added to the `docs/`
directory which allows for easy building and serving of the
documentation. This is documented in `docs/requirements.rst`.
2016-02-17 18:45:04 +01:00
2022-06-03 09:18:48 -07:00
local tmp_dir = "/tmp/paperless"
echo " Creating directory ${ tmp_dir } "
mkdir -p " ${ tmp_dir } "
2021-01-21 01:02:41 +01:00
2021-05-19 22:26:51 +02:00
set +e
2021-06-13 12:54:24 +02:00
echo "Adjusting permissions of paperless files. This may take a while."
2022-06-03 09:18:48 -07:00
chown -R paperless:paperless ${ tmp_dir }
2022-06-03 11:21:13 -07:00
for dir in " ${ DATA_DIR } " " ${ MEDIA_ROOT_DIR } " ; do
2022-06-03 09:18:48 -07:00
find " ${ dir } " -not \( -user paperless -and -group paperless \) -exec chown paperless:paperless { } +
done
2021-05-19 22:26:51 +02:00
set -e
2020-10-29 00:46:57 +01:00
2021-05-19 22:26:51 +02:00
gosu paperless /sbin/docker-prepare.sh
2020-10-29 00:46:57 +01:00
}
2017-12-20 16:17:58 +02:00
2020-10-29 00:46:57 +01:00
install_languages( ) {
2021-01-13 19:58:09 +01:00
echo "Installing languages..."
2020-10-29 00:46:57 +01:00
local langs = " $1 "
read -ra langs <<< " $langs "
# Check that it is not empty
if [ ${# langs [@] } -eq 0 ] ; then
return
fi
apt-get update
for lang in " ${ langs [@] } " ; do
2021-05-19 22:26:51 +02:00
pkg = " tesseract-ocr- $lang "
# English is installed by default
#if [[ "$lang" == "eng" ]]; then
# continue
#fi
2022-03-20 15:58:37 +01:00
if dpkg -s " $pkg " & >/dev/null; then
2021-05-19 22:26:51 +02:00
echo " Package $pkg already installed! "
continue
fi
2022-03-20 15:58:37 +01:00
if ! apt-cache show " $pkg " & >/dev/null; then
2021-05-19 22:26:51 +02:00
echo " Package $pkg not found! :( "
continue
fi
echo " Installing package $pkg ... "
if ! apt-get -y install " $pkg " & >/dev/null; then
echo " Could not install $pkg "
exit 1
fi
done
Add Dockerfile for application and documentation
This commit adds a `Dockerfile` to the root of the project, accompanied
by a `docker-compose.yml.example` for simplified deployment. The
`Dockerfile` is agnostic to whether it will be the webserver, the
consumer, or if it is run for a one-off command (i.e. creation of a
superuser, migration of the database, document export, ...).
The containers entrypoint is the `scripts/docker-entrypoint.sh` script.
This script verifies that the required permissions are set, remaps the
default users and/or groups id if required and installs additional
languages if the user wishes to.
After initialization, it analyzes the command the user supplied:
- If the command starts with a slash, it is expected that the user
wants to execute a binary file and the command will be executed
without further intervention. (Using `exec` to effectively replace
the started shell-script and not have any reaping-issues.)
- If the command does not start with a slash, the command will be
passed directly to the `manage.py` script without further
modification. (Again using `exec`.)
The default command is set to `--help`.
If the user wants to execute a command that is not meant for `manage.py`
but doesn't start with a slash, the Docker `--entrypoint` parameter can
be used to circumvent the mechanics of `docker-entrypoint.sh`.
Further information can be found in `docs/setup.rst` and in
`docs/migrating.rst`.
For additional convenience, a `Dockerfile` has been added to the `docs/`
directory which allows for easy building and serving of the
documentation. This is documented in `docs/requirements.rst`.
2016-02-17 18:45:04 +01:00
}
2022-03-01 14:09:09 -08:00
echo "Paperless-ngx docker container starting..."
2021-01-13 19:58:09 +01:00
2020-11-01 23:01:36 +01:00
# Install additional languages if specified
2022-03-20 15:58:37 +01:00
if [ [ -n " $PAPERLESS_OCR_LANGUAGES " ] ] ; then
2021-05-19 22:26:51 +02:00
install_languages " $PAPERLESS_OCR_LANGUAGES "
Add Dockerfile for application and documentation
This commit adds a `Dockerfile` to the root of the project, accompanied
by a `docker-compose.yml.example` for simplified deployment. The
`Dockerfile` is agnostic to whether it will be the webserver, the
consumer, or if it is run for a one-off command (i.e. creation of a
superuser, migration of the database, document export, ...).
The containers entrypoint is the `scripts/docker-entrypoint.sh` script.
This script verifies that the required permissions are set, remaps the
default users and/or groups id if required and installs additional
languages if the user wishes to.
After initialization, it analyzes the command the user supplied:
- If the command starts with a slash, it is expected that the user
wants to execute a binary file and the command will be executed
without further intervention. (Using `exec` to effectively replace
the started shell-script and not have any reaping-issues.)
- If the command does not start with a slash, the command will be
passed directly to the `manage.py` script without further
modification. (Again using `exec`.)
The default command is set to `--help`.
If the user wants to execute a command that is not meant for `manage.py`
but doesn't start with a slash, the Docker `--entrypoint` parameter can
be used to circumvent the mechanics of `docker-entrypoint.sh`.
Further information can be found in `docs/setup.rst` and in
`docs/migrating.rst`.
For additional convenience, a `Dockerfile` has been added to the `docs/`
directory which allows for easy building and serving of the
documentation. This is documented in `docs/requirements.rst`.
2016-02-17 18:45:04 +01:00
fi
2020-12-09 23:45:53 +01:00
initialize
2020-11-13 18:42:32 +01:00
if [ [ " $1 " != "/" * ] ] ; then
2021-01-13 19:58:09 +01:00
echo Executing management command " $@ "
2021-04-26 19:06:30 -05:00
exec gosu paperless python3 manage.py " $@ "
2020-11-13 18:42:32 +01:00
else
2021-01-13 19:58:09 +01:00
echo Executing " $@ "
2020-11-13 18:42:32 +01:00
exec " $@ "
fi