Install Collabora Online (CODE) di Nextcloud Menggunakan Docker

Install Collabora Online (CODE) di Nextcloud Menggunakan Docker

Bitnesia Software Apr 12, 2026 63 EN

Nextcloud menyediakan penyimpanan file terpusat di server sendiri, namun secara default tidak dilengkapi kemampuan mengedit dokumen secara langsung di browser. Untuk menghadirkan pengalaman kolaborasi seperti Google Docs atau Microsoft 365 di infrastruktur privat, dibutuhkan sebuah engine editor dokumen yang terintegrasi: Collabora Online.

Apa Itu Collabora Online (CODE)?

Collabora Online Development Edition (CODE) adalah versi open-source dari Collabora Online, berbasis LibreOffice. CODE berjalan sebagai server terpisah yang mengekspos API berbasis protokol WOPI (Web Application Open Platform Interface). Nextcloud berkomunikasi dengan CODE melalui protokol ini untuk menampilkan editor dokumen yang dapat memproses format .docx, .xlsx, .pptx, .odt, .ods, dan berbagai format Office lainnya.

Mengapa Menggunakan Docker?

Collabora Online tersedia dalam dua metode instalasi: paket native dan Docker image. Docker adalah pilihan yang lebih direkomendasikan karena beberapa alasan:

  • Isolasi: Container Docker berjalan di lingkungannya sendiri, tidak mencemari dependensi library sistem host.
  • Kemudahan update: Memperbarui ke versi CODE terbaru hanya membutuhkan docker pull collabora/code dan restart container tanpa menyentuh konfigurasi sistem.
  • Konsistensi: Image yang sama berjalan identik di berbagai lingkungan (development, staging, production).
  • Stabilitas: Ketergantungan runtime dikemas bersama image, mengeliminasi masalah versi library yang tidak kompatibel dengan OS host.

Panduan ini melanjutkan instalasi Nextcloud dengan Nginx yang sudah berjalan di https://nextcloud.example.com. Jika Nextcloud belum terinstal, ikuti terlebih dahulu panduan Install Nextcloud dengan Nginx di Ubuntu 24.04 .

Prasyarat

Pastikan semua prasyarat berikut terpenuhi sebelum memulai:

