diff --git a/Dockerfile b/Dockerfile index f56422a8e..a7ea8b70f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -239,6 +239,7 @@ COPY --from=compile-frontend --chown=1000:1000 /src/src/documents/static/fronten # add users, setup scripts # Mount the compiled frontend to expected location RUN set -eux \ + && sed -i '1s|^#!/usr/bin/env python3|#!/command/with-contenv python3|' manage.py \ && echo "Setting up user/group" \ && addgroup --gid 1000 paperless \ && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \ diff --git a/docker/compose/docker-compose.mariadb-tika.yml b/docker/compose/docker-compose.mariadb-tika.yml index c158797a5..845681cc8 100644 --- a/docker/compose/docker-compose.mariadb-tika.yml +++ b/docker/compose/docker-compose.mariadb-tika.yml @@ -24,8 +24,10 @@ # - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env' # and '.env' into a folder. # - Run 'docker compose pull'. -# - Run 'docker compose run --rm webserver createsuperuser' to create a user. # - Run 'docker compose up -d'. +# - Wait until the webserver has completed startup +# - Run 'docker compose exec webserver createsuperuser' to create a user. + # # For more extensive installation and update instructions, refer to the # documentation. diff --git a/docker/compose/docker-compose.mariadb.yml b/docker/compose/docker-compose.mariadb.yml index 0b7a0fd3e..9b8d57f4a 100644 --- a/docker/compose/docker-compose.mariadb.yml +++ b/docker/compose/docker-compose.mariadb.yml @@ -20,8 +20,9 @@ # - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env' # and '.env' into a folder. # - Run 'docker compose pull'. -# - Run 'docker compose run --rm webserver createsuperuser' to create a user. # - Run 'docker compose up -d'. +# - Wait until the webserver has completed startup +# - Run 'docker compose exec webserver createsuperuser' to create a user. # # For more extensive installation and update instructions, refer to the # documentation. diff --git a/docker/compose/docker-compose.portainer.yml b/docker/compose/docker-compose.portainer.yml index 2132c67a6..455b2004e 100644 --- a/docker/compose/docker-compose.portainer.yml +++ b/docker/compose/docker-compose.portainer.yml @@ -24,7 +24,7 @@ # - Click 'Deploy the stack' and wait for it to be deployed # - Open the list of containers, select paperless_webserver_1 # - Click 'Console' and then 'Connect' to open the command line inside the container -# - Run 'python3 manage.py createsuperuser' to create a user +# - Run 'createsuperuser' to create a user # - Exit the console # # For more extensive installation and update instructions, refer to the diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index 60bfada5f..dd81bd5b9 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -24,8 +24,9 @@ # - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env' # and '.env' into a folder. # - Run 'docker compose pull'. -# - Run 'docker compose run --rm webserver createsuperuser' to create a user. # - Run 'docker compose up -d'. +# - Wait until the webserver has completed startup +# - Run 'docker compose exec webserver createsuperuser' to create a user. # # For more extensive installation and update instructions, refer to the # documentation. diff --git a/docker/compose/docker-compose.postgres.yml b/docker/compose/docker-compose.postgres.yml index da2953b7b..8212f8514 100644 --- a/docker/compose/docker-compose.postgres.yml +++ b/docker/compose/docker-compose.postgres.yml @@ -20,8 +20,9 @@ # - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env' # and '.env' into a folder. # - Run 'docker compose pull'. -# - Run 'docker compose run --rm webserver createsuperuser' to create a user. # - Run 'docker compose up -d'. +# - Wait until the webserver has completed startup +# - Run 'docker compose exec webserver createsuperuser' to create a user. # # For more extensive installation and update instructions, refer to the # documentation. diff --git a/docker/compose/docker-compose.sqlite-tika.yml b/docker/compose/docker-compose.sqlite-tika.yml index 54292a845..d2a74b696 100644 --- a/docker/compose/docker-compose.sqlite-tika.yml +++ b/docker/compose/docker-compose.sqlite-tika.yml @@ -24,8 +24,9 @@ # - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env' # and '.env' into a folder. # - Run 'docker compose pull'. -# - Run 'docker compose run --rm webserver createsuperuser' to create a user. # - Run 'docker compose up -d'. +# - Wait until the webserver has completed startup +# - Run 'docker compose exec webserver createsuperuser' to create a user. # # For more extensive installation and update instructions, refer to the # documentation. diff --git a/docker/compose/docker-compose.sqlite.yml b/docker/compose/docker-compose.sqlite.yml index 1ca5fe86b..db63633fe 100644 --- a/docker/compose/docker-compose.sqlite.yml +++ b/docker/compose/docker-compose.sqlite.yml @@ -17,8 +17,9 @@ # - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env' # and '.env' into a folder. # - Run 'docker compose pull'. -# - Run 'docker compose run --rm webserver createsuperuser' to create a user. # - Run 'docker compose up -d'. +# - Wait until the webserver has completed startup +# - Run 'docker compose exec webserver createsuperuser' to create a user. # # For more extensive installation and update instructions, refer to the # documentation. diff --git a/docker/install_management_commands.sh b/docker/install_management_commands.sh index c7c65bfbb..17dae68a2 100755 --- a/docker/install_management_commands.sh +++ b/docker/install_management_commands.sh @@ -18,9 +18,10 @@ for command in decrypt_documents \ document_fuzzy_match \ manage_superuser \ convert_mariadb_uuid \ - prune_audit_logs; + prune_audit_logs \ + createsuperuser; do echo "installing $command..." sed "s/management_command/$command/g" management_script.sh >"$PWD/rootfs/usr/local/bin/$command" - chmod +x "$PWD/rootfs/usr/local/bin/$command" + chmod u=rwx,g=rwx,o=rx "$PWD/rootfs/usr/local/bin/$command" done diff --git a/docker/rootfs/usr/local/bin/createsuperuser b/docker/rootfs/usr/local/bin/createsuperuser new file mode 100755 index 000000000..f931952ba --- /dev/null +++ b/docker/rootfs/usr/local/bin/createsuperuser @@ -0,0 +1,14 @@ +#!/command/with-contenv /usr/bin/bash +# shellcheck shell=bash + +set -e + +cd "${PAPERLESS_SRC_DIR}" + +if [[ $(id -u) == 0 ]]; then + s6-setuidgid paperless python3 manage.py createsuperuser "$@" +elif [[ $(id -un) == "paperless" ]]; then + python3 manage.py createsuperuser "$@" +else + echo "Unknown user." +fi diff --git a/docs/setup.md b/docs/setup.md index 7bb71a761..d132d9033 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -131,24 +131,30 @@ account. The script essentially automatically performs the steps described in [D by default but you can change the image to pull from Docker Hub by changing the `image` line to `image: paperlessngx/paperless-ngx:latest`. -6. To be able to login, you will need a "superuser". To create it, +6. Run `docker compose up -d`. This will create and start the necessary containers. + +7. Wait for the containers to complete their startup. You can monitor the logs using Docker, such as: + + ```shell-session + docker logs --follow webserver + ``` + +8. To be able to login, you will need a "superuser". To create it, execute the following command: ```shell-session - docker compose run --rm webserver createsuperuser + docker compose exec webserver createsuperuser ``` or using docker exec from within the container: ```shell-session - python3 manage.py createsuperuser + createsuperuser ``` This will guide you through the superuser setup. -7. Run `docker compose up -d`. This will create and start the necessary containers. - -8. Congratulations! Your Paperless-ngx instance should now be accessible at `http://127.0.0.1:8000` +9. Congratulations! Your Paperless-ngx instance should now be accessible at `http://127.0.0.1:8000` (or similar, depending on your configuration). Use the superuser credentials you have created in the previous step to login.