SSD Nodes Learn
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-07-24

Cara pasang Nextcloud pada VPS guna Docker

Panduan lengkap pasang Nextcloud guna Docker Compose, Postgres, Redis dan TLS. Pelajari cara buat backup yang konsisten supaya data anda sentiasa selamat.

Apa yang anda bina sebenarnya

Panduan ini menjalankan Nextcloud pada VPS menggunakan Docker Compose, meletakkan TLS Let's Encrypt di hadapannya, dan menyediakan sandaran (backup) yang boleh dipulihkan. Empat bekas (container) dan satu proxy: imej nextcloud rasmi yang mendengar pada loopback, Postgres yang menyimpan semua metadata fail, Redis yang menyimpan kunci fail (file locks), salinan kedua imej Nextcloud yang hanya menjalankan gelung cron, dan nginx pada hos yang menamatkan TLS di hadapan kesemuanya. Proses pemasangan mengambil masa dua puluh minit, dan itu bukan bahagian yang penting. Dua keputusan dalam satu jam pertama menentukan sama ada fail anda masih ada dalam masa setahun: pangkalan data sebenar berbanding SQLite, dan sandaran yang merangkumi direktori data, pangkalan data dan config.php sebagai satu set yang konsisten.

Ini mengandaikan penggunaan Ubuntu 24.04 LTS atau Debian 13, Docker Engine dengan plugin Compose v2 yang dipasang daripada repositori Docker sendiri, dan rekod DNS A (serta AAAA jika anda menggunakan IPv6) yang telah menghalakan cloud.example.com ke VPS. Kesemuanya memerlukan pelayan yang anda kawal — tiada cara untuk melakukan penamatan TLS dan dump pangkalan data pada SaaS orang lain.

Sizing: apa yang sebenarnya menggunakan memori

Penggunaan memori Nextcloud didominasi oleh tiga perkara, dan tiada satu pun daripadanya adalah "Nextcloud" itu sendiri.

PHP workers. Imej -apache melayani setiap permintaan serentak daripada proses worker yang memegang interpreter PHP. Setiap worker boleh berkembang sehingga PHP_MEMORY_LIMIT sebelum PHP menghentikan permintaan tersebut. Memori residen senario terburuk anda adalah kira-kira permintaan serentak × had memori, dan klien penyinkronan desktop membuka beberapa sambungan selari bagi setiap pengguna. Tahap konkurensi, bukan jumlah pengguna, menentukan had siling.

Pangkalan data. Postgres melakukan fork backend bagi setiap sambungan dan mengekalkan shared buffers dalam memori. Set kerja (working set) ia berskala mengikut jumlah fail, bukan jumlah bait: oc_filecache menyimpan satu baris bagi setiap fail bagi setiap pengguna. Seratus ribu fail kecil adalah pangkalan data yang lebih berat berbanding seratus fail besar.

Penjanaan pratonton. Menjana imej thumbnail akan menyahkod imej sumber ke dalam memori pada resolusi penuh. Pratonton video menggunakan ffmpeg. Menjalankan occ preview:generate-all melakukan lonjakan tersebut berulang kali secara berturut-turut, dan merupakan cara paling biasa yang menyebabkan VPS kecil mengalami OOM killer.

Redis adalah murah secara relatifnya. Apa-apa yang anda tambah kemudian — Collabora, carian teks penuh, pengimbas antivirus — adalah perkhidmatan residen berasingan dengan jejak memori sendiri, dan perlu dimasukkan dalam pelan saiz anda sebelum anda mengaktifkannya.

Jika RAM anda terhad, berikut adalah langkah kawalan: rendahkan PHP_MEMORY_LIMIT, hadkan preview_max_x / preview_max_y / preview_max_filesize_image, kecilkan enabledPreviewProviders kepada format yang anda benar-benar lihat, dan tetapkan trashbin_retention_obligation serta versions_retention_obligation supaya direktori data tidak berkembang secara senyap sehingga beberapa kali ganda saiz fail anda. Tambah fail swap. Swap adalah perlahan, dan OOM kill semasa proses naik taraf adalah lebih buruk.

Mengapa SQLite gagal

Nextcloud disertakan dengan sokongan SQLite dan imej rasmi akan menggunakannya secara lalai. Jangan gunakan SQLite. SQLite melakukan pensirian penulisan dengan kunci seluruh pangkalan data: hanya satu penulis pada satu masa untuk keseluruhan fail. Nextcloud melakukan penulisan secara berterusan — kunci fail, baris aktiviti, entri cache, keadaan kerja — dan satu klien desktop yang menyelaraskan struktur direktori akan menghantar banyak permintaan selari. Di bawah corak tersebut, anda akan mendapat SQLSTATE[HY000]: General error: 5 database is locked dan HTTP 500s, dan kegagalan berlaku tepat apabila instans mula digunakan secara meluas.

