1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Nextcloud na VPS - instalacja

# Nextcloud na VPS - instalacja z Nginx, PHP-FPM i PostgreSQL

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS

⚡ W skrócie · 13 min czytania

-   Nextcloud na VPS krok po kroku: Nginx + PHP-FPM 8.2 + PostgreSQL, Redis cache, occ CLI, aplikacje (Collabora, Calendar, Contacts), HTTPS, opcache i cron.
-   Krok 1 - Wymagania wstępne i instalacja zależności.
-   Krok 2 - Baza danych PostgreSQL.
-   Krok 3 - Pobranie i instalacja Nextcloud.
-   Krok 4 - Konfiguracja PHP-FPM.

Nextcloud to self-hosted alternatywa dla Google Drive i Dropbox - własna chmura plików z synchronizacją na wszystkich urządzeniach, kalendarzem, kontaktami, edytorem dokumentów online i dziesiątkami aplikacji rozszerzających funkcjonalność. Uruchomienie Nextcloud na własnym VPS daje pełną kontrolę nad danymi, zgodność z RODO i brak limitów przestrzeni poza dyskiem serwera. Ten artykuł pokazuje kompletną instalację produkcyjną z Nginx, PHP-FPM 8.2, PostgreSQL i Redis cache.

## Krok 1 - Wymagania wstępne i instalacja zależności

```
# Ubuntu 22.04 / 24.04
# Aktualizacja systemu
sudo apt update && sudo apt upgrade -y

# PHP 8.2 z wymaganymi rozszerzeniami
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.2-fpm php8.2-gd php8.2-mysql php8.2-pgsql php8.2-curl \
  php8.2-mbstring php8.2-intl php8.2-bcmath php8.2-gmp php8.2-xml \
  php8.2-zip php8.2-bz2 php8.2-redis php8.2-imagick php8.2-apcu \
  php8.2-ldap php8.2-exif php8.2-smbclient php8.2-ffmpeg -y

# Nginx
sudo apt install nginx -y

# PostgreSQL
sudo apt install postgresql postgresql-contrib -y

# Redis
sudo apt install redis-server -y

# Narzędzia
sudo apt install unzip curl wget -y
```

## Krok 2 - Baza danych PostgreSQL

```
# Wejdz do psql jako postgres
sudo -u postgres psql

-- Utwórz uzytkownika i baze danych
CREATE USER nextcloud WITH PASSWORD 'StrongNCPassword123';
CREATE DATABASE nextcloud OWNER nextcloud ENCODING 'UTF8'
  LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
\q

# Sprawdz polaczenie
psql -U nextcloud -h localhost -d nextcloud -c "SELECT version();"
```

## Krok 3 - Pobranie i instalacja Nextcloud

```
# Pobierz najnowszy Nextcloud (sprawdz aktualna wersje na nextcloud.com)
NC_VERSION="29.0.1"
cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-${NC_VERSION}.zip
wget https://download.nextcloud.com/server/releases/nextcloud-${NC_VERSION}.zip.sha256

# Weryfikacja integralnosci
sha256sum -c nextcloud-${NC_VERSION}.zip.sha256

# Wypakuj do /var/www
unzip nextcloud-${NC_VERSION}.zip
sudo mv nextcloud /var/www/

# Utwórz katalog na dane uzytkowników (najlepiej poza webroot)
sudo mkdir -p /mnt/nextcloud-data
sudo chown -R www-data:www-data /var/www/nextcloud /mnt/nextcloud-data
sudo chmod 750 /mnt/nextcloud-data
```

## Krok 4 - Konfiguracja PHP-FPM

```
# /etc/php/8.2/fpm/pool.d/nextcloud.conf
[nextcloud]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm-nextcloud.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500

# Zmienne srodowiskowe dla PHP
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
```

