 Autor: [Adam Nadolny](/autorzy/adam-nadolny) Ekspert DevOps i infrastruktury · Zweryfikowano Kwiecień 2026

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

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 · 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 · 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 · link partnerski

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

## Powiązane strony

-   [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/)