Penukaran kemudian boleh dilakukan dengan occ db:convert-type, tetapi ia merupakan migrasi yang lama dan bersifat menyeluruh pada set data yang sedang aktif. Mulakan dengan Postgres atau MariaDB.

Fail Compose

Letakkan ini dalam /srv/nextcloud/compose.yaml, dengan rahsia dalam fail .env bersebelahan pada mod 600.

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:

Tetapkan tag utama dan semak tag semasa di Docker Hub sebelum anda menyalin 31 secara bulat-bulat. latest akan menukar versi utama pada docker compose pull akan datang, dan Nextcloud tidak menyokong perubahan tersebut.

Direktori data adalah bind mount, bukan volume bernama, atas sebab sengaja: laluan yang boleh ditujukan terus oleh alat sandaran adalah lebih penting daripada kekemasan. Ciptanya dengan UID www-data imej tersebut dan keizinan yang diperlukan oleh Nextcloud:

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

Perhatikan penerbitan port: 127.0.0.1:8080:80. Docker menerbitkan port dengan menulis peraturan DNAT yang dinilai sebelum rantaian INPUT ufw melihat paket tersebut — 8080:80 yang kosong akan mendedahkan Nextcloud tanpa enkripsi ke internet awam tanpa mengira tetapan ufw. Mengikat ke loopback akan menyimpannya daripada antara muka awam. Kemudian firewall hanya perlu membenarkan proxy — dan jika anda tidak mahu membiarkan SSH terbuka kepada seluruh internet, mengakses VPS melalui VPN WireGuard kendiri membolehkan anda membuang port 22 daripada peraturan awam sepenuhnya:

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

Jalankan dengan docker compose up -d, kemudian pantau docker compose logs -f app. Boot pertama akan menyalin keseluruhan struktur aplikasi ke dalam volume dan menjalankan pemasang; kontena tidak akan menjawab sebarang permintaan sehingga proses itu selesai.

TLS dan reverse proxy

Pasang nginx dan certbot daripada distro, bina server block port-80 biasa dengan server_name yang betul, kemudian biarkan certbot menulis semula konfigurasi tersebut. Mekanisme cabaran HTTP-01, pemasa pembaharuan, dan mod kegagalan dibincangkan sepenuhnya dalam mengeluarkan sijil Let's Encrypt dengan certbot dan nginx pada Ubuntu 24.04:

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

Certbot menambah baris ssl_certificate dan penghalaan :80:443, serta memasang pemasa systemd untuk memperbaharui sijil 90 hari tersebut. Sahkan kewujudannya dengan systemctl list-timers | grep certbot — pemasa pembaharuan yang tidak diaktifkan akan menyebabkan sijil tamat tempoh dalam masa 90 hari.

Blok proxy:

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;
    }
}

Pada nginx 1.25 dan versi lebih baharu, tambah http2 on;. Ubuntu 24.04 menggunakan binaan lama di mana setara dengannya ialah listen 443 ssl http2;. nginx -t akan memberitahu anda binaan mana yang disokong.

client_max_body_size dan timeout bacaan yang panjang adalah punca muat naik besar tidak terputus di tengah jalan. proxy_request_buffering off mengalirkan muat naik tersebut dan bukannya menyimpan keseluruhan fail ke dalam cakera proxy terlebih dahulu.

nginx pada hos adalah cara paling mudah untuk satu aplikasi. Jika Nextcloud akan berkongsi VPS dengan kontena lain, menjalankan Traefik sebagai reverse proxy Docker Compose untuk pelbagai aplikasi memindahkan penghalaan dan pengeluaran sijil ke dalam label kontena, manakala isu client_max_body_size dan timeout yang sama muncul semula sebagai tetapan middleware dan transport.

trusted_proxies dan overwriteprotocol

Inilah punca utama kegagalan kebanyakan instans Nextcloud yang dihoskan sendiri, dan simptom yang muncul kelihatan tidak berkaitan dengan punca sebenar.