```
# /etc/php/8.2/fpm/conf.d/99-nextcloud.ini
memory_limit = 512M
upload_max_filesize = 16G
post_max_size = 16G
max_execution_time = 3600
max_input_time = 3600
default_charset = UTF-8
output_buffering = Off

; OPcache - kluczowe dla wydajnosci
opcache.enable = 1
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 10000
opcache.memory_consumption = 256
opcache.revalidate_freq = 1
opcache.save_comments = 1

sudo systemctl restart php8.2-fpm
```

## Krok 5 - Konfiguracja Nginx

```
# /etc/nginx/sites-available/nextcloud

upstream php-handler {
    server unix:/run/php/php8.2-fpm-nextcloud.sock;
}

map $arg_v $asset_immutable {
    ""        "";
    default   ", immutable";
}

server {
    listen 80;
    server_name cloud.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name cloud.example.com;

    ssl_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;

    root /var/www/nextcloud;
    index index.php index.html;

    client_max_body_size 16G;
    client_body_timeout 3600s;
    fastcgi_read_timeout 3600s;

    # Nagłówki bezpieczenstwa
    add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
    add_header X-Content-Type-Options nosniff always;
    add_header X-Frame-Options SAMEORIGIN always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header X-Permitted-Cross-Domain-Policies none always;
    add_header X-Robots-Tag "noindex, nofollow" always;
    add_header Referrer-Policy "no-referrer" always;

    # Blokuj dostepu do wrazliwych plikow
    location ~ /\. { deny all; }
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; }
    location ~ ^/(?:autotest|occ|issue|indie|db_|console)\.php { deny all; }

    # CalDAV / CardDAV redirect
    location = /.well-known/carddav {
        return 301 https://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
        return 301 https://$host/remote.php/dav;
    }

    location / {
        rewrite ^ /index.php;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        include fastcgi_params;
        fastcgi_pass php-handler;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463$asset_immutable";
        access_log off;
    }

    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;
        access_log off;
    }

    location /remote {
        return 301 /remote.php$request_uri;
    }

    location ~* \.(?:env|log)$ { deny all; }
}
```

```
# Aktywacja i test
sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

## Krok 6 - Instalacja przez occ CLI (zalecane)

```
# Instalacja Nextcloud przez CLI (alternatywa dla kreatora web)
sudo -u www-data php /var/www/nextcloud/occ maintenance:install \
  --database="pgsql" \
  --database-name="nextcloud" \
  --database-user="nextcloud" \
  --database-pass="StrongNCPassword123" \
  --database-host="localhost" \
  --admin-user="admin" \
  --admin-pass="AdminPassword789" \
  --data-dir="/mnt/nextcloud-data"

# Dodaj domenę do trusted_domains
sudo -u www-data php /var/www/nextcloud/occ config:system:set \
  trusted_domains 1 --value="cloud.example.com"

# Sprawdz status instalacji
sudo -u www-data php /var/www/nextcloud/occ status
```

## Krok 7 - Redis cache i locking

Redis drastycznie poprawia wydajność Nextcloud - szczególnie przy wielu równoczesnych połączeniach. Edytuj `/var/www/nextcloud/config/config.php`:

```
<?php
// Dodaj do tablicy $CONFIG (przed zamykajacym );)

// Redis cache
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
  'host' => 'localhost',
  'port' => 6379,
  'timeout' => 0,
  // Opcjonalnie: haslo Redisa jesli skonfigurowane
  // 'password' => 'redis-password',
  // Opcjonalnie: Unix socket (szybszy niz TCP na localhost)
  // 'host' => '/var/run/redis/redis.sock',
  // 'port' => 0,
],

// Wydajnosc - przepisywanie assetow
'htaccess.RewriteBase' => '/',

// Strefa czasowa
'default_phone_region' => 'PL',

// Ukryj wersje Nextcloud w naglowkach
'version' => '29.0.1',
```

## Krok 8 - Cron background jobs

```
# Ustaw cron (zalecany) zamiast domyslnego AJAX
sudo -u www-data php /var/www/nextcloud/occ background:cron

