SSD Nodes Learn
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-07-24

VPS üzerinde Nextcloud kurulumu ve yedekleme

Docker Compose, Postgres ve Redis kullanarak VPS üzerinde Nextcloud kurulumu yapın. Veri kaybını önlemek için TLS ve yedekleme adımlarını öğrenin.

Aslında ne inşa ediyorsunuz

Bu kılavuz, Nextcloud'u Docker Compose kullanarak bir VPS üzerinde çalıştırır, önüne Let's Encrypt TLS yerleştirir ve gerçekten geri yüklenebilen bir yedekleme sistemi kurar. Toplamda dört konteyner ve bir proxy bulunmaktadır: loopback üzerinde dinleme yapan resmi nextcloud imajı, tüm dosya meta verilerini tutan Postgres, dosya kilitlerini tutan Redis, yalnızca cron döngüsünü çalıştıran ikinci bir Nextcloud imajı ve tüm yapının önünde TLS sonlandırması yapan host üzerindeki nginx. Kurulum yaklaşık yirmi dakika sürer ancak asıl önemli olan kısım bu değildir. İlk saat içinde verilen iki karar, bir yıl sonra dosyalarınızın olup olmayacağını belirler: SQLite yerine gerçek bir veritabanı kullanımı ve veri dizinini, veritabanını ve config.php bileşenini tek bir tutarlı set olarak yakalayan bir yedekleme sistemi.

Bu kurulum; Ubuntu 24.04 LTS veya Debian 13, Docker'ın kendi deposundan yüklenmiş Compose v2 eklentisine sahip Docker Engine ve cloud.example.com yönlendirmesi yapılmış bir DNS A kaydı (IPv6 kullanılıyorsa AAAA ile birlikte) gerektirir. Tüm bu işlemler için kontrolünüz altında bir sunucu gereklidir; TLS sonlandırması ve veritabanı dökümü işlemleri başka bir SaaS platformu üzerinde gerçekleştirilemez.

Boyutlandırma: Belleği asıl tüketen unsurlar

Nextcloud'un bellek kullanımı üç ana unsur tarafından domine edilir; bu unsurların hiçbiri doğrudan "Nextcloud" değildir.

PHP worker'ları. -apache imajı, her eşzamanlı isteği bir PHP yorumlayıcısı barındıran bir worker süreci üzerinden sunar. Her bir worker, PHP isteği sonlandırana kadar PHP_MEMORY_LIMIT boyutuna ulaşabilir. En kötü durumdaki yerleşik bellek kullanımı kabaca eşzamanlı istek sayısı × bellek limiti şeklindedir; masaüstü senkronizasyon istemcisi kullanıcı başına birkaç paralel bağlantı açar. Üst sınırı kullanıcı sayısı değil, eşzamanlılık belirler.

Veritabanı. Postgres, her bağlantı için bir backend fork eder ve paylaşılan buffer'ları bellekte tutar. Çalışma kümesi bayt sayısına göre değil, dosya sayısına göre ölçeklenir: oc_filecache, kullanıcı başına dosya başına bir satır tutar. Yüz bin adet küçük dosya, yüz adet büyük dosyadan daha ağır bir veritabanı oluşturur.

Önizleme oluşturma. Bir küçük resim (thumbnail) oluşturmak, kaynak görüntüyü tam çözünürlükte belleğe çözer. Video önizlemeleri ffmpeg komutunu kullanır. occ preview:generate-all çalıştırmak, bu ani bellek artışını art arda tekrarlatır; bu durum, küçük bir VPS'in OOM killer tarafından sonlandırılmasının en yaygın nedenidir.

Redis nispeten düşük maliyetlidir. Sonradan eklenen her şey —Collabora, tam metin arama, bir antivirüs tarayıcısı— kendi bellek ayak izine sahip ayrı bir yerleşik hizmettir ve etkinleştirmeden önce boyutlandırma planına dahil edilmelidir.