X-Forwarded-Proto: https hanya akan diiktiraf apabila permintaan datang daripada alamat yang disenaraikan dalam trusted_proxies. Jika tidak diiktiraf, Nextcloud menganggap permintaan tersebut adalah HTTP biasa dan mengeluarkan URL http://; proxy kemudian menghalakan URL tersebut ke HTTPS; pelayar web mengikut arahan itu; Nextcloud mengeluarkan http:// sekali lagi. Inilah yang menyebabkan gelung penghalaan (redirect loop). OVERWRITEPROTOCOL: https menetapkan skema tersebut tanpa mengira keadaan.

Kesilapan dalam TRUSTED_PROXIES adalah alamat yang dilihat oleh Nextcloud bukanlah 127.0.0.1. nginx berjalan pada hos dan menyambung ke port yang diterbitkan, jadi kontena melihat gateway jambatan Docker — iaitu sesuatu dalam 172.x. Cari subnet yang sebenar:

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

Masukkan CIDR tersebut (atau 172.16.0.0/12 yang merangkuminya) ke dalam TRUSTED_PROXIES. Jika tetapan terlalu luas, mana-mana klien boleh memalsukan X-Forwarded-For; jika tetapan salah, setiap log masuk akan kelihatan datang daripada alamat gateway, perlindungan brute-force akan menyekat seluruh instans anda, dan ringkasan admin akan memaparkan "The reverse proxy header configuration is incorrect, or you are accessing Nextcloud from a trusted proxy."

OVERWRITECLIURL penting untuk kontena cron, yang tidak mempunyai permintaan masuk untuk mengenal pasti nama hos. Tanpa tetapan ini, tugasan latar belakang akan menjana pautan ke localhost dan pemberitahuan e-mel akan menghantar URL yang tidak boleh digunakan.

Tugasan latar belakang: cron, bukan AJAX

Pelaksana tugasan lalai Nextcloud ialah AJAX: tugasan dilaksanakan sebagai kesan sampingan apabila seseorang memuatkan halaman. Tiada sesiapa melayari laman pada jam 04:00, jadi proses tamat tempoh sampah, pembersihan versi, pratonton dan percubaan semula federated akan terhenti. Simptom pertama ialah direktori data yang terus membesar tanpa henti. Perkhidmatan cron di atas menjalankan gelung /cron.sh rasmi pada volum yang sama. Beritahu Nextcloud untuk menjangkakan ia:

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

Setiap arahan occ mengikut format tersebut: docker compose exec -u www-data app php occ <command>. Anda disarankan untuk menggunakan alias.

Sandaran: tiga perkara, atau tiada langsung

Sandaran sistem fail sahaja akan memulihkan ke dalam instans yang rosak. Direktori data menyimpan bit; Postgres menyimpan cache fail, perkongsian, pengguna, dan keadaan aplikasi; config.php menyimpan kredensial pangkalan data, ID instans, dan salt kata laluan. Jika fail dipulihkan tanpa pangkalan data, Nextcloud tidak dapat melihatnya. Jika pangkalan data dipulihkan tanpa config.php, ia tidak dapat membuka pangkalan data tersebut. Jika pangkalan data lama dipulihkan ke dalam direktori data yang lebih baharu, anda akan mendapat perkongsian yang merujuk kepada fail yang telah berpindah lokasi.

Sandar ketiga-tiga komponen ini daripada instans yang telah dihentikan (quiesced):

#!/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/

Mod penyelenggaraan (maintenance mode) memastikan fail dump dan salinan fail adalah selari. Jika anda melangkau langkah ini, anda mungkin akan merakam pangkalan data yang merujuk kepada fail yang belum sempat disalin oleh rsync. Perhatikan bahawa skrip ini menyimpan dump pangkalan data mengikut cap masa, tetapi hanya satu salinan cermin (rolling mirror) untuk direktori data — rsync --delete akan menulis semula fail tersebut setiap kali dijalankan — jadi hanya dump yang terbaharu akan sepadan dengan salinan fail tersebut.

Kemudian, pindahkan sandaran tersebut keluar dari pelayan. Sandaran yang disimpan pada VPS yang sama dengan data asal hanyalah salinan, bukan sandaran. Menggunakan restic terhadap storan objek atau hos kedua adalah penyelesaian biasa, dan fungsi deduplikasi ia mengendalikan direktori data dengan jauh lebih baik daripada fail tarball harian. Tetapan lengkap, daripada inisialisasi repositori hingga ke pemasa harian dan latihan pemulihan, ada dalam sandaran VPS luar kotak dengan restic.

