
Spis treści
Cześć!
Dziś pokażę Ci, jak zainstalować Paperless-ngx na serwerze Synology, wykorzystując konteneryzację w Dockerze. Całą instalację przeprowadzimy przy użyciu Docker Compose za pośrednictwem narzędzia Portainer. Następnie skonfigurujemy odwrotne proxy przy użyciu już zainstalowanego Nginx Proxy Manager. Abyśmy uzyskać dostęp do Traccara po nazwie domeny w sieci lokalnej, skonfigurujemy przepisywanie DNS przy użyciu AdGuard Home.
Wstęp do naszego projektu
Czym jest Paperless-ngx?
Paperless-ngx jest nowoczesnym rozwiązaniem open source, przeznaczonym do bezpapierowego zarządzania dokumentami. Jest to fork projektu Paperless, który został stworzony z myślą o skanowaniu, tagowaniu, przeszukiwaniu i zarządzaniu cyfrowymi kopiami dokumentów papierowych w celu zminimalizowania potrzeby przechowywania fizycznych kopii. Paperless-ngx oferuje szereg ulepszeń w stosunku do oryginalnego projektu, w tym lepsze wsparcie dla interfejsu użytkownika, bardziej zaawansowane opcje przeszukiwania, automatyczne tagowanie dokumentów na podstawie ich zawartości oraz wsparcie dla OCR (rozpoznawanie znaków optyczne) w wielu językach, co pozwala na łatwiejsze zarządzanie i wyszukiwanie dokumentów w bazie danych.
Projekt ten jest szczególnie przydatny dla osób i firm dążących do zredukowania ilości papieru w swojej pracy i życiu codziennym, oferując prosty i wydajny sposób na organizację cyfrowych dokumentów.
Do czego służy Docker Compose?
Docker Compose stanowi narzędzie umożliwiające definicję oraz zarządzanie wieloma kontenerami Docker jednocześnie. Poprzez opisanie konfiguracji aplikacji, usług i zależności w pliku YAML, Docker Compose ułatwia jednolite tworzenie, uruchamianie i skalowanie aplikacji złożonych z wielu kontenerów. To narzędzie upraszcza proces konfiguracji środowiska deweloperskiego, testowego lub produkcyjnego, gwarantując jednocześnie spójność w zarządzaniu kontenerami i ich parametrami. Dzięki Docker Compose możliwe jest zdefiniowanie kompleksowej infrastruktury aplikacji w jednym pliku, co z kolei ułatwia współpracę i replikację środowisk w różnych scenariuszach.
Przygotowanie
W celu przygotowania poradnika, przyjmiemy ustaloną nazwę domeny oraz określone nazwy konfiguracyjne, przedstawione poniżej. Dla dostosowania konfiguracji do własnych potrzeb, należy zastosować ustawienia według indywidualnych wymagań.
- Pełna nazwa domeny (FQDN) Synology DSM: https://dsm.xyz.com,
- Pełna nazwa domeny (FQDN) Paperless-ngx: https://paperless.xyz.com,
- Zainstalowany na Synology poprzez Docker: Portainer, AdGuard Home,
- Zainstalowany na Synology poprzez Centrum pakietów: Container Manager,
- Na serwerze DHCP routera, wskazany adres IP serwera DNS (AdGuard Home) zainstalowanego na Synology.
Nginx Proxy Manager (opcjonalnie)
Na moim Synology skonfigurowałem reverse proxy przy użyciu Nginx Proxy Manager, co umożliwia dostęp do panelu Paperless-ngx za pomocą adresu URL (https://paperless.xyz.com) zamiast standardowego adresu IP. Jest to rozwiązanie zwiększające wygodę zarządzania dokumentami, oferując łatwiejszy do zapamiętania i bardziej intuicyjny adres dostępny w sieci LAN. Jesteś zainteresowany tym jak to zrobić? Zajrzyj tutaj.
Dodatkowo, lokalne przekierowanie DNS realizowane jest przez serwer DNS AdGuard, również działający na serwerze Synology w wersji kontenerowej.
Krok 1 – Konfiguracja w Synology DSM
Jeśli korzystasz z systemu jednokrotnego logowania Authentik, możesz ułatwić sobie proces logowania, integrując system operacyjny od Synology DSM z Authentikiem. Instrukcje dotyczące integracji znajdziesz w dedykowanym poradniku.
- Zaloguj się na swoim serwerze plików Synology i uruchom aplikację File Station.
- Następnie, przejdź do wcześniej utworzonego folderu współdzielonego o nazwie docker. Wewnątrz tego folderu utwórz folder paperless-ngx.
- Kolejnym krokiem jest utworzenie podfolderów wewnątrz folderu paperless-ngx: data, media, export, consume, redis, db.

HDD vs. SSD
Umieszczenie folderu z dokumentami Paperless-ngx (media) oraz bazy danych (db, redis) na osobnym woluminie opartym o dysk SSD w urządzeniu Synology może znacząco przyspieszyć działanie systemu. Dostęp do plików na dyskach talerzowych jest wolniejszy, co może opóźniać procesy takie jak OCR czy wyszukiwanie dokumentów. Przeniesienie folderu konsumpcji, bazy danych, a także całego kontenera Docker na SSD zapewni szybszy dostęp do danych i poprawi ogólną wydajność aplikacji.
Krok 2 – Konfiguracja Docker Compose w Portainerze
Zaloguj się do Portainera, aby rozpocząć proces tworzenia nowego stosu (Stack), który będzie potrzebny do utworzenia kodu Docker Compose.
- Zaloguj się na swoje konto i przejdź do interfejsu administracyjnego Portainera.
- Jeżeli korzystasz z systemu jednokrotnego logowania Authentik, możesz ułatwić sobie proces logowania, integrując Portainer z Authentikiem. Instrukcje dotyczące integracji znajdziesz w dedykowanym poradniku.
- Wybierz swoje środowisko (eng: Environments) w którym będziesz edytować konfigurację utworzonego Docker Compose. Następnie przejdź do Stacks.
- Z prawego górnego rogu (pod twoim loginem) wybierz Add stack.
- Wypełnij tworzenie pliku Docker Compose przy użyciu następujących wartości:
- Name: paperless-ngx
- Build method: Web editor
- Web editor: skopiuj zawartość opisaną poniżej i wklej
version: "3.6"
services:
broker:
image: redis
container_name: paperless_redis
hostname: paperless-redis
restart: always
sysctls:
- net.core.somaxconn=511
networks:
- paperless_network
- grafana_network
volumes:
- /volume2/docker/paperless-ngx/redis:/data
db:
image: postgres:13
container_name: paperless_postgres
hostname: paperless-postgres
restart: always
networks:
- paperless_network
- grafana_network
volumes:
- /volume2/docker/paperless-ngx/db:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:2.5.0
restart: always
container_name: paperless_server
healthcheck:
test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
networks:
- paperless_network
depends_on:
- db
- broker
- gotenberg
- tika
ports:
- 8777:8000
volumes:
- /volume2/docker/paperless-ngx/data:/usr/src/paperless/data
- /volume2/docker/paperless-ngx/media:/usr/src/paperless/media
- /volume2/docker/paperless-ngx/export:/usr/src/paperless/export
- /volume2/docker/paperless-ngx/consume:/usr/src/paperless/consume
environment:
PAPERLESS_SECRET_KEY: "ASDFGHJKLZXCVBNM1234567890qwertyuiop"
PAPERLESS_REDIS: redis://paperless-redis:6379
PAPERLESS_DBHOST: paperless-postgres
USERMAP_UID: 1026
USERMAP_GID: 100
PAPERLESS_TIME_ZONE: Europe/Warsaw
PAPERLESS_ADMIN_USER: jkowalski
PAPERLESS_ADMIN_PASSWORD: jkowalskiwarszawa
PAPERLESS_ADMIN_MAIL: [email protected]
PAPERLESS_URL: "https://paperless.xyz.com"
PAPERLESS_ALLOWED_HOSTS: "paperless.xyz.com"
PAPERLESS_CSRF_TRUSTED_ORIGINS: "https://paperless.xyz.com"
PAPERLESS_TRUSTED_PROXIES: IP-ADDRESS-SYNOLOGY
PAPERLESS_FILENAME_FORMAT: "{created_year}/{correspondent}/{created} {title}"
PAPERLESS_ENABLE_UPDATE_CHECK: enable
PAPERLESS_OCR_LANGUAGES: pol
PAPERLESS_OCR_LANGUAGE: pol+eng
PAPERLESS_OPTIMIZE_THUMBNAILS: "false"
PAPERLESS_TASK_WORKERS: 2
PAPERLESS_THREADS_PER_WORKER: 2
PAPERLESS_EMAIL_TASK_CRON: "disable"
networks:
paperless_network:
name: paperless_network
ipam:
config:
- subnet: 192.168.193.0/24
Parametry
Podczas uruchamiania możemy określić parametry konfigurujące kontenery (takie jak te zawarte powyżej). Parametry te są rozdzielane dwukropkiem i wskazują kolejno <zewnętrzny>:<wewnętrzny>. Na przykład, -p 8080:80 sprawi, że port 80 wewnątrz kontenera będzie dostępny z zewnątrz kontenera, z IP hosta, na porcie 8080. Wykaz wszystkich parametrów do Paperlessa jest dostępny pod tym linkiem. Poniżej opiszę tylko te zawarte w kodzie:
- PAPERLESS_SECRET_KEY: Token sesji. Jeśli udostępniasz Paperless w Internecie, musisz to zmienić, ponieważ domyślny sekret jest dobrze znany.
- PAPERLESS_REDIS: Adres serwera Redis używanego dla zadań w tle i buforowania.
- PAPERLESS_DBHOST: Host bazy danych, gdzie Paperless przechowuje swoje dane.
- USERMAP_UID i USERMAP_GID: ID użytkownika i grupy dla procesów w kontenerze.
- PAPERLESS_TIME_ZONE: Zmień wartość dla strefy czasowej (TZ), wybierając odpowiednią strefę czasową z tej listy.
- PAPERLESS_ADMIN_USER, PAPERLESS_ADMIN_PASSWORD i PAPERLESS_ADMIN_MAIL: Dane logowania administratora systemu.
- PAPERLESS_URL: URL do interfejsu użytkownika Paperless-ngx.
- PAPERLESS_ALLOWED_HOSTS: Lista hostów/domen dozwolonych do łączenia się z aplikacją.
- PAPERLESS_CSRF_TRUSTED_ORIGINS: Lista zaufanych źródeł dla żądań typu CSRF. Jest to ważne dla bezpieczeństwa aplikacji, szczególnie gdy jest ona dostępna przez internet. Dzięki tej zmiennej można zdefiniować, z jakich źródeł aplikacja powinna akceptować niebezpieczne żądania, np. POST.
- PAPERLESS_FILENAME_FORMAT: Format nazw plików dla zapisywanych dokumentów.
- PAPERLESS_ENABLE_UPDATE_CHECK: Włączenie sprawdzenia dostępności aktualizacji.
- PAPERLESS_OCR_LANGUAGES: Dodatkowe języki używane do OCR dokumentów
- PAPERLESS_OCR_LANGUAGE: Główny język używany do OCR dokumentów.
- PAPERLESS_OPTIMIZE_THUMBNAILS: Optymalizacja miniatur dokumentów.
- PAPERLESS_TASK_WORDKERS i PAPERLESS_THREADS_PER_WORKER: Konfiguracja workerów i wątków dla zadań w tle.
- PAPERLESS_EMAIL_TASK_CRON: Harmonogram zadań e-mailowych.
PUID i PGID
Gdy używasz woluminów (parametru -v), mogą wystąpić kwestie związane z uprawnieniami pomiędzy systemem operacyjnym gospodarza a kontenerem. Aby obejść te problemy, dajemy możliwość wyboru identyfikatora użytkownika (PUID) oraz grupy użytkownika (PGID).
- Przed wklejeniem powyższego kodu w obszar edytora, zmień wartości numerów dla PUID i PGID na swoje własne wartości PUID i PGID. Wartości PUID i PGID odnoszą się do danego konta istniejącego na Synology. Musisz wpisać swoje własne wartości.
- Aby sprawdzić swoje wartości PUID i PGID na systemie Linux, możesz użyć terminala. Wpisz komendę id nazwa_użytkownika (zastępując nazwa_użytkownika własną nazwą użytkownika na komputerze). Wynik tej komendy pokaże Twoje identyfikatory PUID (UID) i PGID (GID). Te wartości są niezbędne do prawidłowej konfiguracji kontenerów Docker, gdyż pozwalają na dopasowanie uprawnień plików i katalogów w kontenerze do Twojego systemu.
id jkowalski
uid=1026(jkowalski) gid=100(users) groups=100(users),101(administrators)
- Kliknij przycisk Deploy the stack, a następnie poczekaj, dopóki Portainer nie pobierze zawartości i nie utworzy kontenera.
- Gdy proces przebiegnie pomyślnie, w prawym górnym rogu ekranu pojawi się komunikat Success: Stack successfully deployed. Wówczas, w liście kontenerów ukaże się nowo utworzony stos kontenerów.
- Zaleca się odczekanie około 5 do 10 minut, aby instalacja została w pełni ukończona.
Krok 3 – Konfiguracja w Nginx Proxy Manager
Web access po HTTPS (Certyfikat SSL)
Jeżeli posiadasz wgrany certyfikat SSL dla swojej domeny obsługujący subdomeny (certyfikat typu Wildcard):
- Zaloguj się do konta administratora w Nginx Proxy Manager.
- Kliknij w Hosts, a następnie z menu wybierz Proxy Hosts,
- W prawym górnym rogu kliknij Add Proxy Hosts.
- Uzupełnij parametry następującymi wartościami:
- Domain Names: paperless.xyz.com
- Scheme: http
- Forward Hostname/IP: IP-ADRES-SYNOLOGY
- Forward Port: 8777
- W oknie Edit Proxy Host na zakładce Details zaznacz:
- Cache Assets (opcjonalnie),
- Websockets Support,
- oraz Block Common Exploits.
- Następnie przejdź do zakładki SSL, wybierz swój certyfikat SSL i zaznacz wszystkie dostępne opcje dodatkowe:
- Force SSL,
- HTTP/2 Support,
- HSTS Enabled,
- oraz HSTS Subdomains.
Krok 4 – Konfiguracja w AdGuard Home
Aby uzyskać dostęp z naszego komputera do Paperlessa poprzez zdefiniowaną w Proxy Managerze nazwę domeny (np. paperless.xyz.com) w naszej sieci lokalnej, konieczne jest skonfigurowanie serwera DNS, aby wskazywał na lokalizację tej strony.
- Zaloguj się do panelu administracyjnego AdGuard Home.
- Przejdź do zakładki Filtry, a następnie z menu wybierz opcję Przepisywanie DNS.
- Kliknij Dodaj przepisywanie DNS, a następnie wypełnij pola z następującymi wartościami:
- Wpisz nazwę domeny, który chcesz przepisać: paperless.xyz.com
- Adres IP: IP-ADRES-SYNOLOGY
- Gotowe! Poczekaj chwilę, aż konfiguracja zostanie zapisana. Po zakończeniu procesu, dostęp do serwera będzie możliwy pod adresem paperless.xyz.com. 🚀
Krok 5 – Zaloguj sie do Paperlessa
Końcowym etapem naszej instalacji jest zalogowanie się na prawach administratora do wdrożonej przed chwilą aplikacji.
- Otwórz interfejs webowy Paperless-ngx: Po pomyślnej instalacji i uruchomieniu kontenera, otwórz przeglądarkę internetową i wpisz https://paperless.xyz.com,

- Następnie na ekranie logowania wprowadź nazwę użytkownika, a w polu hasła wpisz to, które ustawiłeś podczas instalacji aplikacji w Docker Compose, znajdującej się w sekcji:
PAPERLESS_ADMIN_USER: jkowalski
PAPERLESS_ADMIN_PASSWORD: jkowalskiwarszawa
Dodatkowe źródła i Informacje
Skonfiguruj Single Sign-On (SSO) między Authentik a Paperless-ngx za pomocą OpenID Connect, aby zwiększyć wygodę logowania i bezpieczeństwo dostępu do Twojego systemu zarządzania dokumentami. Poznaj kroki potrzebne do integracji tych dwóch potężnych narzędzi i ciesz się płynniejszym procesem uwierzytelniania.
👉 Dowiedz się więcej o procesie i ułatw sobie zarządzanie logowaniem.
W celu dalszego zgłębienia tematu i uzyskania szczegółowych informacji, polecam sprawdzenie poniższych linków. Są one wartościowymi źródłami, które zostały wykorzystane podczas opracowywania tego poradnika:
- https://docs.paperless-ngx.com – Paperless-ngx documentation,
- https://passcheck.anhur.xyz – Generator haseł.
Przeczytaj także
- Paperless: Jak umożliwić wgranie podpisanych cyfrowo plików PDF / Odkryj, jak łatwo wgrywać podpisane cyfrowo pliki PDF do Paperless-ngx, zapewniając wygodę zarządzania dokumentami.
- Jak skonfigurować wkładkę Leox GPON ONT na routerze Mikrotik / Poradnik krok po kroku jak skonfigurować wkładkę Leox LXT-010S-H GPON ONT na routerze Mikrotik RB5009, zamiast modułu ONT od Orange.
- UniFi Network Application: Podłączenie Access Point z innej sieci / Odkryj jak podłączyć urządzenie od Ubiquiti UniFi z innej sieci do Network Application – na przykładzie tunelu IPSec w Mikrotiku.
- UniFi Controller w Dockerze: Migracja do UniFi Network Application / UniFi Controller: Odkryj krok po kroku, jak skutecznie przeprowadzić migrację do Network Application, wykorzystując Docker Compose.
- Home Assistant: Instalacja oświetlenia lustra na ESPHome / Skonfiguruj proste oświetlenie lustra z ESPHome w Home Assistant. Odkryj prostą integrację i steruj światłem z łatwością.
- ADS-B: Instalacja i konfiguracja odbiornika na Raspberry Pi / Odkryj tajniki instalacji i konfiguracji własnej anteny ADS-B na Raspberry Pi. Rozwijaj umiejętności i śledź samoloty w czasie rzeczywistym.
- Traccar: Przewodnik instalacji na Synology w Dockerze / Przewodnik krok po kroku: Instalacja Traccar na Synology za pomocą Docker. Skuteczne śledzenie pojazdów na własnym serwerze.
Dodaj komentarz