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
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=AuthorizationJwt— musi być identyczny w compose i w ustawieniach Nextcloud. Jakakolwiek różnica (wielkość liter, spacje) powoduje błądDownload 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ż
- Instalacja NocoDB na Proxmox LXC — baza danych no-code na tej samej infrastrukturze
- Dokumentacja OnlyOffice Docs — oficjalny poradnik instalacji przez Docker
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