What’s Paperless-ngx?
It’s a self-hosted, open-source, private solution for managing your documents.
It has a lot of useful features like OCR, indexing & organizing your documents, language recognizing, text searching, multi-user capabilities. You cand find more about it here.


Prerequisites:
- Linux VM / container (I’ve used a Proxmox LXC container)
- Docker
- Docker-compose
Steps for installation:
Create the linux container / VM with your favorite version of Linux. It’s recommended to use static IP addressing.
There isn’t a list of supported distributions, but it’s mentioned that it’s tested on Debian. I personally used Ubuntu 22.04, all went just fine.
Uninstall conflicting docker packages:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
Setup docker apt repository:
Add Docker’s official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Install docker & docker compose:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Create a new user and give it docker & sudo permissions:
adduser exampleuser
sudo usermod -aG docker exampleuser
sudo usermod -aG sudo exampleuser
Restart / reboot the linux machine:
Download and run the Paperless-ngx installation script. Don’t run it as root.
bash -c "$(curl --location --silent --show-error https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"
The script will automatically prompt you to enter some details, like:
- application user and password
- default folders
- type of database
- port for the application
After the installation is successful, the server front-end should be accessible on the port defined during the setup.

Official documentation: link