diff --git a/docs/changelog.rst b/docs/changelog.rst index c4443504f..d6ad73ce2 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,16 @@ Changelog ********* +paperless-ng 0.9.4 +################## + +* Front end: Clickable tags, correspondents and types allow quick filtering for related documents. +* Front end: Saved views are now editable. +* Front end: Preview documents directly in the browser. +* Fixes: + * A severe error when trying to use post consume scripts. +* The documentation now contains information about bare metal installs. + paperless-ng 0.9.3 ################## @@ -20,7 +30,7 @@ paperless-ng 0.9.3 aware of. * Issue with the automatic classifier not working with only one tag. * A couple issues with the search index being opened to eagerly. - + * Added lots of tests for various parts of the application. paperless-ng 0.9.2 diff --git a/docs/setup.rst b/docs/setup.rst index 4e2826dd6..9853ce2f1 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -208,9 +208,147 @@ Docker Route Bare Metal Route ================ -.. warning:: +Paperless runs on linux only. The following procedure has been tested on a minimal +installation of Debian/Buster, which is the current stable release at the time of +writing. Windows is not and will never be supported. - TBD. User docker for now. +1. Install dependencies. Paperless requires the following packages. + + * ``python3`` 3.6, 3.7, 3.8 (3.9 is untested). + * ``python3-pip``, optionally ``pipenv`` for package installation + * ``python3-dev`` + + * ``imagemagick`` >= 6 for PDF conversion + * ``unpaper`` for cleaning documents before OCR + * ``ghostscript`` + * ``optipng`` for optimising thumbnails + * ``tesseract-ocr`` >= 4.0.0 for OCR + * ``tesseract-ocr`` language packs (``tesseract-ocr-eng``, ``tesseract-ocr-deu``, etc) + * ``gnupg`` for handling encrypted documents + * ``libpoppler-cpp-dev`` for PDF to text conversion + * ``libmagic-dev`` for mime type detection + * ``libpq-dev`` for PostgreSQL + + You will also need ``build-essential``, ``python3-setuptools`` and ``python3-wheel`` + for installing some of the python dependencies. You can remove that + again after installation. + +2. Install ``redis`` >= 5.0 and configure it to start automatically. + +3. Optional. Install ``postgresql`` and configure a database, user and password for paperless. If you do not wish + to use PostgreSQL, SQLite is avialable as well. + +4. Get the release archive. If you pull the git repo as it is, you also have to compile the front end by yourself. + Extract the frontend to a place from where you wish to execute it, such as ``/opt/paperless``. + +5. Configure paperless. See :ref:`configuration` for details. Edit the included ``paperless.conf`` and adjust the + settings to your needs. Required settings for getting paperless running are: + + * ``PAPERLESS_REDIS`` should point to your redis server, such as redis://localhost:6379. + * ``PAPERLESS_DBHOST`` should be the hostname on which your PostgreSQL server is running. Do not configure this + to use SQLite instead. Also configure port, database name, user and password as necessary. + * ``PAPERLESS_CONSUMPTION_DIR`` should point to a folder which paperless should watch for documents. You might + want to have this somewhere else. Likewise, ``PAPERLESS_DATA_DIR`` and ``PAPERLESS_MEDIA_ROOT`` define where + paperless stores its data. If you like, you can point both to the same directory. + * ``PAPERLESS_SECRET_KEY`` should be a random sequence of characters. It's used for authentication. Failure + to do so allows third parties to forge authentication credentials. + + Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended + for everyone: + + * Set ``PAPERLESS_OCR_LANGUAGE`` to the language most of your documents are written in. + * Set ``PAPERLESS_TIME_ZONE`` to your local time zone. + +6. Setup permissions. Create a system users under which you wish to run paperless. Ensure that these directories exist + and that the user has write permissions to the following directories + + * ``/opt/paperless/media`` + * ``/opt/paperless/data`` + * ``/opt/paperless/consume`` + + Adjust as necessary if you configured different folders. + +7. Install python requirements. Paperless comes with both Pipfiles for ``pipenv`` as well as with a ``requirements.txt``. + Both will install exactly the same requirements. It is up to you if you wish to use a virtual environment or not. + +8. Go to ``/opt/paperless/src``, and execute the following commands: + + .. code:: bash + + # This collects static files from paperless and django. + python3 manage.py collectstatic --clear --no-input + + # This creates the database schema. + python3 manage.py migrate + + # This creates your first paperless user + python3 manage.py createsuperuser + +9. Optional: Test that paperless is working by executing + + .. code:: bash + + # This collects static files from paperless and django. + python3 manage.py runserver + + and pointing your browser to http://localhost:8000/. + + .. warning:: + + This is a development server which should not be used in + production. + + .. hint:: + + This will not start the consumer. Paperless does this in a + separate process. + +10. Setup systemd services to run paperless automatically. You may + use the service definition files included in the ``scripts`` folder + as a starting point. + + Paperless needs the ``webserver`` script to run the webserver, the + ``consumer`` script to watch the input folder, and the ``scheduler`` + script to run tasks such as email checking and document consumption. + + These services rely on redis and optionally the database server, but + don't need to be started in any particular order. The example files + depend on redis being started. If you use a database server, you should + add additinal dependencies. + + .. hint:: + + You may optionally set up your preferred web server to serve + paperless as a wsgi application directly instead of running the + ``webserver`` service. The module containing the wsgi application + is named ``paperless.wsgi``. + + .. caution:: + + The included scripts run a ``gunicorn`` standalone server, + which is fine for running paperless. It does support SSL, + however, the documentation of GUnicorn states that you should + use a proxy server in front of gunicorn instead. + +11. Optional: Install a samba server and make the consumption folder + available as a network share. + +12. Configure ImageMagick to allow processing of PDF documents. Most distributions have + this disabled by default, since PDF documents can contain malware. If + you don't do this, paperless will fall back to ghostscript for certain steps + such as thumbnail generation. + + Edit ``/etc/ImageMagick-6/policy.xml`` and adjust + + .. code:: + + + + to + + .. code:: + + Migration to paperless-ng ######################### diff --git a/scripts/make-release.sh b/scripts/make-release.sh index 3c3892aed..0a7bc7a9b 100755 --- a/scripts/make-release.sh +++ b/scripts/make-release.sh @@ -42,6 +42,7 @@ fi mkdir "$PAPERLESS_DIST" mkdir "$PAPERLESS_DIST_APP" mkdir "$PAPERLESS_DIST_APP/docker" +mkdir "$PAPERLESS_DIST_APP/scripts" mkdir "$PAPERLESS_DIST_DOCKERFILES" # setup dependencies. @@ -104,6 +105,11 @@ cp "$PAPERLESS_ROOT/docker/gunicorn.conf.py" "$PAPERLESS_DIST_APP/docker/" cp "$PAPERLESS_ROOT/docker/imagemagick-policy.xml" "$PAPERLESS_DIST_APP/docker/" cp "$PAPERLESS_ROOT/docker/supervisord.conf" "$PAPERLESS_DIST_APP/docker/" +# auxiliary files for bare metal installs +cp "$PAPERLESS_ROOT/scripts/paperless-webserver.service" "$PAPERLESS_DIST_APP/scripts/" +cp "$PAPERLESS_ROOT/scripts/paperless-consumer.service" "$PAPERLESS_DIST_APP/scripts/" +cp "$PAPERLESS_ROOT/scripts/paperless-scheduler.service" "$PAPERLESS_DIST_APP/scripts/" + # try to make the docker build. cd "$PAPERLESS_DIST_APP" diff --git a/scripts/paperless-consumer.service b/scripts/paperless-consumer.service index 79a27d3ce..04512b719 100644 --- a/scripts/paperless-consumer.service +++ b/scripts/paperless-consumer.service @@ -1,10 +1,12 @@ [Unit] Description=Paperless consumer +Requires=redis.service [Service] User=paperless Group=paperless -ExecStart=/home/paperless/project/virtualenv/bin/python /home/paperless/project/src/manage.py document_consumer +WorkingDirectory=/opt/paperless/src +ExecStart=python3 manage.py document_consumer [Install] WantedBy=multi-user.target diff --git a/scripts/paperless-scheduler.service b/scripts/paperless-scheduler.service new file mode 100644 index 000000000..c565d8af4 --- /dev/null +++ b/scripts/paperless-scheduler.service @@ -0,0 +1,12 @@ +[Unit] +Description=Paperless consumer +Requires=redis.service + +[Service] +User=paperless +Group=paperless +WorkingDirectory=/opt/paperless/src +ExecStart=python3 manage.py qcluster + +[Install] +WantedBy=multi-user.target diff --git a/scripts/paperless-webserver.service b/scripts/paperless-webserver.service index 8ff746be2..a43110be2 100644 --- a/scripts/paperless-webserver.service +++ b/scripts/paperless-webserver.service @@ -2,11 +2,13 @@ Description=Paperless webserver After=network.target Wants=network.target +Requires=redis.service [Service] User=paperless Group=paperless -ExecStart=/home/paperless/project/virtualenv/bin/gunicorn --pythonpath=/home/paperless/project/src paperless.wsgi -w 2 +WorkingDirectory=/opt/paperless/src +ExecStart=/opt/paperless/.local/bin/gunicorn paperless.wsgi -w 2 -b 0.0.0.0:8000 [Install] WantedBy=multi-user.target