RAM kısıtlıysa uygulanacak yöntemler: PHP_MEMORY_LIMIT değerini düşürün, preview_max_x / preview_max_y / preview_max_filesize_image değerlerini sınırlandırın, enabledPreviewProviders değerini yalnızca taradığınız formatlarla sınırlayın ve veri dizininin dosyalarınızın boyutunun birkaç katına sessizce çıkmaması için trashbin_retention_obligation ve versions_retention_obligation değerlerini ayarlayın. Bir swap dosyası ekleyin. Swap yavaştır, ancak yükseltme sırasında gerçekleşen bir OOM kill çok daha kötüdür.

SQLite neden hata verir

Nextcloud, SQLite desteği ile birlikte gelir ve resmi imaj bunu kullanabilir. Kullanmayın. SQLite, yazma işlemlerini veritabanı genelinde bir kilit ile serileştirir: tüm dosya için aynı anda yalnızca bir yazıcı çalışabilir. Nextcloud sürekli yazma işlemi yapar — dosya kilitleri, aktivite satırları, önbellek girişleri, iş durumu — ve bir masaüstü istemcisi dizin ağacını senkronize ederken birçok paralel istek gönderir. Bu kullanım senaryosunda SQLSTATE[HY000]: General error: 5 database is locked ve HTTP 500 hataları alınır; hata, sistem kullanılmaya başlandığı anda ortaya çıkar.

Daha sonra occ db:convert-type ile dönüştürme yapmak mümkündür, ancak canlı bir veri seti üzerinde uzun ve riskli bir taşıma işlemidir. Postgres veya MariaDB ile başlayın.

Compose dosyası

Bu içeriği /srv/nextcloud/compose.yaml dizinine, sırlar (secrets) için ise yan dizindeki 600 modunda bir .env dosyasına yerleştirin.

services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: ${DB_PASSWORD}

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --requirepass ${REDIS_PASSWORD}

  app:
    image: nextcloud:31-apache
    restart: unless-stopped
    depends_on: [db, redis]
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - html:/var/www/html
      - /srv/nextcloud/data:/var/www/html/data
    environment:
      POSTGRES_HOST: db
      POSTGRES_DB: nextcloud
      POSTGRES_USER: nextcloud
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      REDIS_HOST: redis
      REDIS_HOST_PASSWORD: ${REDIS_PASSWORD}
      NEXTCLOUD_ADMIN_USER: admin
      NEXTCLOUD_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      NEXTCLOUD_TRUSTED_DOMAINS: cloud.example.com
      TRUSTED_PROXIES: 172.16.0.0/12
      OVERWRITEPROTOCOL: https
      OVERWRITECLIURL: https://cloud.example.com
      APACHE_DISABLE_REWRITE_IP: "1"
      PHP_MEMORY_LIMIT: 512M
      PHP_UPLOAD_LIMIT: 10G

  cron:
    image: nextcloud:31-apache
    restart: unless-stopped
    entrypoint: /cron.sh
    depends_on: [db, redis]
    volumes:
      - html:/var/www/html
      - /srv/nextcloud/data:/var/www/html/data

volumes:
  db:
  html:

31 içeriğini olduğu gibi kopyalamadan önce ana etiketi (major tag) sabitleyin ve Docker Hub üzerindeki güncel etiketi kontrol edin. latest gelecekteki bir docker compose pull sürümünde ana sürüm sınırını aşmanıza neden olabilir; Nextcloud bu durumu desteklemez.

Veri dizini, bilinçli olarak bir "named volume" yerine "bind mount" olarak yapılandırılmıştır: Doğrudan bir yedekleme aracına yönlendirilebilen bir yol, düzenli bir yapıdan daha değerlidir. Dizini, imajın www-data UID değeri ve Nextcloud'un gerektirdiği izinlerle oluşturun:

sudo mkdir -p /srv/nextcloud/data
sudo chown -R 33:33 /srv/nextcloud/data
sudo chmod 0770 /srv/nextcloud/data

