Panduan ini merangkum proses deployment Nextcloud menggunakan Docker, termasuk konfigurasi awal, troubleshooting database, dan pengaturan Nginx reverse proxy. Deployment ini memisahkan lokasi file konfigurasi dari lokasi volume. Folder volume-docker-mount dipakai khusus untuk menyimpan volume yang akan di-mount ke container Docker, termasuk volume Nextcloud.
Daftar Isi#
- 1. Siapkan struktur folder
- 2. Buat konfigurasi Docker Compose
- 3. Pasang Nginx reverse proxy
- 4. Matikan pendaftaran publik
- Troubleshooting database error
1. Siapkan struktur folder#
Pisahkan folder untuk konfigurasi dan folder untuk data agar maintenance dan backup lebih mudah.
Buat struktur folder di server:
- Folder konfigurasi dan compose:
/path/to/nextcloud-docker - Folder volume Nextcloud:
/path/to/volume-docker-mount/mount-nextcloud - Folder volume PostgreSQL:
/path/to/volume-docker-mount/mount-postgres
- Folder konfigurasi dan compose:
Atur ownership folder database:
Folder PostgreSQL harus bisa ditulisi oleh user internal container.
sudo chown -R 999:999 /path/to/volume-docker-mount/mount-postgres
2. Buat konfigurasi Docker Compose#
Buat file docker-compose.yml di folder konfigurasi lalu gunakan image Nextcloud dan PostgreSQL. Port Nextcloud dibatasi ke 127.0.0.1 agar hanya bisa diakses lewat reverse proxy.
services:
db:
image: postgres:16
container_name: nextcloud-db
restart: always
volumes:
- /path/to/volume-docker-mount/mount-postgres:/var/lib/postgresql/data
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=[ISI PASSWORD DISINI]
networks:
- nextcloud_network
app:
image: nextcloud:stable
container_name: nextcloud-app
restart: always
ports:
- "127.0.0.1:8100:80"
depends_on:
- db
volumes:
- /path/to/volume-docker-mount/mount-nextcloud:/var/www/html/data
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=[ISI PASSWORD DISINI]
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=[ISI PASSWORD DISINI]
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.example.com 127.0.0.1
networks:
- nextcloud_network
networks:
nextcloud_network:
driver: bridgeSetelah file siap, jalankan container dengan Docker Compose.
docker compose up -d3. Pasang Nginx reverse proxy#
Jika Nextcloud diakses melalui Nginx host, tambahkan konfigurasi reverse proxy dan naikkan batas ukuran upload jika perlu.
Buka file konfigurasi Nginx:
sudo nano /etc/nginx/sites-available/nextcloud.confTambahkan server block berikut:
server { listen 80; listen [::]:80; server_name cloud.example.com; client_max_body_size 10G; location / { proxy_pass http://127.0.0.1:8100; 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; } }Uji sintaks dan muat ulang Nginx:
sudo nginx -t sudo systemctl reload nginx
4. Matikan pendaftaran publik#
Jika ingin menonaktifkan tautan pendaftaran publik di halaman login, gunakan perintah OCC berikut.
docker exec --user www-data nextcloud-app php occ config:system:set simpleSignUpLink.shown --value=false --type=booleanPengaturan ini tersimpan di state Nextcloud, jadi tetap aman meskipun container di-down lalu di-up lagi.
Troubleshooting database error#
Kadang proses instalasi awal Nextcloud gagal karena skema database sudah terlanjur dibuat dengan owner yang salah. Gejalanya biasanya muncul error seperti SQLSTATE[42501]: Insufficient privilege.
- Masuk ke shell PostgreSQL di dalam container:
docker exec -it nextcloud-db psql -U postgres- Hapus database lama lalu buat ulang:
DROP DATABASE nextcloud WITH (FORCE);
CREATE DATABASE nextcloud OWNER nextcloud;
\q- Restart service aplikasi:
docker compose restart app
