Skip to main content
Deploy Nextcloud via Docker
  1. doc/

Deploy Nextcloud via Docker

·2 mins·

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
#

Pisahkan folder untuk konfigurasi dan folder untuk data agar maintenance dan backup lebih mudah.

  1. 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
  2. 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: bridge

Setelah file siap, jalankan container dengan Docker Compose.

docker compose up -d

3. Pasang Nginx reverse proxy
#

Jika Nextcloud diakses melalui Nginx host, tambahkan konfigurasi reverse proxy dan naikkan batas ukuran upload jika perlu.

  1. Buka file konfigurasi Nginx:

    sudo nano /etc/nginx/sites-available/nextcloud.conf
  2. Tambahkan 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;
        }
    }
  3. 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=boolean

Pengaturan 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.

  1. Masuk ke shell PostgreSQL di dalam container:
docker exec -it nextcloud-db psql -U postgres
  1. Hapus database lama lalu buat ulang:
DROP DATABASE nextcloud WITH (FORCE);
CREATE DATABASE nextcloud OWNER nextcloud;
\q
  1. Restart service aplikasi:
docker compose restart app
Askarhabibulloh
Author
Askarhabibulloh