Naciśnij ESC, aby zamknąć

Paperless: Przewodnik instalacji na Synology w Docker Compose

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?

Ikona: Paperless-ngxPaperless-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, Logo

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: PortainerAdGuard 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.
Synology DSM, Folder paperless-ngx

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.

Przewodnik instalacji Traccar na Synology w Dockerze

  • Z prawego górnego rogu (pod twoim loginem) wybierz Add stack.

Przewodnik instalacji Traccar na Synology w Dockerze

  • 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,

Pulpit Nginx Proxy Manager

  • W prawym górnym rogu kliknij Add Proxy Hosts.

Add Proxy Host w Nginx Proxy Manager

  • 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.

Edit Proxy Host w Nginx Proxy Manager

  • 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.

Edit Proxy Host, SSL w Nginx Proxy Manager

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.

AdGuard Home Pulpit

  • Zaloguj się do panelu administracyjnego AdGuard Home.
  • Przejdź do zakładki Filtry, a następnie z menu wybierz opcję Przepisywanie DNS.

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,
Paperless-ngx: Logowanie do aplikacji
  • 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:

Przeczytaj także

Filip Chochół

Filip Chochol runs two blogs: personal “chochol.io” and together with his girlfriend “Warsaw Travelers” about travel. He specializes in IT resource management and technical support, and has been active in the field of cyber security awareness for almost two years. A proponent of open-source technologies, he previously worked in the film and television industry in the camera division (2013-2021). After hours, he develops interests in smart homes and networking.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *


This site uses Akismet to reduce spam. Learn how your comment data is processed.