Port yayınlama işlemine dikkat edin: 127.0.0.1:8080:80. Docker, portları ufw'ın INPUT zinciri paketi görmeden önce değerlendirilen DNAT kuralları yazarak yayınlar; çıplak bir 8080:80 kullanımı, ufw ne derse desin Nextcloud'u şifrelenmemiş halde internete açar. Loopback adresine bağlamak, uygulamayı genel arayüzden uzak tutar. Bu durumda güvenlik duvarının sadece proxy'e izin vermesi yeterlidir. Eğer SSH'ı tüm internete açık bırakmak istemiyorsanız, kendi sunucunuzda çalışan bir WireGuard VPN ile VPS'e bağlanmak port 22'yi genel kurallardan tamamen kaldırmanıza olanak tanır:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Sistemi docker compose up -d ile başlatin ve docker compose logs -f app çıktılarını izleyin. İlk başlatma işlemi, tüm uygulama dizinini volume içine kopyalar ve yükleyiciyi çalıştırır; bu işlem tamamlanana kadar konteyner hiçbir yanıta cevap vermez.

TLS ve reverse proxy

Dağıtımdan nginx ve certbot paketlerini yükleyin. Doğru server_name değerine sahip standart bir port-80 server block oluşturun ve ardından certbot'un bu bloğu yeniden yazmasına izin verin. HTTP-01 challenge mekanizması, yenileme zamanlayıcısı ve hata modları Ubuntu 24.04 üzerinde certbot ve nginx ile Let's Encrypt sertifikası oluşturma içeriğinde ayrıntılı olarak ele alınmaktadır:

sudo apt install nginx certbot python3-certbot-nginx
sudo certbot --nginx -d cloud.example.com

Certbot, ssl_certificate satırlarını ve :80:443 yönlendirmesini ekler. Ayrıca 90 günlük sertifikayı yenileyen bir systemd zamanlayıcısı kurar. Mevcut durumu systemctl list-timers | grep certbot ile doğrulayın; etkinleştirilmemiş bir yenileme zamanlayıcısı, 90 günlük bir risk oluşturur.

Proxy bloğu:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name cloud.example.com;

    # certbot manages ssl_certificate / ssl_certificate_key here

    add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;

    client_max_body_size 10G;
    client_body_timeout 300s;

    location = /.well-known/carddav { return 301 /remote.php/dav; }
    location = /.well-known/caldav  { return 301 /remote.php/dav; }

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host  $host;
        proxy_request_buffering off;
        proxy_buffering off;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}

nginx 1.25 ve üzeri sürümlerde http2 on; eklenmelidir. Ubuntu 24.04 daha eski bir sürüm kullanır ve burada karşılığı listen 443 ssl http2; şeklindedir. nginx -t komutu, sürümünüzün hangisini kabul ettiğini belirtecektir.

client_max_body_size ve uzun read timeout süreleri, büyük yüklemelerin yarıda kesilmesini engeller. proxy_request_buffering off, tüm dosyayı önce proxy diskine yazmak yerine yüklemeyi doğrudan akış (stream) olarak iletir.

Host üzerindeki nginx, tek bir uygulama için en basit çözümdür. Nextcloud'un diğer container'lar ile aynı VPS'i paylaşması gerekiyorsa, birden fazla uygulama için Docker Compose reverse proxy olarak Traefik çalıştırma yöntemi yönlendirme ve sertifika işlemlerini container label'larına taşır. Bu durumda client_max_body_size ve timeout gereksinimleri, middleware ve transport ayarları olarak tekrar karşınıza çıkar.

trusted_proxies ve overwriteprotocol

Hataların çoğu bu bölümde gerçekleşir ve belirtiler sebeple alakasız görünebilir.

X-Forwarded-Proto: https yalnızca istek trusted_proxies içinde listelenen bir adresten geldiğinde dikkate alınır. Bu ayar dikkate alınmadığında, Nextcloud isteğin düz HTTP olduğunu varsayar ve http:// URL'leri üretir; proxy bu istekleri HTTPS'e yönlendirir; tarayıcı yönlendirmeyi takip eder; Nextcloud tekrar http:// üretir. Bu durum yönlendirme döngüsüne (redirect loop) neden olur. OVERWRITEPROTOCOL: https protokol şemasını sabitlemek için kullanılır.