Pemulihan bukan sekadar proses terbalik. Timbunan (stack) yang baru dimulakan akan menjalankan pemasang dan menulis config.php yang baharu — ID instans dan salt kata laluan yang baharu — dan mengimport dump ke atas identiti baharu tersebut akan menyebabkan sesi dan token perkongsian menjadi rosak. Masukkan identiti lama terlebih dahulu, mengikut urutan ini:

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 menyelaraskan cache fail dengan apa yang sebenarnya ada pada cakera. Lakukan latihan ini sekali pada VPS simpanan sebelum anda memerlukannya.

Naik Taraf: satu versi utama pada satu masa

Nextcloud hanya menyokong naik taraf satu versi utama pada satu masa. Melompat dari 29 ke 31 akan menyebabkan kegagalan — ia akan gagal dengan Exception: Updates between multiple major versions and downgrades are unsupported. dan menyebabkan sistem berada dalam mod penyelenggaraan.

Proses naik taraf Docker adalah: buat sandaran, edit tag daripada 31 kepada 32 dalam kedua-dua perkhidmatan app dan cron, kemudian docker compose pull && docker compose up -d, kemudian docker compose logs -f app. Image entrypoint akan mengesan kod baharu berbanding data sedia ada dan menjalankan occ upgrade secara automatik. Jangan ganggu proses ini. Apabila log berhenti bergerak, jalankan docker compose exec -u www-data app php occ status dan semak versionstring serta pastikan aplikasi telah diaktifkan semula.

Dua peraturan untuk mengelakkan masalah: naik taraf satu versi utama, sahkan, kemudian naik taraf versi utama seterusnya. Dan jangan sesekali mengedit tag pada perkhidmatan app tanpa mengedit cron supaya sepadan — menggunakan dua versi Nextcloud yang berbeza pada satu pangkalan data akan menyebabkan kerosakan data.

Ralat yang akan anda lihat

"Your data directory is readable by other users. Please change the permissions to 0770." Direktori bind-mount mempunyai bit baca untuk group atau world. sudo chmod 0770 /srv/nextcloud/data dan 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 merujuk ke lokasi yang tidak pernah diinisialisasi oleh Nextcloud — ralat taip pada path, atau direktori kosong baharu telah menggantikan direktori asal. Pastikan path hos sepadan dengan baris volume.

"Access through untrusted domain." Nama hos dalam permintaan tidak terdapat dalam trusted_domains. NEXTCLOUD_TRUSTED_DOMAINS hanya terpakai semasa pemasangan pertama; selepas itu, tetapkan secara live: occ config:system:set trusted_domains 1 --value=cloud.example.com.

502 Bad Gateway, dengan connect() failed (111: Connection refused) while connecting to upstream dalam /var/log/nginx/error.log. nginx tidak menemui apa-apa pada 127.0.0.1:8080. Sama ada kontena masih dalam proses inisialisasi (semak docker compose logs app), kontena telah berhenti (docker compose ps), atau baris publish tidak sepadan dengan port proxy_pass. Sahkan dengan ss -ltnp | grep 8080.

Gelung pengalihan (redirect loop), atau amaran "insecure" dalam ringkasan admin. OVERWRITEPROTOCOL: https hilang, atau TRUSTED_PROXIES tidak mengandungi subnet gateway Docker. Rujuk bahagian proxy di atas.

LockedException: "files/..." is locked. Jika REDIS_HOST ditetapkan, imej akan mengkonfigurasi Redis sebagai backend penguncian (locking backend) dan masalah stale locks adalah jarang berlaku. Tanpa ia, kunci disimpan dalam jadual pangkalan data oc_file_locks dan permintaan yang terhenti semasa penulisan akan meninggalkan baris data. Pastikan Redis benar-benar digunakan — occ config:system:get memcache.locking sepatutnya memulangkan kelas Redis — sebelum anda memadam baris kunci secara manual.

"The PHP memory limit is below the recommended value of 512MB." Tingkatkan PHP_MEMORY_LIMIT dan bina semula kontena. Ingat kesan tindakan ini terhadap had maksimum anda.

Apa yang gagal pada skala besar

Halangan pertama ialah direktori data yang melebihi saiz volum. Membesarkan volum pada VPS memerlukan proses resize dan pembesaran filesystem. Proses ini lebih sukar dilakukan apabila cakera sudah 100% penuh — tetapkan amaran penggunaan cakera sekarang, bukan kemudian.

Halangan kedua ialah oc_filecache. Senarai fail dan imbasan penyelarasan menjadi perlahan apabila jumlah baris meningkat. Penyelesaiannya adalah melalui pengurusan pangkalan data: simpan Postgres pada storan pantas, berikan memori kongsi yang mencukupi, dan hapuskan data sampah serta versi lama menggunakan tetapan pengekalan berbanding membiarkannya terkumpul selamanya.

