Αυτός ο οδηγός περιγράφει μια πλήρη εγκατάσταση του Nextcloud χρησιμοποιώντας Docker Compose, εστιάζοντας στην απόδοση και την ευκολία συντήρησης. Χρησιμοποιείται ο Caddy ως reverse proxy, το Nextcloud FPM για την εφαρμογή, PostgreSQL για τη βάση δεδομένων και Redis για caching.
Domain Name: cloud.iosifidis.gr
Η εγκατάσταση βασίζεται σε Docker containers για μέγιστη απομόνωση, ασφάλεια και ευκολία συντήρησης.
- Web Server / Reverse Proxy: Caddy (διαχειρίζεται SSL/TLS, στατικά αρχεία και FastCGI).
- Application Server: Nextcloud FPM (Alpine-based) για υψηλή απόδοση.
- Βάση Δεδομένων: PostgreSQL 16 (Alpine).
- Caching / Locking: Redis 7 (Alpine).
Όλα τα δεδομένα αποθηκεύονται σε ένα κεντρικό mount point /data (προτείνεται δίσκος τουλάχιστον 200GB).
/data/
├── nextcloud/
│ ├── app/ # Κώδικας Nextcloud (bind mount από το container)
│ ├── nc_data/ # Αρχεία χρηστών (User Data)
│ ├── db/ # Δεδομένα PostgreSQL
│ └── docker-compose.yml # Ρυθμίσεις Containers Nextcloud
├── caddy/
│ ├── Caddyfile # Ρυθμίσεις Web Server Caddy
│ └── docker-compose.yml # Ρυθμίσεις Container Caddy
└── backups/
└── databases/ # SQL Dumps για το Kopia
Δημιουργήστε τον φάκελο /data/nextcloud και το αρχείο docker-compose.yml εντός του.
Αρχείο: /data/nextcloud/docker-compose.yml
version: '3.8'
services:
db:
image: postgres:16-alpine
container_name: nextcloud_db
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=your_db_password # Αλλάξτε το σε ένα ισχυρό κωδικό
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
volumes:
- ./db:/var/lib/postgresql/data
networks:
- backend
redis:
image: redis:7-alpine
container_name: nextcloud_redis
restart: unless-stopped
networks:
- backend
app:
image: nextcloud:fpm-alpine # Χρησιμοποιούμε την FPM έκδοση για συνεργασία με Caddy
container_name: nextcloud_app
restart: unless-stopped
depends_on:
- db
- redis
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=your_db_password # Πρέπει να ταιριάζει με τον κωδικό της βάσης
- REDIS_HOST=redis
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.iosifidis.gr # Το domain σας
- TRUSTED_PROXIES=caddy # Το όνομα του Caddy container
# Εναλλακτικά για TRUSTED_PROXIES (αν υπάρχουν προβλήματα με το όνομα container)
# - TRUSTED_PROXIES=172.16.0.0/12 # Εδώ λέμε στο Nextcloud να εμπιστεύεται το δίκτυο του Caddy
- OVERWRITEPROTOCOL=https
- PHP_MEMORY_LIMIT=1G
- PHP_UPLOAD_LIMIT=10G
volumes:
- ./app:/var/www/html # Εδώ θα μπει ο κώδικας του Nextcloud
- ./nc_data:/var/www/data # Εδώ θα αποθηκευτούν τα αρχεία των χρηστών
networks:
- backend
- web
networks:
backend:
driver: bridge
web: # Αυτό το δίκτυο πρέπει να είναι external και να δημιουργηθεί εκ των προτέρων
external: trueΠριν ξεκινήσετε τον Caddy, βεβαιωθείτε ότι το web network υπάρχει.
docker network create webΔημιουργήστε τον φάκελο /data/caddy και το αρχείο docker-compose.yml εντός του.
Αρχείο: /data/caddy/docker-compose.yml
version: '3.8'
services:
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./site:/srv # Προαιρετικό, για στατικά αρχεία αν χρειαστεί
- ./data:/data # Για certificates και cache του Caddy
- ./config:/config # Για config του Caddy
# Συνδέουμε τους φακέλους του Nextcloud με το Caddy σε read-only
- /data/nextcloud/app:/var/www/html:ro
- /data/nextcloud/nc_data:/var/www/data:ro
networks:
- web
networks:
web:
external: trueΔημιουργήστε το αρχείο Caddyfile στον φάκελο /data/caddy.
Αρχείο: /data/caddy/Caddyfile
cloud.iosifidis.gr { # Το domain σας
# Ορίζουμε τον ριζικό φάκελο του Nextcloud για το Caddy
root * /var/www/html
file_server
encode zstd gzip
# PHP-FPM Configuration για το Nextcloud
php_fastcgi nextcloud_app:9000 { # Επικοινωνία με το Nextcloud FPM container
env FRONT_END_HTTPS on
index index.php
}
# CalDAV/CardDAV Redirects (για mobile clients)
redir /.well-known/carddav /remote.php/dav 301
redir /.well-known/caldav /remote.php/dav 301
# Security Headers για βελτιωμένη ασφάλεια
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Referrer-Policy "no-referrer"
X-XSS-Protection "1; mode=block"
}
# Απαγόρευση πρόσβασης σε ευαίσθητα αρχεία/καταλόγους
@forbidden {
path /data/* /config/* /db_structure/* /.xml /etc/*
}
respond @forbidden 403
# Ορίζουμε το μέγιστο μέγεθος request body (για uploads)
request_body {
max_size 10GB
}
}-
Ξεκινήστε τα Nextcloud Containers: Πηγαίνετε στον φάκελο
/data/nextcloudκαι εκτελέστε:docker compose up -d
-
Ξεκινήστε το Caddy Container: Πηγαίνετε στον φάκελο
/data/caddyκαι εκτελέστε:docker compose up -d
-
Διαχείριση Δικαιωμάτων (Permissions) Η σωστή απόδοση ιδιοκτησίας είναι κρίσιμη για τη λειτουργία των Alpine containers και την αποφυγή προβλημάτων.
Κατάλογος Χρήστης (UID) Εντολή /data/nextcloud/app82 (www-data) sudo chown -R 82:82 app/data/nextcloud/nc_data82 (www-data) sudo chown -R 82:82 nc_data/data/nextcloud/db70 (postgres) sudo chown -R 70:70 dbΕντολές επιβολής:
sudo chown -R 82:82 /data/nextcloud/app /data/nextcloud/nc_data sudo chown -R 70:70 /data/nextcloud/db sudo chmod 700 /data/nextcloud/db # Περιορίζουμε τα δικαιώματα του DB φακέλου -
Ολοκλήρωση Εγκατάστασης μέσω Browser: Επισκεφθείτε το
https://cloud.iosifidis.grστον browser σας.- Όταν σας ζητηθεί ο "Φάκελος δεδομένων" (Data folder), σβήστε το
/var/www/html/dataκαι γράψτε:/var/www/data. - Συμπληρώστε τα στοιχεία της βάσης δεδομένων όπως τα ορίσατε στο
docker-compose.yml.
- Όταν σας ζητηθεί ο "Φάκελος δεδομένων" (Data folder), σβήστε το
Οι εντολές occ εκτελούνται μέσω του Nextcloud Docker container ως χρήστης www-data.
- Προσθήκη ευρετηρίων που λείπουν:
docker exec --user www-data nextcloud_app php occ db:add-missing-indices - Ρύθμιση Περιοχής Τηλεφώνου:
docker exec --user www-data nextcloud_app php occ config:system:set default_phone_region --value="GR"
- Μεταναστεύσεις τύπων MIME (προαιρετικό):
docker exec --user www-data nextcloud_app php occ maintenance:repair --include-expensive - Ώρα έναρξης παραθύρου συντήρησης (προαιρετικό, για updates):
docker exec --user www-data nextcloud_app php occ config:system:set maintenance_window_start --type=integer --value=1 - Απενεργοποίηση του AppAPI: Απενεργοποιεί το σύστημα εγκατάστασης "Εξωτερικών Εφαρμογών" (Ex-Apps), οι οποίες τρέχουν σε ξεχωριστά Docker containers (π.χ., Nextcloud Assistant, Local AI).
docker exec --user www-data nextcloud_app php occ app:disable app_api - Ενεργοποίηση Maintenance Mode (για αναβαθμίσεις):
docker exec --user www-data nextcloud_app php occ maintenance:mode --on - Απενεργοποίηση Maintenance Mode:
docker exec --user www-data nextcloud_app php occ maintenance:mode --off
Συχνά, μετά την προσθήκη ευρετηρίων, το Nextcloud μπορεί να ζητήσει και άλλες μικροδιορθώσεις στη βάση. Αν δείτε παρόμοια σφάλματα, τρέξτε και τις παρακάτω εντολές:
-
Για στήλες που λείπουν:
docker exec --user www-data nextcloud_app php occ db:add-missing-columns -
Για πρωτεύοντα κλειδιά (primary keys) που λείπουν:
docker exec --user www-data nextcloud_app php occ db:add-missing-primary-keys
Για βέλτιστη απόδοση, συνιστάται η χρήση του System Cron του Host αντί για AJAX ή Webcron.
Προσθήκη στο crontab -e του Debian host:
# Nextcloud Background Jobs (κάθε 5 λεπτά)
*/5 * * * * docker exec --user www-data nextcloud_app php -f /var/www/html/cron.php
# Database Backup Dump (καθημερινά στις 02:50 π.μ.)
50 2 * * * docker exec nextcloud_db pg_dumpall -U nextcloud > /data/backups/databases/nextcloud_db.sqlΓια να διαχειριστείτε τον χώρο που καταλαμβάνουν οι παλιές εκδόσεις αρχείων και ο κάδος ανακύκλωσης, μπορείτε να ορίσετε πολιτικές διατήρησης. Προσθέστε αυτές τις γραμμές στο αρχείο app/config/config.php (ή μέσω occ):
'versions_retention_obligation' => 'auto, 30', // Διαγραφή παλιών εκδόσεων μετά από 30 μέρες ή αν γεμίσει ο χώρος
'trashbin_retention_obligation' => 'auto, 30', // Διαγραφή αντικειμένων στον κάδο μετά από 30 μέρεςΕναλλακτικά, μέσω τερματικού:
docker exec --user www-data nextcloud_app php occ config:system:set versions_retention_obligation --value="auto, 30"
docker exec --user www-data nextcloud_app php occ config:system:set trashbin_retention_obligation --value="auto, 30"Ακολουθήστε τα παρακάτω βήματα για την αναβάθμιση του Nextcloud.
- Λήψη Backup: Δημιουργήστε πλήρες backup (βάση δεδομένων και αρχεία χρηστών) χρησιμοποιώντας το Kopia ή άλλη μέθοδο. (Θα το καλύψουμε σε άλλο οδηγό).
- Αλλαγή του tag της εικόνας: Επεξεργαστείτε το
/data/nextcloud/docker-compose.ymlκαι αλλάξτε το tag της εικόνας του Nextcloud (π.χ., από29-fpm-alpineσε30-fpm-alpine).- Σημαντική Σημείωση: Ποτέ μην πηδάτε major εκδόσεις (π.χ., από 28 σε 30). Οι αναβαθμίσεις πρέπει να γίνονται διαδοχικά (28 -> 29 -> 30).
- Εκτέλεση αναβάθμισης: Από τον φάκελο
/data/nextcloud, εκτελέστε:docker compose pull && docker compose up -d - Έλεγχος και ολοκλήρωση αναβάθμισης: Ελέγξτε για αναγκαίες αλλαγές στη βάση δεδομένων και τον κώδικα:
docker exec --user www-data nextcloud_app php occ upgrade