# Dodaj do crontaba www-data
sudo -u www-data crontab -e
# Wklej:
# */5 * * * * php -f /var/www/nextcloud/cron.php

# Lub przez systemd timer (nowocześniejsze podejście)
sudo tee /etc/systemd/system/nextcloud-cron.service <<'EOF'
[Unit]
Description=Nextcloud cron.php job

[Service]
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
EOF

sudo tee /etc/systemd/system/nextcloud-cron.timer <<'EOF'
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
Requires=nextcloud-cron.service

[Timer]
Unit=nextcloud-cron.service
OnBootSec=5min
OnUnitActiveSec=5min

[Install]
WantedBy=timers.target
EOF

sudo systemctl enable --now nextcloud-cron.timer
sudo systemctl status nextcloud-cron.timer
```

## Aplikacje - Collabora, Calendar, Contacts

```
# Instalacja aplikacji przez occ
sudo -u www-data php /var/www/nextcloud/occ app:install calendar
sudo -u www-data php /var/www/nextcloud/occ app:install contacts
sudo -u www-data php /var/www/nextcloud/occ app:install tasks
sudo -u www-data php /var/www/nextcloud/occ app:install deck
sudo -u www-data php /var/www/nextcloud/occ app:install notes

# Collabora Online (edytor dokumentow) - wymaga osobnego kontenera
docker pull collabora/code
docker run -d -p 127.0.0.1:9980:9980 \
  -e "domain=cloud\\.example\\.com" \
  -e "DONT_GEN_SSL_CERT=YES" \
  --name collabora \
  --restart always \
  collabora/code

# Po instalacji skonfiguruj w Nextcloud:
# Ustawienia → Collabora Online → wpisz https://cloud.example.com:9980

# Lista zainstalowanych aplikacji
sudo -u www-data php /var/www/nextcloud/occ app:list