TRUSTED_PROXIES içindeki sorun, Nextcloud'un gördüğü adresin 127.0.0.1 olmamasıdır. nginx host üzerinde çalışır ve yayınlanmış bir porta bağlanır; bu nedenle konteyner, Docker köprü ağ geçidini (gateway) görür — bu adres 172.x içindedir. Gerçek alt ağı şu komutla bulun:

docker network inspect nextcloud_default \
  -f '{{range .IPAM.Config}}{{.Subnet}}{{end}}'

Bulunan CIDR değerini (veya kapsayan 172.16.0.0/12 değerini) TRUSTED_PROXIES içine yazın. Bu aralığı çok geniş tutarsanız herhangi bir istemci X-Forwarded-For değerini taklit edebilir; yanlış ayarlarsanız tüm girişler ağ geçidi adresinden geliyormuş gibi görünür, kaba kuvvet (brute-force) koruması tüm örneği aynı anda engeller ve admin genel bakış ekranında "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy." uyarısı görünür.

OVERWRITECLIURL, bir ana bilgisayar adı (hostname) çıkarımı yapacak gelen isteği olmayan cron konteyneri için önemlidir. Bu ayar olmadan arka plan işleri localhost adresine yönlenen bağlantılar oluşturur ve e-posta bildirimleri kullanılamaz URL'ler gönderir.

Arka plan işleri: cron, AJAX değil

Nextcloud'un varsayılan iş yürütücüsü AJAX yöntemidir: işler, bir kullanıcı sayfa yüklediğinde yan etki olarak yürütülür. Saat 04:00'te kimse gezinti yapmadığı için çöp kutusu süresi dolumu, versiyon temizliği, önizlemeler ve federasyon denemeleri durur. İlk belirti, veri dizininin sürekli büyümesidir. Yukarıdaki cron servisi, aynı hacimler üzerinde resmi /cron.sh döngüsünü çalıştırır. Nextcloud'a bunu beklemesini söyleyin:

docker compose exec -u www-data app php occ background:cron

Her occ komutu şu yapıyı izler: docker compose exec -u www-data app php occ <command>. Bu komut için bir alias (takma ad) oluşturmak faydalıdır.

Yedeklemeler: üç bileşen ya da hiçbiri

Sadece dosya sistemi yedeği almak, bozuk bir örneğe geri yükleme yapılmasına neden olur. Veri dizini baytları tutar; Postgres dosya önbelleğini, paylaşımları, kullanıcıları ve uygulama durumunu tutar; config.php ise veritabanı kimlik bilgilerini, örnek kimliğini (instance ID) ve parola tuzunu (password salt) tutar. Dosyaları veritabanı olmadan geri yüklerseniz Nextcloud bunları göremez. Veritabanını config.php olmadan geri yüklerseniz veritabanı açılamaz. Eski bir veritabanını daha yeni bir veri dizinine geri yüklerseniz, taşınmış dosyalara işaret eden paylaşımlar elde edersiniz.

Durdurulmuş (quiesced) bir örnekten her üç bileşeni de yedekleyin:

#!/usr/bin/env bash
set -euo pipefail
cd /srv/nextcloud
DEST="/var/backups/nextcloud/$(date -u +%Y%m%dT%H%M%SZ)"
mkdir -p "$DEST"

occ() { docker compose exec -T -u www-data app php occ "$@"; }

occ maintenance:mode --on
trap 'occ maintenance:mode --off' EXIT

docker compose exec -T db \
  pg_dump -U nextcloud --clean --if-exists nextcloud | gzip > "$DEST/db.sql.gz"

docker compose exec -T app \
  tar -C /var/www/html -cf - config custom_apps themes > "$DEST/app.tar"

rsync -a --delete /srv/nextcloud/data/ /var/backups/nextcloud/data/