PrasyaratDetail
OSLinux, disarankan distro Ubuntu 24.04 LTS
NextcloudSudah berjalan dengan HTTPS (misalnya https://nextcloud.example.com)
Web ServerNginx (sudah terpasang untuk Nextcloud)
Docker & Docker ComposeVersi terbaru (Docker Engine v24+ / Compose v2)
Subdomain CollaboraSubdomain terpisah diarahkan ke IP server yang sama, contoh: collabora.example.com
Sertifikat SSLLet's Encrypt via Certbot (akan di-generate dalam panduan ini)
Aksesroot atau user dengan hak sudo
FirewallPort 80 dan 443 terbuka ke publik

Install Docker

Jika Docker belum terpasang di server, ikuti langkah berikut untuk menginstal Docker Engine:

sudo sh -c "curl -fsSL https://get.docker.com/ | sh"

Verifikasi Instalasi:

docker -v
docker compose version

Langkah 1: Konfigurasi Docker Compose

Menggunakan Docker Compose adalah cara yang lebih terstruktur dan mudah dikelola dibandingkan menjalankan container langsung dengan perintah docker run. File docker-compose.yml berfungsi sebagai dokumentasi hidup konfigurasi container.

Buat Direktori Kerja

Buat direktori khusus untuk menyimpan konfigurasi Collabora. Memisahkan konfigurasi per service memudahkan manajemen dan backup.

sudo mkdir -p /opt/collabora

Buat File docker-compose.yml

Buat file docker-compose.yml dengan konten berikut. Ganti nilai nextcloud.example.com, admin_username, dan admin_password sesuai konfigurasi Anda.

sudo nano /opt/collabora/docker-compose.yml

Isi file dengan konfigurasi berikut:

services:
  collabora:
    image: collabora/code
    container_name: collabora
    ports:
      - "127.0.0.1:9980:9980"
    environment:
      - aliasgroup1=https://nextcloud.example.com:443
      - username=admin
      - password=ganti_dengan_password_kuat
      - extra_params=--o:ssl.enable=false --o:ssl.termination=true
    cap_add:
      - MKNOD
    restart: always
VariabelKeterangan
image: collabora/codeDocker image resmi Collabora Online Development Edition dari Docker Hub.
ports: 127.0.0.1:9980:9980Container hanya listen di localhost:9980, tidak terekspos langsung ke internet. Nginx yang akan meneruskan trafik dari luar.
aliasgroup1URL lengkap Nextcloud (termasuk port 443 untuk HTTPS) yang diizinkan mengakses Collabora. Jika ada lebih dari satu Nextcloud, gunakan aliasgroup2=https://nextcloud2.example.com:443, dst.
username & passwordKredensial untuk mengakses panel admin Collabora di /browser/dist/admin/admin.html. Gunakan password yang kuat.
extra_params--o:ssl.enable=false menonaktifkan SSL internal container karena SSL akan di-terminate oleh Nginx (SSL termination). Ini adalah konfigurasi yang benar dan aman untuk setup dengan reverse proxy. --o:ssl.termination=true memberi tahu CODE bahwa ada reverse proxy yang menangani SSL di depannya.
cap_add: MKNODCapability Linux yang dibutuhkan oleh proses internal LibreOffice di dalam container untuk membuat device node sementara.
restart: alwaysContainer akan otomatis restart jika crash atau saat server di-reboot.

Langkah 2: Menjalankan Container Collabora

Dari direktori /opt/collabora, jalankan perintah berikut untuk mengunduh image dan menjalankan container dalam mode background (detached):

cd /opt/collabora
sudo docker compose up -d

Perintah up -d membuat dan menjalankan container berdasarkan konfigurasi di docker-compose.yml.

Verifikasi container berjalan:

sudo docker compose ps

Kolom STATUS harus menampilkan Up. Jika container berada dalam status Restarting, ada masalah konfigurasi yang perlu diperiksa melalui log.

Container Collabora membutuhkan beberapa detik untuk menginisialisasi semua proses LibreOffice internal. Pantau log untuk memastikan startup berjalan normal:

sudo docker compose logs -f collabora

Proses startup dianggap berhasil jika Anda melihat baris yang mengindikasikan server siap menerima koneksi, seperti:

wsd-00001-00001 ...  coolwsd:  Listening on port 9980 of type HTTP
wsd-00001-00001 ...  coolwsd:  Ready to accept connections.

Tekan Ctrl+C untuk keluar dari mode follow log.

Pastikan container benar-benar listen di 127.0.0.1:9980:

ss -tlnp | grep 9980

Output yang diharapkan:

LISTEN 0      4096       127.0.0.1:9980      0.0.0.0:*

Bahwa port hanya bind ke 127.0.0.1 (loopback) adalah hal yang benar, berarti Collabora tidak terekspos langsung ke internet.

Langkah 3: Konfigurasi Nginx Reverse Proxy

Bagian ini sering menjadi titik kegagalan utama. Collabora Online menggunakan WebSocket untuk komunikasi real-time antara browser dan server dokumen. Konfigurasi Nginx harus secara eksplisit menangani upgrade koneksi HTTP ke WebSocket (wss://). Kesalahan pada bagian ini menyebabkan editor terbuka tetapi tidak dapat menyimpan perubahan, atau koneksi terputus saat mengedit.

Buat Konfigurasi Nginx Sementara (HTTP Only)

Pertama, buat konfigurasi untuk collabora.example.com dengan HTTP saja. Ini diperlukan agar Certbot dapat memvalidasi kepemilikan domain via HTTP-01 challenge sebelum meng-generate sertifikat SSL.

sudo nano /etc/nginx/sites-available/collabora.conf

Isi dengan konfigurasi minimal berikut:

server {
    listen 80;
    server_name collabora.example.com;

    location / {
        return 200 "Collabora OK";
        add_header Content-Type text/plain;
    }
}

Aktifkan dan reload Nginx:

sudo ln -s /etc/nginx/sites-available/collabora.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Generate Sertifikat SSL dengan Certbot

Jika certbot belum terpasang di server, install terlebih dahulu:

sudo apt install -y certbot python3-certbot-nginx

Generate sertifikat untuk subdomain Collabora:

sudo certbot --non-interactive \
  --agree-tos \
  --no-eff-email \
  -m [email protected] \
  --nginx \
  -d collabora.example.com

Certbot akan memodifikasi file konfigurasi Nginx dan menambahkan blok SSL secara otomatis. Namun, karena konfigurasi reverse proxy untuk Collabora cukup spesifik (terutama untuk WebSocket), kita akan mengganti konfigurasi tersebut secara manual di langkah berikutnya.

Konfigurasi Nginx Lengkap dengan Reverse Proxy

Timpa konfigurasi Nginx yang telah dimodifikasi Certbot dengan konfigurasi lengkap berikut. Lokasi sertifikat SSL (/etc/letsencrypt/live/collabora.example.com/) dibiarkan tetap karena sudah di-generate oleh Certbot.

sudo nano /etc/nginx/sites-available/collabora.conf

Ganti seluruh isi file dengan konfigurasi berikut:

server {
    listen 80;
    server_name collabora.example.com;

    # Redirect semua trafik HTTP ke HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name collabora.example.com;

    # Sertifikat SSL dari Let's Encrypt
    ssl_certificate     /etc/letsencrypt/live/collabora.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/collabora.example.com/privkey.pem;
    include             /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam         /etc/letsencrypt/ssl-dhparams.pem;

    # Header keamanan
    add_header X-Content-Type-Options    nosniff;
    add_header X-Frame-Options           SAMEORIGIN;
    add_header X-XSS-Protection          "1; mode=block";
    add_header Referrer-Policy           no-referrer;

    # Ukuran max body untuk upload dokumen besar
    client_max_body_size 100M;

    # -------------------------------------------------------
    # Static assets: HTML, JS, CSS, gambar (browser client)
    # -------------------------------------------------------
    location /browser {
        proxy_pass         http://127.0.0.1:9980;
        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;
    }

    # -------------------------------------------------------
    # WOPI discovery endpoint
    # -------------------------------------------------------
    location /hosting/discovery {
        proxy_pass         http://127.0.0.1:9980;
        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;
    }

    # -------------------------------------------------------
    # Capabilities endpoint
    # -------------------------------------------------------
    location /hosting/capabilities {
        proxy_pass         http://127.0.0.1:9980;
        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;
    }

    # -------------------------------------------------------
    # WebSocket utama — krusial untuk editing real-time
    # -------------------------------------------------------
    location ~ ^/cool/(.*)/ws$ {
        proxy_pass         http://127.0.0.1:9980;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade           $http_upgrade;
        proxy_set_header   Connection        "Upgrade";
        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_read_timeout 36000s;
    }

    # -------------------------------------------------------
    # Admin Console WebSocket
    # -------------------------------------------------------
    location /cool/adminws {
        proxy_pass         http://127.0.0.1:9980;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade           $http_upgrade;
        proxy_set_header   Connection        "Upgrade";
        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_read_timeout 36000s;
    }

    # -------------------------------------------------------
    # Download, fullscreen, upload gambar, dan operasi lainnya
    # -------------------------------------------------------
    location /cool {
        proxy_pass         http://127.0.0.1:9980;
        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;
    }

    # -------------------------------------------------------
    # Backward compatibility untuk integrasi lama (/lool)
    # -------------------------------------------------------
    location /lool {
        proxy_pass         http://127.0.0.1:9980/cool;
        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;
    }
}

Test Nginx:

sudo nginx -t

Pastikan output menampilkan syntax is ok dan test is successful sebelum melanjutkan reload Nginx:

sudo systemctl reload nginx

Verifikasi Endpoint WOPI Discovery

Test bahwa Collabora dapat dijangkau melalui reverse proxy dengan mengakses WOPI discovery endpoint. Endpoint ini adalah yang pertama kali dihubungi Nextcloud untuk memeriksa ketersediaan Collabora.

curl -s https://collabora.example.com/hosting/discovery | head -5

Contoh output:

<wopi-discovery>
    <net-zone name="external-https">

        <!-- Writer documents -->
        <app favIconUrl="https://collabora.example.com/browser/4610258811/images/x-office-document.svg" name="writer">

Jika output adalah halaman error atau koneksi ditolak, periksa kembali konfigurasi Nginx reverse proxy dan pastikan container Collabora berjalan.

Langkah 4: Menghubungkan Collabora ke Nextcloud

Setelah server Collabora berjalan dan dapat diakses via HTTPS, langkah terakhir adalah mengintegrasikannya ke Nextcloud melalui aplikasi Nextcloud Office.

Instalasi Aplikasi Nextcloud Office

Login ke Nextcloud sebagai administrator, klik ikon profil di pojok kanan atas, pilih Apps. Di halaman Apps, cari kategori Office & text atau cari langsung dengan kata kunci Nextcloud Office. Klik Download and enable.

Alternatifnya, install via command line menggunakan occ:

sudo -u www-data php /var/www/nextcloud/occ app:install richdocuments

Konfigurasi URL Server Collabora

Setelah aplikasi aktif, buka Administration settings → Nextcloud Office.

Di halaman pengaturan Nextcloud Office:

  1. Pilih opsi Use your own server
  2. Masukkan URL server Collabora di kolom yang tersedia: https://collabora.example.com
  3. Klik Save

Nextcloud akan langsung melakukan koneksi percobaan ke endpoint /hosting/discovery. Jika koneksi berhasil, akan muncul notifikasi hijau bertuliskan Collabora Online server is reachable atau tampilan daftar format file yang didukung.

Masih di halaman yang sama, scroll ke bawah untuk melihat opsi Allow list for WOPI requests. Isi dengan IP Docker compose Collabora (dalam kasus ini 172.18.0.2) untuk membatasi server yang dapat membuat WOPI request ke Nextcloud.

Konfigurasi via Command Line (occ)

Jika lebih memilih konfigurasi via terminal (cocok untuk deployment otomatis dengan Ansible atau shell script):

# Set URL server Collabora
sudo -u www-data php /var/www/nextcloud/occ config:app:set \
  --value="https://collabora.example.com" richdocuments wopi_url

# Aktifkan konfigurasi
sudo -u www-data php /var/www/nextcloud/occ richdocuments:activate-config

Langkah 5: Uji Coba dan Verifikasi

Test Edit Dokumen

Untuk memverifikasi integrasi berjalan sempurna, buat dokumen baru di Nextcloud:

  1. Buka Nextcloud Files di browser.
  2. Klik tombol + (New) dan pilih New document, New spreadsheet, atau New presentation.
  3. Editor Collabora Online seharusnya terbuka di dalam tab atau popup Nextcloud. Jika muncul halaman putih atau error, periksa bagian Troubleshooting di bawah.
  4. Ketik beberapa karakter dan pastikan dokumen dapat disimpan.

Test Kolaborasi Multi-User

Buka dokumen yang sama dari dua browser atau dua akun Nextcloud yang berbeda secara bersamaan. Pengetikan di satu sesi harus langsung terlihat di sesi lainnya secara real-time (live co-editing). Kursor masing-masing user akan ditampilkan dengan warna berbeda.

Akses Panel Admin Collabora

Collabora menyediakan panel admin berbasis web untuk memantau performa, melihat dokumen yang sedang aktif, dan statistik penggunaan. Akses via:

https://collabora.example.com/browser/dist/admin/admin.html

Gunakan username dan password yang telah Anda set di file docker-compose.yml sebelumnya. Di panel ini Anda dapat memantau:

  • Jumlah dokumen yang sedang aktif.
  • Jumlah koneksi WebSocket (users).
  • Penggunaan memori dan CPU oleh proses LibreOffice.
  • Log aktivitas server.

Verifikasi Otomatis dengan curl

Test capabilities endpoint untuk memastikan semua fitur dilaporkan dengan benar:

curl -s https://collabora.example.com/hosting/capabilities | python3 -m json.tool

Output JSON akan mencantumkan versi CODE yang berjalan dan daftar fitur yang didukung seperti convert-to dan collabora_exports.

Troubleshooting

Error "Collabora Online server is not reachable"

Error ini muncul di Nextcloud Settings ketika Nextcloud tidak dapat terhubung ke endpoint /hosting/discovery. Lakukan pengecekan berurutan:

Container berjalan?

sudo docker compose -f /opt/collabora/docker-compose.yml ps

Status harus Up. Jika tidak, jalankan ulang:

sudo docker compose -f /opt/collabora/docker-compose.yml up -d

Port 9980 listening?

ss -tlnp | grep 9980

Test dari server itu sendiri:

curl -s http://127.0.0.1:9980/hosting/discovery | head -5

Jika ini berhasil tapi via HTTPS tidak, masalah ada di Nginx.

Test via domain:

curl -s https://collabora.example.com/hosting/discovery | head -5

Editor Terbuka Tapi Tidak Bisa Edit (WebSocket Error)

Gejala: editor tampil di browser, namun kursor tidak bisa ditempatkan, atau muncul pesan "Connecting..." yang tidak pernah selesai. Ini hampir selalu disebabkan oleh konfigurasi WebSocket yang salah di Nginx.

  • Pastikan blok location ~ ^/cool/(.*)/ws$ ada di konfigurasi Nginx dan sudah menyertakan header Upgrade dan Connection.
  • Periksa bahwa proxy_http_version 1.1; disetel pada blok WebSocket (HTTP/1.1 dibutuhkan untuk upgrade ke WebSocket).
  • Buka Developer Tools browser (F12) → tab Network, filter dengan "WS". WebSocket request ke /cool/... seharusnya menampilkan status 101 Switching Protocols, bukan 400 atau 502.

SSL Mismatch atau Sertifikat Tidak Valid

Collabora akan menolak koneksi dari Nextcloud jika ada ketidaksesuaian SSL.

Sertifikat SSL untuk collabora.example.com valid dan belum expired:

sudo certbot certificates

Variabel extra_params di docker-compose.yml sudah benar (--o:ssl.enable=false --o:ssl.termination=true). Jika ssl.termination bernilai false, CODE akan mengira koneksi datang sebagai HTTP biasa dan menolaknya.

Pastikan URL yang dimasukkan di Nextcloud Settings menggunakan https://, bukan http://.

Error pada aliasgroup / Domain Tidak Diizinkan

Jika Collabora menolak request dari Nextcloud dengan error di log container seperti "Request failed: unauthorized" atau "domain not allowed":

Pastikan nilai aliasgroup1 di docker-compose.yml tepat sama dengan URL Nextcloud Anda, termasuk port:

aliasgroup1=https://nextcloud.example.com:443

Setelah mengubah environment variable, container harus direstart:

sudo docker compose -f /opt/collabora/docker-compose.yml up -d --force-recreate

Memeriksa Log Container

Log container adalah sumber informasi utama saat troubleshooting. Tampilkan 100 baris log terakhir:

sudo docker compose -f /opt/collabora/docker-compose.yml logs --tail=100 collabora

Atau monitor log secara real-time saat mereproduksi error:

sudo docker compose -f /opt/collabora/docker-compose.yml logs -f collabora

Update dan Maintenance

Memperbarui Collabora ke Versi Terbaru

Salah satu keunggulan Docker adalah kemudahan update. Untuk memperbarui CODE ke versi image terbaru, jalankan:

cd /opt/collabora

# Pull image terbaru
sudo docker compose pull

# Restart container dengan image baru
sudo docker compose up -d --remove-orphans

Container lama akan dihentikan dan container baru dengan image terbaru akan dijalankan secara otomatis. Proses ini biasanya membutuhkan waktu kurang dari 1 menit.

Backup Konfigurasi

File konfigurasi satu-satunya yang perlu di-backup adalah docker-compose.yml dan konfigurasi Nginx. Karena Collabora CODE bersifat stateless (semua data dokumen disimpan di Nextcloud), tidak ada volume data khusus yang perlu di-backup dari sisi Collabora.

sudo cp /opt/collabora/docker-compose.yml ~/collabora-docker-compose.yml.bak
sudo cp /etc/nginx/sites-available/collabora ~/nginx-collabora.bak

Pembatasan Resource (Opsional)

Untuk mencegah container Collabora menghabiskan seluruh resource server, tambahkan batasan CPU dan memori di docker-compose.yml:

services:
  collabora:
    image: collabora/code
    container_name: collabora
    ports:
      - "127.0.0.1:9980:9980"
    environment:
      - aliasgroup1=https://nextcloud.example.com:443
      - username=admin
      - password=ganti_dengan_password_kuat
      - extra_params=--o:ssl.enable=false --o:ssl.termination=true
    cap_add:
      - MKNOD
    restart: always
    deploy:
      resources:
        limits:
          cpus: "2.0"
          memory: 2G
        reservations:
          memory: 512M

Sesuaikan nilai cpus dan memory dengan spesifikasi server. Untuk penggunaan personal atau tim kecil (< 10 user simultan), 1 CPU dan 1 GB RAM umumnya sudah mencukupi.

Kesimpulan

Anda telah berhasil mengintegrasikan Collabora Online (CODE) ke Nextcloud menggunakan Docker. Pengguna Nextcloud kini dapat membuat dan mengedit dokumen .docx, .xlsx, .pptx, .odt, dan format Office lainnya langsung dari browser, dengan dukungan kolaborasi real-time dan history perubahan melalui fitur version control Nextcloud, semuanya berjalan di server Anda sendiri, tanpa data meninggalkan infrastruktur privat.

Dukung keberlanjutan tutorial open source Bitnesia melalui link di bawah ini.

Kirim Donasi

Related Posts