Paperless-ngx
| Description / name | Input element |
|---|---|
| Container Registry | |
| Container Configuration Root Path | |
| Timezone | |
| User ID | |
| Group ID | |
| Paperless-ngx Host Port | |
| Paperless-ngx /config Path |
A community-supported open-source document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.
| Port | 8000 |
| Registry | ghcr.io/daemonless/paperless-ngx |
| Daemonless | daemonless/paperless-ngx |
| Source | paperless-ngx/paperless-ngx |
| Website | paperless-ngx.org |
Version Tags
| Tag | Description | Best For |
|---|---|---|
latest |
Built from latest upstream release and latest FreeBSD packages. | Most users — recommended. |
Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions, including the security model for host vs. container privileges.
Deployment
Save as compose.yaml, then run podman-compose up -d.
Save as run.sh, then run sh run.sh.
Save as paperless-ngx-deploy.yaml, then run ansible-playbook paperless-ngx-deploy.yaml.
Warning
Exposing ports in AppJail means that your service can be reached from remote hosts. If that is not your intention, do not expose the ports and communicate with the service using the jail's IPv4 address or hostname assigned by the virtual network.
Save the files above, then run appjail-director up.
Save the files above, then run sh run.sh.
Experimental
Bastille's OCI support is experimental. It requires buildah and shares the host network stack (inherit). Mount volumes with --volume HOST JAIL; without it, image-declared volumes are stored under ${bastille_volumesdir}/${jail}.
Save as bastille-compose.yml, then run bastille up.
Access at: http://localhost:8000
Interactive Configuration
Parameters
Environment Variables
| Variable | Default | Description |
|---|---|---|
PUID |
1000 |
User ID for the application process |
PGID |
1000 |
Group ID for the application process |
TZ |
${TZ:-UTC} |
Timezone for the container |
PAPERLESS_REDIS |
redis://localhost:6379 |
|
PAPERLESS_ADMIN_USER |
${PAPERLESS_ADMIN_USER} |
Set name of the admin user on first start |
PAPERLESS_ADMIN_PASSWORD |
${PAPERLESS_ADMIN_PASSWORD} |
Set password of the admin user on first start |
CONFIG_LOCATION |
`` | Path to store configuration, database and (by default) documents |
DOCUMENTS_LOCATION |
`` | Optional separate document store (originals, archive, thumbnails), e.g. its own ZFS filesystem |
REDIS_DATA_LOCATION |
`` | Path to store the redis data |
Volumes
| Path | Description |
|---|---|
/config |
Configuration directory |
Ports
| Port | Protocol | Description |
|---|---|---|
8000 |
TCP | Web UI |
5555 |
TCP | Flower monitoring UI available at '/flower', optional |
Upgrade to v3
Pre-Requisites
Upgrading to Paperless-ngx v3 can only be performed from version 2.20.15. If you are running an older version, please upgrade to v2.20.15 before proceeding with the v3 upgrade.
Breaking Changes
Paperless-ngx v3 introduced some changes to the configuration. Read the official v3 Migration Guide to make sure you adapt your configuration so that it works with v3.
Database migration
The DB migration will run automatically when the container starts.
First time setup
To configure the admin user with a password during the first startup, you can define some additional environment variables in your container file:
These 2 variables can be removed after the initial setup was done and paperless won't change an existing admin user's password when these vars are defined.Configuration
Configuration is best done using a .env file next to your compose.yaml.
If no .env file is in compose.yaml, paperless-ngx will use default values.
Documents directory
If you want to keep your documents in a separate ZFS filesystem, you can mount it at /config/media/documents.
This directoru should contain these 3 directories:
Implementation Details
- Architectures: amd64
- User:
bsd(UID/GID set via PUID/PGID). Defaults to1000:1000. - Base: Built on
ghcr.io/daemonless/base(FreeBSD 15.1).
Need help? Join our Discord community.