Bakım modu (maintenance mode), dump işlemi ile dosya kopyalama işleminin birbiriyle uyumlu olmasını sağlar. Bu adımı atlarsanız, rsync'in henüz ulaşmadığı bir dosyaya referans veren bir veritabanı yedeği alabilirsiniz. Betiğin zaman damgalı veritabanı yedeklerini sakladığını ancak veri dizini için yalnızca tek bir döngüsel ayna (rolling mirror) tuttuğunu unutmayın — rsync --delete her çalıştırmada üzerine yazar — bu nedenle yalnızca en yeni dump, dosya kopyasıyla eşleşir.

Ardından yedeği sunucudan dışarı çıkarın. Yedeklenen nesne ile aynı VPS üzerinde yaşayan bir yedek, yedek değil, sadece bir kopyadır. Nesne depolama (object storage) veya ikinci bir ana makineye karşı restic kullanımı yaygın çözümdür; deduplication özelliği veri dizinini günlük tarball dosyalarından çok daha iyi yönetir. Depo başlatmadan günlük zamanlayıcıya ve geri yükleme tatbikatına kadar tüm kurulum off-box VPS backups with restic içerisinde yer almaktadır.

Geri yükleme işlemi sadece işlemlerin tersi değildir. Yeni başlatılmış bir yığın (stack), yükleyiciyi çalıştırır ve tamamen yeni bir config.php — yeni bir örnek kimliği ve parola tuzu — oluşturur; dump dosyasını bu yeni kimliğin üzerine içe aktarmak, bozuk oturumlar ve paylaşım tokenları bırakır. Önce eski kimliği şu sırayla geri yükleyin:

docker compose up -d && docker compose stop app cron    # create the volumes, then halt the app
sudo rsync -a --delete /var/backups/nextcloud/data/ /srv/nextcloud/data/
docker compose run --rm -T --entrypoint "" app \
  tar -C /var/www/html -xf - < app.tar                  # the original config.php returns
gunzip -c db.sql.gz | docker compose exec -T db psql -U nextcloud -d nextcloud
docker compose start app cron
docker compose exec -T -u www-data app php occ maintenance:mode --off
docker compose exec -T -u www-data app php occ files:scan --all

files:scan, dosya önbelleğini disk üzerindeki gerçek verilerle uyumlu hale getirir. İhtiyacınız olduğunda sorun yaşamamak için bunu yedek bir VPS üzerinde bir kez deneyin.

Yükseltmeler: her seferinde yalnızca bir ana sürüm

Nextcloud, her seferinde yalnızca bir ana sürümün yükseltilmesini destekler. 29'dan 31'e doğrudan geçiş yapmak başarılı olmaz; Exception: Updates between multiple major versions and downgrades are unsupported. hatası verir ve sistemi bakım modunda bırakır.

Docker yükseltme süreci şöyledir: yedek alın, hem app hem de cron servislerindeki etiketi 31'den 32'ya düzenleyin, ardından docker compose pull && docker compose up -d ve sonra docker compose logs -f app işlemlerini gerçekleştirin. Image entrypoint, mevcut veriler üzerinde yeni kodu tespit eder ve occ upgrade işlemini kendisi yürütür. İşlemi kesmeyin. Log akışı durduğunda docker compose exec -u www-data app php occ status komutunu çalıştırın, versionstring durumunu ve uygulamaların tekrar etkinleştirildiğini kontrol edin.

İşlemi kolaylaştıran iki kural: bir ana sürümü yükseltin, doğrulayın, ardından bir sonrakini yükseltin. Ayrıca, cron servisini eşleşecek şekilde düzenlemeden app servisindeki etiketi asla değiştirmeyin; tek bir veritabanına karşı iki farklı Nextcloud sürümü kullanılması veri bozulmasına yol açar.

Karşılaşabileceğiniz hatalar