Halangan ketiga ialah penjanaan pratonton yang bersaing dengan proses lain. Pada pelayan kecil, hadkan penyedia pratonton dan jangan sesekali menjalankan occ preview:generate-all semasa waktu bekerja.

Selain itu, jawapan jujurnya ialah komponen tambahan memerlukan mesin sendiri. Collabora dan carian teks penuh adalah perkhidmatan residen berasingan dengan profil memori tersendiri. Meletakkannya pada mesin yang sama dengan salinan fail tunggal anda akan membesarkan domain kegagalan tanpa sebarang manfaat. Pindahkan storan fail ke storan utama serasi S3 apabila volum tidak lagi sesuai — perlu diingat bahawa ini menjadikan sandaran lebih sukar, bukan lebih mudah: pangkalan data masih menyimpan metadata, dan ia mesti dieksport serentak dengan bucket tersebut.

Apabila instance sudah melayani pengguna sebenar, letakkan Uptime Kuma di hadapannya supaya anda mengetahui tentang waktu henti sebelum klien penyelarasan mengesannya. Awan peribadi berfungsi dengan baik bersama pelayan mel anda sendiri, dan jika anda tidak mahu menyambungkan perkhidmatan secara manual, Cloudron, CasaOS dan Coolify adalah platform yang melakukan perkara tersebut untuk anda.

FAQ

Bolehkah saya menjalankan Nextcloud menggunakan SQLite berbanding Postgres?

Boleh, imej rasmi membenarkannya, tetapi satu klien penyinkronan desktop yang menghantar permintaan selari akan menyebabkan ralat SQLSTATE[HY000]: General error: 5 database is locked dan HTTP 500. SQLite menggunakan kunci tulis (write lock) pada seluruh pangkalan data, manakala Nextcloud melakukan penulisan secara berterusan — kunci fail, baris aktiviti, dan keadaan kerja. Mulakan dengan Postgres atau MariaDB; occ db:convert-type wujud tetapi ia adalah migrasi data langsung yang panjang dan berisiko tinggi.

Berapakah RAM yang sebenarnya diperlukan oleh VPS Nextcloud?

Saiz ditentukan oleh keupayaan konkurensi, bukan jumlah pengguna. Penggunaan memori residen pada tahap terburuk adalah kira-kira jumlah permintaan selari didarab dengan PHP_MEMORY_LIMIT, ditambah dengan shared buffers Postgres dan satu backend bagi setiap sambungan, serta lonjakan penjanaan pratonton. Mesin 2 GB boleh menjalankan instans isi rumah kecil jika anda mengehadkan pratonton dan menambah swap; jika anda menambah Collabora atau carian teks penuh, anda memerlukan saiz untuk set perkhidmatan residen yang kedua.

Mengapa muat naik besar gagal di sebalik nginx reverse proxy?

Dua tetapan pada proxy biasanya menjadi punca: client_max_body_size yang dibiarkan pada nilai lalai 1 MB akan memotong permintaan, manakala nilai proxy_read_timeout / proxy_send_timeout yang pendek akan memutuskan pemindahan data yang lama di tengah jalan. Tetapkan kedua-duanya dengan nilai yang besar, tukar proxy_request_buffering off kepada stream berbanding spool, dan naikkan PHP_UPLOAD_LIMIT pada kontena aplikasi untuk menyamakannya.

Mengapa Nextcloud mengalami pusingan lencongan (redirect loop) atau memberi amaran tentang reverse proxy?

Kontena tidak melihat nginx pada 127.0.0.1 — ia melihat gerbang jambatan Docker (Docker bridge gateway) di dalam 172.x. Apabila alamat tersebut tiada dalam TRUSTED_PROXIES, pengepala X-Forwarded-Proto: https akan diabaikan, Nextcloud akan mengeluarkan URL http://, dan proxy akan menghantarnya semula. Tetapkan TRUSTED_PROXIES kepada subnet jambatan yang sebenar dan tetapkan OVERWRITEPROTOCOL: https.

Bolehkah saya menaik taraf Nextcloud dari 29 terus ke 31?

Tidak. Nextcloud hanya menyokong satu versi utama bagi setiap naik taraf, dan melangkau versi akan terhenti pada Updates between multiple major versions and downgrades are unsupported., menyebabkan instans berada dalam mod penyelenggaraan. Buat sandaran, naikkan tag satu versi utama pada kedua-dua perkhidmatan app dan cron, docker compose pull && docker compose up -d, sahkan dengan occ status, kemudian ulangi proses tersebut.