# Aktualizacja aplikacji
sudo -u www-data php /var/www/nextcloud/occ app:update --all
```

## Przydatne komendy occ

Komenda

Działanie

`occ files:scan --all`

Skan i indeksowanie wszystkich plików

`occ upgrade`

Aktualizacja Nextcloud (po podmianie plików)

`occ maintenance:mode --on`

Włącz tryb maintenance (przed aktualizacją)

`occ maintenance:repair`

Naprawa niespójności bazy i plików

`occ db:add-missing-indices`

Dodaj brakujące indeksy DB (po upgrade)

`occ user:add --password-from-env username`

Dodaj użytkownika przez CLI

`occ config:system:get trusted_domains`

Sprawdź dozwolone domeny

`occ log:tail`

Podgląd logów Nextcloud w czasie rzeczywistym

## Najczęstsze problemy i rozwiązania

-   **Strona wolna, lagi przy dużych plikach** - sprawdź czy Redis jest aktywny (`occ config:system:get memcache.local`), zwiększ `pm.max_children` w PHP-FPM pool i dodaj `fastcgi_request_buffering off`.
-   **413 Request Entity Too Large** - zwiększ `client_max_body_size` w Nginx i `upload_max_filesize` / `post_max_size` w PHP.
-   **Pliki nie widoczne po wgraniu przez FTP/SSH** - uruchom `occ files:scan --all`. Nextcloud nie wykrywa plików dodanych poza jego UI.
-   **Błąd "Twoje środowisko uruchomieniowe ma naruszone integralności kodu"** - uruchom `occ integrity:check-core` i `occ maintenance:repair`.
-   **CalDAV/CardDAV nie działa w klientach** - sprawdź redirect `/.well-known/carddav` i `/.well-known/caldav` w Nginx.

## Najczęstsze pytania

Jakie są minimalne wymagania sprzętowe dla Nextcloud na VPS? +

Minimalne wymagania dla Nextcloud dla 1-10 użytkowników: 2 CPU, 2 GB RAM, 20 GB dysk na system (dane trzymaj osobno). Dla 10-50 użytkowników: 4 CPU, 4 GB RAM, SSD. Dla większych instalacji warto rozważyć osobny serwer bazy danych. Nextcloud intensywnie korzysta z PHP opcache i Redis - bez nich wydajność spada drastycznie. Dysk dla plików użytkowników powinien być osobnym wolumenem (łatwiejsza rozbudowa).

Nextcloud z PostgreSQL czy MySQL/MariaDB? +

Obie bazy działają dobrze. PostgreSQL jest oficjalnie rekomendowany przez Nextcloud team i ma lepszą obsługę JSONB (używaną w niektórych aplikacjach). MariaDB jest popularniejsza w dokumentacji społeczności i łatwiejsza w konfiguracji dla początkujących. Jeśli już masz PostgreSQL na serwerze - użyj go. SQLite obsługuje Nextcloud tylko dla instalacji testowych/jednoosobowych.

Jak skonfigurować Redis cache w Nextcloud? +

Redis w Nextcloud pełni dwie role: (1) memcache.local i memcache.distributed - cache metadanych plików, sesji, zapytań DB. (2) Locking backend zamiast domyślnych locków w bazie danych (szybszy przy wielu równoległych żądaniach). Konfiguracja w config.php: dodaj memcache.local = OC\\Memcache\\Redis, memcache.distributed = OC\\Memcache\\Redis, memcache.locking = OC\\Memcache\\Redis oraz blok redis z host i port. Wymagana jest rozszerzenie PHP php-redis.

Czym jest occ w Nextcloud i do czego służy? +

occ (ownCloud Console) to CLI Nextcloud - odpowiednik wp-cli dla WordPressa. Używasz go do: instalacji i aktualizacji aplikacji (occ app:install, occ upgrade), skanowania plików (occ files:scan --all), zarządzania użytkownikami, konfiguracji bez UI (occ config:system:set), naprawy instalacji (occ maintenance:repair), trybu maintenance (occ maintenance:mode --on/off). Zawsze uruchamiaj jako www-data: sudo -u www-data php occ.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z dużym dyskiem NVMe - idealny pod Nextcloud dla 10-50 użytkowników

VPS NVMe

[Aktywuj rabat →](/out/contabo/#reklama "Contabo")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo/)

Mikr.us

Budżetowy VPS do testowania Nextcloud przed migracją na większy serwer

Dev/Test

[Aktywuj rabat →](/out/mikrus/#reklama "Mikr.us")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus/)

LH.pl

Hosting z DirectAdmin i dużym dyskiem - dla prostszych potrzeb bez VPS

Managed

[Aktywuj rabat →](/out/lh-pl/#reklama "LH.pl")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl/)

## Powiązane strony

-   [Ranking i porównanie VPS
    
    Aktualne ceny VPS z pełnym kosztem 2-letnim (TCO) i bez ukrytych opłat odnowienia.
    
    ](/vps/)
-   [Nginx - konfiguracja virtual hostów](/baza-wiedzy/nginx-vhost-konfiguracja/)
-   [PostgreSQL na VPS - instalacja i konfiguracja](/baza-wiedzy/postgresql-vps-instalacja-konfiguracja/)
-   [SSL Let's Encrypt - automatyzacja certbot](/baza-wiedzy/ssl-lets-encrypt-automatyzacja/)
-   [Wszystkie artykuły](/baza-wiedzy/)
-   [Nextcloud na VPS - instalacja i konfiguracja z Nginx
    
    Nextcloud VPS: Nginx + PHP-FPM 8.2 + MariaDB + Redis, konfiguracja nginx.conf z CalDAV/CardDAV, Redis session cache…
    
    ](/baza-wiedzy/nextcloud-konfiguracja-vps/)
-   [Jitsi Meet - self-hosted wideokonferencje na VPS
    
    Jitsi Meet na VPS: instalacja all-in-one, Nginx + Let's Encrypt, TURN server coturn dla NAT, JWT authentication,…
    
    ](/baza-wiedzy/jitsi-meet-vps-instalacja/)
-   [Jaki VPS wybrać?](/jaki-vps-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 10 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)