OnlyOffice + Nextcloud: własny serwer dokumentów na Proxmox

OnlyOffice + Nextcloud: własny serwer dokumentów na Proxmox

Nextcloud ma wbudowany edytor tekstu, ale obsługa formatów MS Office (.docx, .xlsx, .pptx) pozostawia wiele do życzenia — brak zachowania formatowania, brak współpracy w czasie rzeczywistym, brak pełnej kompatybilności ze stylami. OnlyOffice Docs rozwiązuje wszystkie te problemy. Community Edition jest darmowa, obsługuje 20 jednoczesnych połączeń i można ją zainstalować na własnym serwerze — dane nigdy nie opuszczają infrastruktury.

W tym wpisie opisuję instalację OnlyOffice Docs w nowym LXC na Proxmox, wystawienie jej przez Nginx Proxy Manager i integrację z istniejącym Nextcloud.

Architektura

Diagram architektury OnlyOffice + Nextcloud na Proxmox

Trzy elementy komunikują się ze sobą:

  • LXC z Nextcloud — serwer plików, tu działa wtyczka ONLYOFFICE
  • LXC z OnlyOffice — serwer dokumentów w Dockerze, dostępny pod wewnętrznym IP
  • Nginx Proxy Manager — wystawia obie usługi na zewnątrz przez HTTPS, obsługuje SSL

