How to install Paperless-ngx on Ubuntu

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