"Your data directory is readable by other users. Please change the permissions to 0770." Bind-mount edilen dizin, grup veya diğer kullanıcılar için okuma yetkisine sahiptir. sudo chmod 0770 /srv/nextcloud/data ve sudo chown -R 33:33 /srv/nextcloud/data.

"Your data directory is invalid. Ensure there is a file called .ocdata in the root." Bind mount, Nextcloud tarafından hiç başlatılmamış bir dizine işaret ediyor; dizin yolunda yazım hatası yapılmış olabilir veya çalışan bir örneğin yerine boş bir dizin getirilmiş olabilir. Host dizininin volume satırıyla eşleştiğini kontrol edin.

"Access through untrusted domain." İstekteki hostname trusted_domains içerisinde yer almıyor. NEXTCLOUD_TRUSTED_DOMAINS yalnızca ilk kurulumda geçerlidir; sonrasında şu komutla ayarlanmalıdır: occ config:system:set trusted_domains 1 --value=cloud.example.com.

502 Bad Gateway, /var/log/nginx/error.log içerisinde connect() failed (111: Connection refused) while connecting to upstream ile birlikte. nginx, 127.0.0.1:8080 üzerinde hiçbir yere ulaşamadı. Ya konteyner hala başlatılıyor (docker compose logs app kontrol edin), ya kapandı (docker compose ps), ya da publish satırı proxy_pass portu ile eşleşmiyor. ss -ltnp | grep 8080 ile doğrulayın.

Yönlendirme döngüsü (redirect loop) veya admin genel bakışında "insecure" uyarıları. OVERWRITEPROTOCOL: https eksik veya TRUSTED_PROXIES Docker gateway subnet'ini içermiyor. Yukarıdaki proxy bölümüne bakın.

LockedException: "files/..." is locked. REDIS_HOST ayarlandığında, imaj Redis'i kilitleme backend'i olarak yapılandırır ve bayat kilitler nadir görülür. Bu ayar olmadan kilitler oc_file_locks veritabanı tablosunda tutulur ve yazma işlemi sırasında yarıda kesilen bir istek tabloda satırlar bırakır. Kilit satırlarını manuel olarak temizlemeden önce Redis'in gerçekten kullanıldığını doğrulayın; occ config:system:get memcache.locking Redis sınıfını döndürmelidir.

"The PHP memory limit is below the recommended value of 512MB." PHP_MEMORY_LIMIT değerini artırın ve konteyneri yeniden oluşturun. Bu işlemin en kötü durum senaryosundaki tavan değerinizi nasıl etkileyeceğini unutmayın.

Ölçeklendirme aşamasında karşılaşılan sorunlar

İlk engel, veri dizininin ayrılan hacmi aşmasıdır. Bir VPS üzerinde hacim büyütmek, yeniden boyutlandırma ve dosya sistemi genişletme işlemi gerektirir. Disk doluluğu %100 seviyesine ulaşmadan önce disk kullanımına dair uyarılar kurulmalıdır.

İkinci engel oc_filecache sorunudur. Satır sayısı arttıkça dosya listeleme ve senkronizasyon taramaları yavaşlar. Çözüm veritabanı yapılandırmasıdır: Postgres'i hızlı depolama biriminde tutun, yeterli paylaşımlı bellek ayırın ve gereksiz verilerin birikmesine izin vermek yerine saklama ayarlarıyla temizlik yapın.

Üçüncüsü, önizleme oluşturma işleminin diğer süreçlerle rekabet etmesidir. Küçük kapasiteli sunucularda önizleme sağlayıcılarını kısıtlı tutun ve occ preview:generate-all işlemini çalışma saatleri dışında çalıştırın.

Bunun ötesindeki gerçek durum, ek bileşenlerin kendi makinelerine ihtiyaç duymasıdır. Collabora ve tam metin arama, kendi bellek profillerine sahip ayrı servislerdir. Bu servisleri dosyaların tek kopyasının bulunduğu sunucuya kurmak, herhangi bir fayda sağlamadan hata alanını genişletir. Hacim uygun yapıda olmadığında dosya depolamasını S3 uyumlu bir birime taşıyın; ancak bunun yedeklemeyi kolaylaştırmadığını, aksine zorlaştırdığını unutmayın: Metadata hala veritabanında tutulur ve veritabanı ile bucket eş zamanlı olarak yedeklenmelidir.

