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:
| Prasyarat | Detail |
|---|---|
| OS | Linux, disarankan distro Ubuntu 24.04 LTS |
| Nextcloud | Sudah berjalan dengan HTTPS (misalnya https://nextcloud.example.com) |
| Web Server | Nginx (sudah terpasang untuk Nextcloud) |
| Docker & Docker Compose | Versi terbaru (Docker Engine v24+ / Compose v2) |
| Subdomain Collabora | Subdomain terpisah diarahkan ke IP server yang sama, contoh: collabora.example.com |
| Sertifikat SSL | Let's Encrypt via Certbot (akan di-generate dalam panduan ini) |
| Akses | root atau user dengan hak sudo |
| Firewall | Port 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 versionLangkah 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/collaboraBuat 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.ymlIsi 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| Variabel | Keterangan |
|---|---|
image: collabora/code | Docker image resmi Collabora Online Development Edition dari Docker Hub. |
ports: 127.0.0.1:9980:9980 | Container hanya listen di localhost:9980, tidak terekspos langsung ke internet. Nginx yang akan meneruskan trafik dari luar. |
aliasgroup1 | URL 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 & password | Kredensial 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: MKNOD | Capability Linux yang dibutuhkan oleh proses internal LibreOffice di dalam container untuk membuat device node sementara. |
restart: always | Container 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 -dPerintah up -d membuat dan menjalankan container berdasarkan konfigurasi di docker-compose.yml.
Verifikasi container berjalan:
sudo docker compose psKolom 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 collaboraProses 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 9980Output 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.confIsi 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 nginxGenerate Sertifikat SSL dengan Certbot
Jika certbot belum terpasang di server, install terlebih dahulu:
sudo apt install -y certbot python3-certbot-nginxGenerate sertifikat untuk subdomain Collabora:
sudo certbot --non-interactive \
--agree-tos \
--no-eff-email \
-m [email protected] \
--nginx \
-d collabora.example.comCertbot 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.confGanti 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 -tPastikan output menampilkan syntax is ok dan test is successful sebelum melanjutkan reload Nginx:
sudo systemctl reload nginxVerifikasi 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 -5Contoh 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 richdocumentsKonfigurasi URL Server Collabora
Setelah aplikasi aktif, buka Administration settings → Nextcloud Office.
Di halaman pengaturan Nextcloud Office:
- Pilih opsi Use your own server
- Masukkan URL server Collabora di kolom yang tersedia: https://collabora.example.com
- 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-configLangkah 5: Uji Coba dan Verifikasi
Test Edit Dokumen
Untuk memverifikasi integrasi berjalan sempurna, buat dokumen baru di Nextcloud:
- Buka Nextcloud Files di browser.
- Klik tombol + (New) dan pilih New document, New spreadsheet, atau New presentation.
- Editor Collabora Online seharusnya terbuka di dalam tab atau popup Nextcloud. Jika muncul halaman putih atau error, periksa bagian Troubleshooting di bawah.
- 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.htmlGunakan 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.toolOutput 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 psStatus harus Up. Jika tidak, jalankan ulang:
sudo docker compose -f /opt/collabora/docker-compose.yml up -dPort 9980 listening?
ss -tlnp | grep 9980Test dari server itu sendiri:
curl -s http://127.0.0.1:9980/hosting/discovery | head -5Jika ini berhasil tapi via HTTPS tidak, masalah ada di Nginx.
Test via domain:
curl -s https://collabora.example.com/hosting/discovery | head -5Editor 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 headerUpgradedanConnection. - 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 status101 Switching Protocols, bukan400atau502.
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 certificatesVariabel 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:443Setelah mengubah environment variable, container harus direstart:
sudo docker compose -f /opt/collabora/docker-compose.yml up -d --force-recreateMemeriksa 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 collaboraAtau monitor log secara real-time saat mereproduksi error:
sudo docker compose -f /opt/collabora/docker-compose.yml logs -f collaboraUpdate 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-orphansContainer 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.bakPembatasan 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: 512MSesuaikan 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.