Nextcloud komunikuje się z OnlyOffice na dwa sposoby: przeglądarka użytkownika łączy się przez publiczną domenę (https://TWOJA_DOMENA_ONLYOFFICE), a serwer Nextcloud pobiera pliki przez sieć wewnętrzną (http://TWOJE_IP_LXC).

Wymagania

  • Działający Nextcloud dostępny przez NPM z SSL
  • Nginx Proxy Manager z wolnym wpisem proxy
  • Nowy LXC: Debian 13 Trixie, 4 vCPU, 6 GB RAM, 20 GB dysk
  • Dostęp SSH do LXC lub konsola Proxmox
⚠️ Uwaga: OnlyOffice Docs Community Edition obsługuje maksymalnie 20 jednoczesnych połączeń edycji. Dla większych organizacji wymagana jest płatna licencja.

Krok 1: Utwórz LXC na Proxmox

W interfejsie Proxmox utwórz nowy kontener:

  • Template: Debian 13 (Trixie)
  • CPU: 4 vCPU
  • RAM: 6144 MB (6 GB)
  • Dysk: 20 GB
  • Sieć: bridge vmbr0, statyczne IP (TWOJE_IP_LXC)
💡 Tip: OnlyOffice jest zasobożerne — nie schodzaj poniżej 4 GB RAM. Przy 2 GB serwer uruchamia się, ale crashuje przy otwieraniu większych plików.

Wejdź do kontenera przez SSH lub konsolę Proxmox i zaktualizuj system:

apt update && apt upgrade -y

Krok 2: Zainstaluj Docker na Debian 13 Trixie

Skrypt get.docker.com może nie obsługiwać Trixie — bezpieczniej dodać repo ręcznie:

apt install -y curl ca-certificates gnupg2

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg \
  -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/debian trixie stable" \
  > /etc/apt/sources.list.d/docker.list

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Sprawdź instalację:

docker --version
docker compose version

Krok 3: Przygotuj docker-compose.yml

Utwórz katalog roboczy i plik compose:

mkdir -p /opt/onlyoffice
cd /opt/onlyoffice

Wygeneruj JWT secret — jest wymagany od wersji 7.2, bez niego każde żądanie jest odrzucane:

openssl rand -hex 32

Zapisz wygenerowany ciąg — wkleisz go w dwóch miejscach: plik compose i ustawienia Nextcloud.

Utwórz /opt/onlyoffice/docker-compose.yml:

version: '3'

services:
  onlyoffice:
    image: onlyoffice/documentserver:latest
    container_name: onlyoffice
    restart: unless-stopped
    ports:
      - "80:80"
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=ZMIEN_NA_SWOJ_SECRET
      - JWT_HEADER=AuthorizationJwt
    volumes:
      - onlyoffice_data:/var/www/onlyoffice/Data
      - onlyoffice_log:/var/log/onlyoffice
      - onlyoffice_db:/var/lib/postgresql
      - onlyoffice_rabbitmq:/var/lib/rabbitmq
      - onlyoffice_redis:/var/lib/redis
      - onlyoffice_fonts:/usr/share/fonts
    shm_size: 512m

volumes:
  onlyoffice_data:
  onlyoffice_log:
  onlyoffice_db:
  onlyoffice_rabbitmq:
  onlyoffice_redis:
  onlyoffice_fonts:

Kilka rzeczy wartych uwagi:

  • JWT_HEADER=AuthorizationJwtmusi być identyczny w compose i w ustawieniach Nextcloud. Jakakolwiek różnica (wielkość liter, spacje) powoduje błąd Download without jwt.
  • shm_size: 512m — OnlyOffice intensywnie używa pamięci współdzielonej. Bez tego ustawienia kontener crashuje przy otwieraniu plików powyżej kilku MB.
  • Osobne volumes dla PostgreSQL, RabbitMQ i Redis — dane dokumentów przetrwają restart i aktualizację kontenera.

Uruchom:

docker compose up -d

Poczekaj minutę na pierwsze uruchomienie, potem sprawdź logi:

docker compose logs -f onlyoffice

Powinno zakończyć się linią ONLYOFFICE Document Server is ready. Pod adresem http://TWOJE_IP_LXC powinna być widoczna strona powitalna OnlyOffice.

Krok 4: Nginx Proxy Manager — wystawienie przez HTTPS

W panelu NPM dodaj nowy Proxy Host:

  • Domain Names: TWOJA_DOMENA_ONLYOFFICE
  • Scheme: http
  • Forward Hostname/IP: TWOJE_IP_LXC
  • Forward Port: 80
  • Websockets Support: ✅ włączone — wymagane, bez tego edycja dokumentów nie działa

W zakładce SSL wybierz Let's Encrypt i zaznacz Force SSL.

⚠️ Uwaga: WebSockets to nie opcja — to wymóg. OnlyOffice komunikuje się z przeglądarką przez WebSocket w czasie rzeczywistym. Bez tej opcji otwieranie dokumentów kończy się błędem.

Krok 5: Konfiguracja wtyczki w Nextcloud

Zaloguj się do Nextcloud jako administrator i przejdź do Settings → Administration → ONLYOFFICE.

Wypełnij formularz:

Pole Wartość
Adres ONLYOFFICE Docs https://TWOJA_DOMENA_ONLYOFFICE
Adres dla zapytań wewnętrznych z serwera http://TWOJE_IP_LXC
Adres serwera dla zapytań z ONLYOFFICE https://TWOJA_DOMENA_NEXTCLOUD
Nagłówek autoryzacji AuthorizationJwt
Klucz zabezpieczeń (ten sam JWT secret z compose)

Drugie pole ("adres dla zapytań wewnętrznych") jest krytyczne. To tutaj serwer Nextcloud pobiera pliki, żeby przekazać je OnlyOffice do konwersji. Bez tego pola OnlyOffice nie wie pod jaki adres pójść — patrz sekcja pułapek.

Kliknij Save — Nextcloud sprawdzi połączenie i powinien wyświetlić zielony tick.

Krok 6: Watchtower — automatyczne aktualizacje

OnlyOffice regularnie wydaje nowe wersje. Watchtower sprawdza codziennie czy jest nowszy obraz i aktualizuje kontener:

Utwórz /opt/onlyoffice/watchtower-compose.yml:

version: '3'

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower-onlyoffice
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --cleanup --interval 86400 onlyoffice
docker compose -f watchtower-compose.yml up -d

Parametr --cleanup usuwa stare obrazy po aktualizacji, --interval 86400 to 24 godziny.

Pułapki które napotkałem

1. "Download without jwt"

Objaw: Nextcloud wyświetla błąd Download without jwt przy próbie otwarcia dokumentu.

Przyczyna: JWT secret lub nagłówek nie zgadzał się między docker-compose.yml a ustawieniami Nextcloud. Nawet jedna literówka powoduje ten błąd.

Rozwiązanie: Porównaj JWT_SECRET i JWT_HEADER w obu miejscach. Wartości muszą być identyczne, łącznie z wielkością liter. Sprawdź też czy nie ma spacji na końcu.

2. "Error while downloading the document file to be converted"

Objaw: Dokument nie otwiera się, w logach OnlyOffice pojawia się błąd pobierania pliku.

Przyczyna: OnlyOffice nie wiedział pod jaki adres pójść po plik. Pole "Adres serwera dla zapytań z ONLYOFFICE" w ustawieniach Nextcloud było puste lub wskazywało na domenę publiczną niedostępną z sieci LXC.

Rozwiązanie: Wypełnij pole "Adres dla zapytań wewnętrznych z serwera" wewnętrznym adresem Nextcloud (http://IP_NEXTCLOUD) lub domeną dostępną wewnątrz sieci. W moim przypadku wystarczyło wpisać adres publiczny — serwer Nextcloud siebie dosięga przez domenę.

3. HTTP/2 PROTOCOL_ERROR

Objaw: Komunikacja między NPM a Nextcloud się zrywa, w konsoli przeglądarki PROTOCOL_ERROR, edycja dokumentów nie działa.

Przyczyna: HTTP/2 ma problemy z nagłówkami upgrade podczas proxowania przez NPM.

Rozwiązanie: W NPM, w ustawieniach Proxy Host dla Nextcloud (nie OnlyOffice), przejdź do zakładki Advanced i dodaj:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "";

Po zapisaniu komunikacja przechodzi przez HTTP/1.1 i problem znika.

Weryfikacja

Sprawdź czy OnlyOffice jest dostępny publicznie:

curl -I https://TWOJA_DOMENA_ONLYOFFICE

Powinien odpowiedzieć HTTP 200. Strona powitalna to znak że serwer działa — ale nie oznacza jeszcze że JWT jest skonfigurowane poprawnie.

Sprawdź stan kontenera:

docker ps
docker compose logs onlyoffice | tail -20

W Nextcloud wejdź w plik .docx lub .xlsx — powinien otworzyć się edytor OnlyOffice wbudowany w interfejs.

Zabezpieczenia — stan końcowy

Po poprawnej instalacji:

  • ✅ JWT włączony — każde żądanie do API wymaga podpisanego tokena
  • ✅ Własny JWT secret — nie korzystasz z domyślnego, który jest znany publicznie
  • ✅ Test example nieaktywny domyślnie (/example/ zwraca "Test example is not running")
  • ✅ Strona powitalna dostępna publicznie, ale bez JWT nikt nie może edytować dokumentów
  • ✅ Watchtower aktualizuje obraz automatycznie co 24h
💡 Tip: Jeśli chcesz całkowicie ukryć OnlyOffice przed światem, możesz w NPM dodać regułę dostępu IP lub Basic Auth na domenę OnlyOffice. Wtyczka Nextcloud nadal będzie działać przez sieć wewnętrzną.

Podsumowanie

OnlyOffice Community Edition to solidna, bezpłatna alternatywa dla Google Docs w środowisku self-hosted. Instalacja przez Docker jest prosta, choć JWT i WebSockets potrafią zjeść trochę czasu przy konfiguracji. Po skonfigurowaniu działa stabilnie — edycja .docx, .xlsx i .pptx z zachowaniem formatowania, współpraca kilku osób na jednym dokumencie w czasie rzeczywistym.

Limit 20 jednoczesnych połączeń Community Edition wystarczy na szkołę lub małą firmę. Dane zostają na własnym serwerze.

Zobacz też


Tytuł SEO: OnlyOffice + Nextcloud na Proxmox — instalacja i konfiguracja
Meta opis: Jak zainstalować OnlyOffice Docs Community Edition w LXC na Proxmox i podłączyć do Nextcloud. JWT, WebSockets, pułapki.
Tagi: proxmox, docker, nextcloud, self-hosting, homelab
URL slug: onlyoffice-nextcloud-proxmox-docker
Feature image alt: Diagram architektury OnlyOffice i Nextcloud na Proxmox z Nginx Proxy Manager