Instance gerçek kullanıcılar tarafından kullanılmaya başlandığında, kesintilerden senkronizasyon istemcilerinden önce haberdar olmak için önüne Uptime Kuma yerleştirin. Özel bir bulut yapısı kendi mail sunucunuzla uyumlu çalışır. Servisleri manuel olarak birbirine bağlamak istemiyorsanız, Cloudron, CasaOS ve Coolify platformlarını karşılaştırabilirsiniz.

FAQ

Nextcloud'u Postgres yerine SQLite ile çalıştırabilir miyim?

Çalıştırabilirsiniz ve resmi imaj buna izin verir; ancak tek bir masaüstü senkronizasyon istemcisinin paralel istek göndermesi durumunda SQLSTATE[HY000]: General error: 5 database is locked hatası ve HTTP 500 hataları alınır. SQLite, veritabanı genelinde yazma kilidi uygular; Nextcloud ise dosya kilitleri, etkinlik satırları ve iş durumları için sürekli yazma işlemi yapar. Postgres veya MariaDB ile başlayın; occ db:convert-type mevcuttur ancak canlı veriler üzerinde uzun ve riskli bir taşıma işlemidir.

Bir Nextcloud VPS'in gerçekte ne kadar RAM'e ihtiyacı vardır?

Boyut, kullanıcı sayısına değil, eşzamanlı iş yüküne göre belirlenmelidir. En kötü durumdaki yerleşik bellek kullanımı, yaklaşık olarak eşzamanlı istek sayısının PHP_MEMORY_LIMIT ile çarpımı, artı Postgres shared buffers, her bağlantı için bir backend ve önizleme oluşturma sırasındaki artışlar kadardır. 2 GB kapasiteli bir sunucu, önizlemeler sınırlandırılırsa ve swap eklenirse küçük bir ev kullanımı için yeterlidir; Collabora veya tam metin arama eklenirse, ikinci bir yerleşik servis grubu için kapasite planlaması yapmanız gerekir.

Büyük yüklemeler nginx reverse proxy arkasında neden başarısız olur?

Bu durum genellikle proxy üzerindeki iki ayardan kaynaklanır: client_max_body_size ayarının varsayılan 1 MB değerinde bırakılması isteği keser; kısa proxy_read_timeout / proxy_send_timeout değerleri ise uzun transferleri yarıda keser. Her iki değeri de geniş tutun, proxy_request_buffering off ayarını spool yerine stream olarak ayarlayın ve uygulama konteynerindeki PHP_UPLOAD_LIMIT değerini buna uygun şekilde yükseltin.

Nextcloud neden yönlendirme döngüsüne giriyor veya reverse proxy uyarısı veriyor?

Konteyner, nginx'i 127.0.0.1 adresinde görmez; bunun yerine 172.x aralığındaki Docker bridge gateway adresini görür. Bu adres TRUSTED_PROXIES içinde bulunmadığında, X-Forwarded-Proto: https başlığı görmezden gelinir, Nextcloud http:// URL'leri üretir ve proxy bunları geri gönderir. TRUSTED_PROXIES ayarını gerçek bridge alt ağına ayarlayın ve OVERWRITEPROTOCOL: https değerini sabitleyin.

Nextcloud'u 29 sürümünden doğrudan 31 sürümüne yükseltebilir miyim?

Hayır. Nextcloud, her yükseltmede yalnızca bir ana sürümü destekler; sürümleri atlamak Updates between multiple major versions and downgrades are unsupported. aşamasında durur ve örneği bakım modunda bırakır. Yedek alın, hem app hem de cron servislerinde etiketi bir ana sürüm yükseltin, docker compose pull && docker compose up -d ile occ status kullanarak doğrulayın ve işlemi tekrarlayın.