[{"data":1,"prerenderedAt":1883},["ShallowReactive",2],{"\u002Fblog\u002Fid\u002Ftutorials\u002Finstall-jitsi-ubuntu":3,"related-\u002Fblog\u002Fid\u002Ftutorials\u002Finstall-jitsi-ubuntu":435,"alternates-\u002Fblog\u002Fid\u002Ftutorials\u002Finstall-jitsi-ubuntu":1580},{"id":4,"title":5,"body":6,"category":425,"date":426,"description":427,"extension":428,"image":429,"meta":430,"navigation":347,"path":431,"seo":432,"stem":433,"__hash__":434},"blog\u002Fid\u002Ftutorials\u002Finstall-jitsi-ubuntu.md","Cara Install Jitsi Meet di Ubuntu 22.04: Panduan Self-Hosted Video Conference",{"type":7,"value":8,"toc":416},"minimark",[9,17,20,23,28,31,60,67,95,99,102,188,191,195,198,262,268,272,275,292,297,301,304,316,320,323,368,373,377,384,399,406,412],[10,11,12,16],"p",{},[13,14,15],"strong",{},"Jitsi Meet"," adalah aplikasi video konferensi sumber terbuka (open-source) berbasis WebRTC yang memungkinkan Anda untuk melakukan pertemuan daring melalui peramban web dengan fungsionalitas yang setara dengan Zoom atau Skype. Keuntungan utama menggunakan Jitsi adalah privasi data, di mana seluruh lalu lintas informasi hanya melewati server pribadi Anda dengan dukungan enkripsi TLS ujung-ke-ujung (end-to-end).",[10,18,19],{},"Dalam panduan ini, Anda akan mempelajari langkah-langkah teknis untuk melakukan instalasi dan konfigurasi Jitsi Meet di Ubuntu 22.04 secara mandiri. Di akhir tutorial ini, Anda akan memiliki server konferensi video yang aman, fungsional, dan siap digunakan untuk kebutuhan organisasi maupun pribadi.",[21,22],"hr",{},[24,25,27],"h2",{"id":26},"langkah-1-mengatur-hostname-dan-resolusi-domain","Langkah 1: Mengatur Hostname dan Resolusi Domain",[10,29,30],{},"Jitsi Meet membutuhkan hostname yang valid agar file konfigurasi dapat dihasilkan dengan benar selama proses instalasi. Gunakan perintah berikut untuk menetapkan Fully Qualified Domain Name (FQDN) pada server Anda.",[32,33,38],"pre",{"className":34,"code":35,"language":36,"meta":37,"style":37},"language-bash shiki shiki-themes github-light github-dark","sudo hostnamectl set-hostname jitsi.domain_anda.com\n","bash","",[39,40,41],"code",{"__ignoreMap":37},[42,43,46,50,54,57],"span",{"class":44,"line":45},"line",1,[42,47,49],{"class":48},"sScJk","sudo",[42,51,53],{"class":52},"sZZnC"," hostnamectl",[42,55,56],{"class":52}," set-hostname",[42,58,59],{"class":52}," jitsi.domain_anda.com\n",[10,61,62,63,66],{},"Setelah itu, petakan alamat IP publik server Anda ke hostname tersebut di dalam file ",[39,64,65],{},"\u002Fetc\u002Fhosts"," agar resolusi lokal berjalan lancar.",[32,68,70],{"className":34,"code":69,"language":36,"meta":37,"style":37},"sudo nano \u002Fetc\u002Fhosts\n# Tambahkan baris berikut di bawah 127.0.0.1:\n# [IP_PUBLIK_SERVER] jitsi.domain_anda.com\n",[39,71,72,82,89],{"__ignoreMap":37},[42,73,74,76,79],{"class":44,"line":45},[42,75,49],{"class":48},[42,77,78],{"class":52}," nano",[42,80,81],{"class":52}," \u002Fetc\u002Fhosts\n",[42,83,85],{"class":44,"line":84},2,[42,86,88],{"class":87},"sJ8bj","# Tambahkan baris berikut di bawah 127.0.0.1:\n",[42,90,92],{"class":44,"line":91},3,[42,93,94],{"class":87},"# [IP_PUBLIK_SERVER] jitsi.domain_anda.com\n",[24,96,98],{"id":97},"langkah-2-mengonfigurasi-firewall-ufw","Langkah 2: Mengonfigurasi Firewall (UFW)",[10,100,101],{},"Untuk berkomunikasi dengan peserta panggilan, server Jitsi memerlukan beberapa port khusus yang terbuka. Anda harus mengizinkan lalu lintas SSH (port 22), HTTP\u002FHTTPS, serta port media UDP untuk transmisi audio dan video.",[32,103,105],{"className":34,"code":104,"language":36,"meta":37,"style":37},"sudo ufw allow 22\u002Ftcp\nsudo ufw allow 80\u002Ftcp\nsudo ufw allow 443\u002Ftcp\nsudo ufw allow 10000\u002Fudp\nsudo ufw allow 3478\u002Fudp\nsudo ufw allow 5349\u002Ftcp\nsudo ufw enable\n",[39,106,107,120,131,142,154,166,178],{"__ignoreMap":37},[42,108,109,111,114,117],{"class":44,"line":45},[42,110,49],{"class":48},[42,112,113],{"class":52}," ufw",[42,115,116],{"class":52}," allow",[42,118,119],{"class":52}," 22\u002Ftcp\n",[42,121,122,124,126,128],{"class":44,"line":84},[42,123,49],{"class":48},[42,125,113],{"class":52},[42,127,116],{"class":52},[42,129,130],{"class":52}," 80\u002Ftcp\n",[42,132,133,135,137,139],{"class":44,"line":91},[42,134,49],{"class":48},[42,136,113],{"class":52},[42,138,116],{"class":52},[42,140,141],{"class":52}," 443\u002Ftcp\n",[42,143,145,147,149,151],{"class":44,"line":144},4,[42,146,49],{"class":48},[42,148,113],{"class":52},[42,150,116],{"class":52},[42,152,153],{"class":52}," 10000\u002Fudp\n",[42,155,157,159,161,163],{"class":44,"line":156},5,[42,158,49],{"class":48},[42,160,113],{"class":52},[42,162,116],{"class":52},[42,164,165],{"class":52}," 3478\u002Fudp\n",[42,167,169,171,173,175],{"class":44,"line":168},6,[42,170,49],{"class":48},[42,172,113],{"class":52},[42,174,116],{"class":52},[42,176,177],{"class":52}," 5349\u002Ftcp\n",[42,179,181,183,185],{"class":44,"line":180},7,[42,182,49],{"class":48},[42,184,113],{"class":52},[42,186,187],{"class":52}," enable\n",[189,190],"inject-ad",{},[24,192,194],{"id":193},"langkah-3-menambahkan-repositori-jitsi-dan-prosody","Langkah 3: Menambahkan Repositori Jitsi dan Prosody",[10,196,197],{},"Anda perlu menambahkan repositori resmi agar sistem APT dapat mengunduh paket Jitsi Meet dan Prosody (server chat XMPP) versi stabil terbaru. Pertama, unduh dan tambahkan kunci GPG untuk memvalidasi paket yang akan diinstal.",[32,199,201],{"className":34,"code":200,"language":36,"meta":37,"style":37},"curl https:\u002F\u002Fdownload.jitsi.org\u002Fjitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > \u002Fusr\u002Fshare\u002Fkeyrings\u002Fjitsi-archive-keyring.gpg'\necho 'deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fjitsi-archive-keyring.gpg] https:\u002F\u002Fdownload.jitsi.org stable\u002F' | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fjitsi-stable.list > \u002Fdev\u002Fnull\nsudo apt update\n",[39,202,203,228,252],{"__ignoreMap":37},[42,204,205,208,211,215,218,221,225],{"class":44,"line":45},[42,206,207],{"class":48},"curl",[42,209,210],{"class":52}," https:\u002F\u002Fdownload.jitsi.org\u002Fjitsi-key.gpg.key",[42,212,214],{"class":213},"szBVR"," |",[42,216,217],{"class":48}," sudo",[42,219,220],{"class":52}," sh",[42,222,224],{"class":223},"sj4cs"," -c",[42,226,227],{"class":52}," 'gpg --dearmor > \u002Fusr\u002Fshare\u002Fkeyrings\u002Fjitsi-archive-keyring.gpg'\n",[42,229,230,233,236,238,240,243,246,249],{"class":44,"line":84},[42,231,232],{"class":223},"echo",[42,234,235],{"class":52}," 'deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fjitsi-archive-keyring.gpg] https:\u002F\u002Fdownload.jitsi.org stable\u002F'",[42,237,214],{"class":213},[42,239,217],{"class":48},[42,241,242],{"class":52}," tee",[42,244,245],{"class":52}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fjitsi-stable.list",[42,247,248],{"class":213}," >",[42,250,251],{"class":52}," \u002Fdev\u002Fnull\n",[42,253,254,256,259],{"class":44,"line":91},[42,255,49],{"class":48},[42,257,258],{"class":52}," apt",[42,260,261],{"class":52}," update\n",[10,263,264],{},[265,266,267],"em",{},"Catatan: Pastikan sistem Anda juga sudah terpasang OpenJDK 17 sebagai dependensi Java yang diperlukan oleh komponen Jitsi.",[24,269,271],{"id":270},"langkah-4-instalasi-paket-jitsi-meet","Langkah 4: Instalasi Paket Jitsi Meet",[10,273,274],{},"Setelah repositori siap, jalankan perintah instalasi untuk memasang seluruh suite Jitsi Meet. Selama proses ini, Anda akan diminta memasukkan nama domain yang telah dikonfigurasi pada Langkah 1.",[32,276,278],{"className":34,"code":277,"language":36,"meta":37,"style":37},"sudo apt install jitsi-meet\n",[39,279,280],{"__ignoreMap":37},[42,281,282,284,286,289],{"class":44,"line":45},[42,283,49],{"class":48},[42,285,258],{"class":52},[42,287,288],{"class":52}," install",[42,290,291],{"class":52}," jitsi-meet\n",[10,293,294],{},[265,295,296],{},"Catatan: Ketika muncul dialog tentang sertifikat SSL, pilih opsi \"Generate a new self-signed certificate\" untuk sementara waktu.",[24,298,300],{"id":299},"langkah-5-memasang-sertifikat-tls-lets-encrypt","Langkah 5: Memasang Sertifikat TLS Let's Encrypt",[10,302,303],{},"Untuk keamanan profesional dan menghindari peringatan di peramban, Anda memerlukan sertifikat SSL yang valid dari otoritas sertifikat terpercaya. Jitsi menyediakan skrip otomatis untuk mendapatkan sertifikat gratis dari Let's Encrypt secara mudah.",[32,305,307],{"className":34,"code":306,"language":36,"meta":37,"style":37},"sudo \u002Fusr\u002Fshare\u002Fjitsi-meet\u002Fscripts\u002Finstall-letsencrypt-cert.sh\n",[39,308,309],{"__ignoreMap":37},[42,310,311,313],{"class":44,"line":45},[42,312,49],{"class":48},[42,314,315],{"class":52}," \u002Fusr\u002Fshare\u002Fjitsi-meet\u002Fscripts\u002Finstall-letsencrypt-cert.sh\n",[24,317,319],{"id":318},"langkah-6-mengamankan-pembuatan-ruang-pertemuan-autentikasi","Langkah 6: Mengamankan Pembuatan Ruang Pertemuan (Autentikasi)",[10,321,322],{},"Secara default, siapa pun yang mengetahui URL server Anda dapat membuat ruang pertemuan baru. Sebagai admin, Anda harus mengaktifkan autentikasi agar hanya pengguna terdaftar yang bisa menjadi host pertemuan.",[32,324,326],{"className":34,"code":325,"language":36,"meta":37,"style":37},"# Edit file konfigurasi Prosody di \u002Fetc\u002Fprosody\u002Fconf.avail\u002F[domain].cfg.lua\n# Ubah authentication = \"anonymous\" menjadi:\n# authentication = \"internal_plain\"\n\n# Daftarkan pengguna baru sebagai admin\u002Fhost\nsudo prosodyctl register [username] jitsi.domain_anda.com [password]\n",[39,327,328,333,338,343,349,354],{"__ignoreMap":37},[42,329,330],{"class":44,"line":45},[42,331,332],{"class":87},"# Edit file konfigurasi Prosody di \u002Fetc\u002Fprosody\u002Fconf.avail\u002F[domain].cfg.lua\n",[42,334,335],{"class":44,"line":84},[42,336,337],{"class":87},"# Ubah authentication = \"anonymous\" menjadi:\n",[42,339,340],{"class":44,"line":91},[42,341,342],{"class":87},"# authentication = \"internal_plain\"\n",[42,344,345],{"class":44,"line":144},[42,346,348],{"emptyLinePlaceholder":347},true,"\n",[42,350,351],{"class":44,"line":156},[42,352,353],{"class":87},"# Daftarkan pengguna baru sebagai admin\u002Fhost\n",[42,355,356,358,361,364],{"class":44,"line":168},[42,357,49],{"class":48},[42,359,360],{"class":52}," prosodyctl",[42,362,363],{"class":52}," register",[42,365,367],{"class":366},"sVt8B"," [username] jitsi.domain_anda.com [password]\n",[10,369,370],{},[265,371,372],{},"Catatan: Setelah melakukan perubahan pada file konfigurasi, Anda wajib melakukan restart pada layanan jicofo, jitsi-videobridge2, dan prosody.",[24,374,376],{"id":375},"langkah-7-verifikasi-dan-uji-coba-pertemuan","Langkah 7: Verifikasi dan Uji Coba Pertemuan",[10,378,379,380,383],{},"Langkah terakhir adalah memverifikasi hasil instalasi dengan mengakses domain Anda melalui peramban web seperti Chrome atau Firefox. Masukkan domain Anda (misal: ",[39,381,382],{},"https:\u002F\u002Fjitsi.domain_anda.com",") dan coba buat ruang pertemuan baru.",[32,385,387],{"className":34,"code":386,"language":36,"meta":37,"style":37},"# Akses melalui browser:\nhttps:\u002F\u002Fjitsi.domain_anda.com\n",[39,388,389,394],{"__ignoreMap":37},[42,390,391],{"class":44,"line":45},[42,392,393],{"class":87},"# Akses melalui browser:\n",[42,395,396],{"class":44,"line":84},[42,397,398],{"class":48},"https:\u002F\u002Fjitsi.domain_anda.com\n",[10,400,401,402,405],{},"Klik tombol ",[13,403,404],{},"Start Meeting",", lalu jika Anda telah mengaktifkan autentikasi, sistem akan meminta kredensial yang telah dibuat pada Langkah 6. Pastikan mikrofon dan kamera berfungsi dengan memberikan izin akses pada peramban.",[10,407,408,411],{},[13,409,410],{},"Selamat!"," Anda telah berhasil membangun server video konferensi Jitsi Meet yang aman dan mandiri di Ubuntu 22.04.",[413,414,415],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":37,"searchDepth":84,"depth":84,"links":417},[418,419,420,421,422,423,424],{"id":26,"depth":84,"text":27},{"id":97,"depth":84,"text":98},{"id":193,"depth":84,"text":194},{"id":270,"depth":84,"text":271},{"id":299,"depth":84,"text":300},{"id":318,"depth":84,"text":319},{"id":375,"depth":84,"text":376},"tutorials","2026-07-14","Bangun platform video conference pribadi Anda sendiri dengan enkripsi end-to-end menggunakan Jitsi Meet di server Ubuntu 22.04.","md","https:\u002F\u002Fpub-47f3f6b6df2a4b068efd8b7310709fdd.r2.dev\u002Fimages\u002Fimg_149a9b12d5d5.jpg",{},"\u002Fid\u002Ftutorials\u002Finstall-jitsi-ubuntu",{"title":5,"description":427},"id\u002Ftutorials\u002Finstall-jitsi-ubuntu","j-PXzvamGbo581Ubemb2DdCCl1jchbNk0Nudt1l4d5E",[436,936,1275],{"id":437,"title":438,"body":439,"category":425,"date":928,"description":929,"extension":428,"image":930,"meta":931,"navigation":347,"path":932,"seo":933,"stem":934,"__hash__":935},"blog\u002Fid\u002Ftutorials\u002Finstalasi-thingsboard-professional-edition-di-proxmox-lxc.md","Panduan Lengkap Instalasi ThingsBoard Professional Edition di Proxmox LXC",{"type":7,"value":440,"toc":918},[441,444,447,449,453,456,480,484,487,516,518,522,529,566,570,573,596,601,605,608,707,711,718,815,819,822,840,844,847,872,879,907,912,915],[10,442,443],{},"ThingsBoard Professional Edition (PE) adalah platform IoT tingkat lanjut yang menawarkan fitur manajemen perangkat, visualisasi data, dan mesin aturan yang sangat fleksibel. Menggunakan container LXC di Proxmox Virtual Environment adalah strategi yang cerdas untuk menjalankan platform ini karena efisiensi sumber daya yang ditawarkan dibandingkan Virtual Machine (VM) konvensional.",[10,445,446],{},"Dalam panduan ini, kita akan melakukan instalasi secara \"on-premises\" menggunakan database PostgreSQL. Pastikan Anda telah menyiapkan container LXC dengan spesifikasi minimum setidaknya 2 core CPU dan 4 GB RAM untuk kebutuhan pengembangan atau PoC.",[21,448],{},[24,450,452],{"id":451},"langkah-1-persiapan-container-dan-update-sistem","Langkah 1: Persiapan Container dan Update Sistem",[10,454,455],{},"Pastikan container LXC Anda menggunakan template Debian atau Ubuntu terbaru. Langkah awal yang wajib dilakukan adalah memperbarui daftar paket sistem agar proses instalasi berjalan lancar.",[32,457,459],{"className":34,"code":458,"language":36,"meta":37,"style":37},"apt update && apt upgrade -y\n",[39,460,461],{"__ignoreMap":37},[42,462,463,466,469,472,474,477],{"class":44,"line":45},[42,464,465],{"class":48},"apt",[42,467,468],{"class":52}," update",[42,470,471],{"class":366}," && ",[42,473,465],{"class":48},[42,475,476],{"class":52}," upgrade",[42,478,479],{"class":223}," -y\n",[24,481,483],{"id":482},"langkah-2-instalasi-java-openjdk-21","Langkah 2: Instalasi Java OpenJDK 21",[10,485,486],{},"ThingsBoard PE versi terbaru memerlukan Java 17 atau lebih tinggi, namun sangat direkomendasikan untuk menggunakan OpenJDK 21 demi stabilitas dan performa optimal.",[32,488,490],{"className":34,"code":489,"language":36,"meta":37,"style":37},"apt install openjdk-21-jdk -y\n# Verifikasi versi Java\njava -version\n",[39,491,492,503,508],{"__ignoreMap":37},[42,493,494,496,498,501],{"class":44,"line":45},[42,495,465],{"class":48},[42,497,288],{"class":52},[42,499,500],{"class":52}," openjdk-21-jdk",[42,502,479],{"class":223},[42,504,505],{"class":44,"line":84},[42,506,507],{"class":87},"# Verifikasi versi Java\n",[42,509,510,513],{"class":44,"line":91},[42,511,512],{"class":48},"java",[42,514,515],{"class":223}," -version\n",[189,517],{},[24,519,521],{"id":520},"langkah-3-instalasi-paket-thingsboard-pe","Langkah 3: Instalasi Paket ThingsBoard PE",[10,523,524,525,528],{},"Unduh paket Debian ThingsBoard PE dan instal menggunakan manajer paket ",[39,526,527],{},"dpkg",". Pastikan Anda juga menginstal pustaka font yang diperlukan oleh komponen pelaporan.",[32,530,532],{"className":34,"code":531,"language":36,"meta":37,"style":37},"apt install fontconfig libfreetype6 -y\nwget https:\u002F\u002Fdist.thingsboard.io\u002Fthingsboard-4.3.1.3PE.deb\ndpkg -i thingsboard-4.3.1.3PE.deb\n",[39,533,534,548,556],{"__ignoreMap":37},[42,535,536,538,540,543,546],{"class":44,"line":45},[42,537,465],{"class":48},[42,539,288],{"class":52},[42,541,542],{"class":52}," fontconfig",[42,544,545],{"class":52}," libfreetype6",[42,547,479],{"class":223},[42,549,550,553],{"class":44,"line":84},[42,551,552],{"class":48},"wget",[42,554,555],{"class":52}," https:\u002F\u002Fdist.thingsboard.io\u002Fthingsboard-4.3.1.3PE.deb\n",[42,557,558,560,563],{"class":44,"line":91},[42,559,527],{"class":48},[42,561,562],{"class":223}," -i",[42,564,565],{"class":52}," thingsboard-4.3.1.3PE.deb\n",[24,567,569],{"id":568},"langkah-4-konfigurasi-kunci-lisensi","Langkah 4: Konfigurasi Kunci Lisensi",[10,571,572],{},"ThingsBoard PE memerlukan kunci lisensi agar layanan dapat berjalan. Kita akan memasukkan kunci rahasia lisensi langsung ke dalam file konfigurasi agar terbaca oleh layanan sistem secara permanen.",[32,574,576],{"className":34,"code":575,"language":36,"meta":37,"style":37},"# Ganti YOUR_LICENSE_SECRET dengan kunci lisensi Anda\necho \"TB_LICENSE_SECRET=YOUR_LICENSE_SECRET\" >> \u002Fetc\u002Fthingsboard\u002Fconf\u002Fthingsboard.conf\n",[39,577,578,583],{"__ignoreMap":37},[42,579,580],{"class":44,"line":45},[42,581,582],{"class":87},"# Ganti YOUR_LICENSE_SECRET dengan kunci lisensi Anda\n",[42,584,585,587,590,593],{"class":44,"line":84},[42,586,232],{"class":223},[42,588,589],{"class":52}," \"TB_LICENSE_SECRET=YOUR_LICENSE_SECRET\"",[42,591,592],{"class":213}," >>",[42,594,595],{"class":52}," \u002Fetc\u002Fthingsboard\u002Fconf\u002Fthingsboard.conf\n",[10,597,598],{},[265,599,600],{},"Catatan: Parameter lisensi ini harus tepat agar proses aktivasi instance saat startup tidak mengalami kegagalan.",[24,602,604],{"id":603},"langkah-5-instalasi-postgresql-dan-penambahan-repositori","Langkah 5: Instalasi PostgreSQL dan Penambahan Repositori",[10,606,607],{},"Untuk mendapatkan versi PostgreSQL terbaru (seperti versi 16 atau 18), Anda perlu menambahkan repositori resmi PostgreSQL karena repositori bawaan Debian\u002FUbuntu biasanya menyediakan versi yang lebih lama.",[32,609,611],{"className":34,"code":610,"language":36,"meta":37,"style":37},"# Menambah repositori resmi PostgreSQL\napt install wget gnupg2 -y\nwget --quiet -O - https:\u002F\u002Fwww.postgresql.org\u002Fmedia\u002Fkeys\u002FACCC4CF8.asc | apt-key add -\necho \"deb http:\u002F\u002Fapt.postgresql.org\u002Fpub\u002Frepos\u002Fapt $(lsb_release -cs)-pgdg main\" > \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fpgdg.list\napt update\n\n# Instalasi PostgreSQL\napt install postgresql-16 -y\n",[39,612,613,618,632,659,680,686,690,695],{"__ignoreMap":37},[42,614,615],{"class":44,"line":45},[42,616,617],{"class":87},"# Menambah repositori resmi PostgreSQL\n",[42,619,620,622,624,627,630],{"class":44,"line":84},[42,621,465],{"class":48},[42,623,288],{"class":52},[42,625,626],{"class":52}," wget",[42,628,629],{"class":52}," gnupg2",[42,631,479],{"class":223},[42,633,634,636,639,642,645,648,650,653,656],{"class":44,"line":91},[42,635,552],{"class":48},[42,637,638],{"class":223}," --quiet",[42,640,641],{"class":223}," -O",[42,643,644],{"class":52}," -",[42,646,647],{"class":52}," https:\u002F\u002Fwww.postgresql.org\u002Fmedia\u002Fkeys\u002FACCC4CF8.asc",[42,649,214],{"class":213},[42,651,652],{"class":48}," apt-key",[42,654,655],{"class":52}," add",[42,657,658],{"class":52}," -\n",[42,660,661,663,666,669,672,675,677],{"class":44,"line":144},[42,662,232],{"class":223},[42,664,665],{"class":52}," \"deb http:\u002F\u002Fapt.postgresql.org\u002Fpub\u002Frepos\u002Fapt $(",[42,667,668],{"class":48},"lsb_release",[42,670,671],{"class":223}," -cs",[42,673,674],{"class":52},")-pgdg main\"",[42,676,248],{"class":213},[42,678,679],{"class":52}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fpgdg.list\n",[42,681,682,684],{"class":44,"line":156},[42,683,465],{"class":48},[42,685,261],{"class":52},[42,687,688],{"class":44,"line":168},[42,689,348],{"emptyLinePlaceholder":347},[42,691,692],{"class":44,"line":180},[42,693,694],{"class":87},"# Instalasi PostgreSQL\n",[42,696,698,700,702,705],{"class":44,"line":697},8,[42,699,465],{"class":48},[42,701,288],{"class":52},[42,703,704],{"class":52}," postgresql-16",[42,706,479],{"class":223},[24,708,710],{"id":709},"langkah-6-konfigurasi-database-dan-thingsboardconf","Langkah 6: Konfigurasi Database dan thingsboard.conf",[10,712,713,714,717],{},"Buat database untuk ThingsBoard dan atur kredensialnya. Sangat penting untuk mendaftarkan detail koneksi database ke dalam file ",[39,715,716],{},"thingsboard.conf"," sebelum menjalankan skrip instalasi utama.",[32,719,721],{"className":34,"code":720,"language":36,"meta":37,"style":37},"# Masuk ke PostgreSQL dan buat database\nsudo -u postgres psql -c \"CREATE DATABASE thingsboard;\"\nsudo -u postgres psql -c \"ALTER USER postgres WITH PASSWORD 'password_anda';\"\n\n# Tambahkan konfigurasi ke file thingsboard.conf\necho \"export DATABASE_TS_TYPE=sql\" >> \u002Fetc\u002Fthingsboard\u002Fconf\u002Fthingsboard.conf\necho \"export SPRING_DATASOURCE_URL=jdbc:postgresql:\u002F\u002Flocalhost:5432\u002Fthingsboard\" >> \u002Fetc\u002Fthingsboard\u002Fconf\u002Fthingsboard.conf\necho \"export SPRING_DATASOURCE_USERNAME=postgres\" >> \u002Fetc\u002Fthingsboard\u002Fconf\u002Fthingsboard.conf\necho \"export SPRING_DATASOURCE_PASSWORD=password_anda\" >> \u002Fetc\u002Fthingsboard\u002Fconf\u002Fthingsboard.conf\n",[39,722,723,728,746,761,765,770,781,792,803],{"__ignoreMap":37},[42,724,725],{"class":44,"line":45},[42,726,727],{"class":87},"# Masuk ke PostgreSQL dan buat database\n",[42,729,730,732,735,738,741,743],{"class":44,"line":84},[42,731,49],{"class":48},[42,733,734],{"class":223}," -u",[42,736,737],{"class":52}," postgres",[42,739,740],{"class":52}," psql",[42,742,224],{"class":223},[42,744,745],{"class":52}," \"CREATE DATABASE thingsboard;\"\n",[42,747,748,750,752,754,756,758],{"class":44,"line":91},[42,749,49],{"class":48},[42,751,734],{"class":223},[42,753,737],{"class":52},[42,755,740],{"class":52},[42,757,224],{"class":223},[42,759,760],{"class":52}," \"ALTER USER postgres WITH PASSWORD 'password_anda';\"\n",[42,762,763],{"class":44,"line":144},[42,764,348],{"emptyLinePlaceholder":347},[42,766,767],{"class":44,"line":156},[42,768,769],{"class":87},"# Tambahkan konfigurasi ke file thingsboard.conf\n",[42,771,772,774,777,779],{"class":44,"line":168},[42,773,232],{"class":223},[42,775,776],{"class":52}," \"export DATABASE_TS_TYPE=sql\"",[42,778,592],{"class":213},[42,780,595],{"class":52},[42,782,783,785,788,790],{"class":44,"line":180},[42,784,232],{"class":223},[42,786,787],{"class":52}," \"export SPRING_DATASOURCE_URL=jdbc:postgresql:\u002F\u002Flocalhost:5432\u002Fthingsboard\"",[42,789,592],{"class":213},[42,791,595],{"class":52},[42,793,794,796,799,801],{"class":44,"line":697},[42,795,232],{"class":223},[42,797,798],{"class":52}," \"export SPRING_DATASOURCE_USERNAME=postgres\"",[42,800,592],{"class":213},[42,802,595],{"class":52},[42,804,806,808,811,813],{"class":44,"line":805},9,[42,807,232],{"class":223},[42,809,810],{"class":52}," \"export SPRING_DATASOURCE_PASSWORD=password_anda\"",[42,812,592],{"class":213},[42,814,595],{"class":52},[24,816,818],{"id":817},"langkah-7-eksekusi-skrip-instalasi","Langkah 7: Eksekusi Skrip Instalasi",[10,820,821],{},"Setelah semua konfigurasi siap, jalankan skrip inisialisasi untuk membuat skema database. Anda dapat memilih untuk memuat data demo guna memudahkan pengujian awal platform.",[32,823,825],{"className":34,"code":824,"language":36,"meta":37,"style":37},"# Menjalankan instalasi dengan data demo\n\u002Fusr\u002Fshare\u002Fthingsboard\u002Fbin\u002Finstall.sh --loadDemo\n",[39,826,827,832],{"__ignoreMap":37},[42,828,829],{"class":44,"line":45},[42,830,831],{"class":87},"# Menjalankan instalasi dengan data demo\n",[42,833,834,837],{"class":44,"line":84},[42,835,836],{"class":48},"\u002Fusr\u002Fshare\u002Fthingsboard\u002Fbin\u002Finstall.sh",[42,838,839],{"class":223}," --loadDemo\n",[24,841,843],{"id":842},"langkah-8-menjalankan-layanan-dan-verifikasi","Langkah 8: Menjalankan Layanan dan Verifikasi",[10,845,846],{},"Langkah terakhir adalah menjalankan layanan ThingsBoard. Tunggu sekitar 90 detik hingga Web UI siap sepenuhnya sebelum mencoba mengaksesnya melalui browser.",[32,848,850],{"className":34,"code":849,"language":36,"meta":37,"style":37},"systemctl enable thingsboard\nsystemctl start thingsboard\n",[39,851,852,863],{"__ignoreMap":37},[42,853,854,857,860],{"class":44,"line":45},[42,855,856],{"class":48},"systemctl",[42,858,859],{"class":52}," enable",[42,861,862],{"class":52}," thingsboard\n",[42,864,865,867,870],{"class":44,"line":84},[42,866,856],{"class":48},[42,868,869],{"class":52}," start",[42,871,862],{"class":52},[10,873,874,875,878],{},"Untuk memverifikasi, akses ",[39,876,877],{},"http:\u002F\u002F[IP-CONTAINER-ANDA]:8080",". Gunakan kredensial default berikut untuk login awal:",[880,881,882,896],"ul",{},[883,884,885,888,889,892,893],"li",{},[13,886,887],{},"System Administrator:"," ",[39,890,891],{},"sysadmin@thingsboard.org"," \u002F ",[39,894,895],{},"sysadmin",[883,897,898,888,901,892,904],{},[13,899,900],{},"Tenant Administrator:",[39,902,903],{},"tenant@thingsboard.org",[39,905,906],{},"tenant",[10,908,909],{},[265,910,911],{},"Catatan: Segera ganti kata sandi default Anda melalui profil akun setelah berhasil login demi keamanan.",[10,913,914],{},"Selamat! Anda kini telah memiliki instance ThingsBoard Professional Edition yang berjalan dengan konfigurasi yang tepat di lingkungan Proxmox LXC Anda.",[413,916,917],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":37,"searchDepth":84,"depth":84,"links":919},[920,921,922,923,924,925,926,927],{"id":451,"depth":84,"text":452},{"id":482,"depth":84,"text":483},{"id":520,"depth":84,"text":521},{"id":568,"depth":84,"text":569},{"id":603,"depth":84,"text":604},{"id":709,"depth":84,"text":710},{"id":817,"depth":84,"text":818},{"id":842,"depth":84,"text":843},"2026-07-17","Tutorial teknis menginstal ThingsBoard PE di container Proxmox, termasuk konfigurasi PostgreSQL dan lisensi yang tepat.","https:\u002F\u002Fpub-47f3f6b6df2a4b068efd8b7310709fdd.r2.dev\u002Fimages\u002Fimg_1ab4a1ecdf6b.jpg",{},"\u002Fid\u002Ftutorials\u002Finstalasi-thingsboard-professional-edition-di-proxmox-lxc",{"title":438,"description":929},"id\u002Ftutorials\u002Finstalasi-thingsboard-professional-edition-di-proxmox-lxc","eAnpZ_fiwBRQ4UBNIdkS7QCEX7rTUqQPWdE4GuB-Yr4",{"id":937,"title":938,"body":939,"category":425,"date":1267,"description":1268,"extension":428,"image":1269,"meta":1270,"navigation":347,"path":1271,"seo":1272,"stem":1273,"__hash__":1274},"blog\u002Fid\u002Ftutorials\u002Fkonfigurasi-nginx-sebagai-reverse-proxy-dan-eksekusi-php-fpm.md","Panduan Lengkap Konfigurasi Nginx sebagai Reverse Proxy dan Eksekusi PHP-FPM",{"type":7,"value":940,"toc":1259},[941,948,955,957,961,964,989,993,996,1012,1014,1018,1025,1039,1050,1162,1167,1171,1174,1201,1205,1216,1237,1241,1244,1253,1256],[10,942,943,944,947],{},"Nginx merupakan salah satu server web yang paling populer di komunitas DevOps karena performanya yang tinggi dalam menangani trafik. Selain sebagai server web, Nginx sering digunakan sebagai ",[13,945,946],{},"reverse proxy"," untuk mendistribusikan beban kerja atau meneruskan permintaan ke server aplikasi lain menggunakan protokol seperti FastCGI.",[10,949,950,951,954],{},"Dalam tutorial ini, Anda akan belajar cara mengintegrasikan Nginx dengan ",[13,952,953],{},"PHP-FPM (FastCGI Process Manager)"," agar server dapat memproses file PHP dengan optimal. Di akhir panduan ini, Anda akan memiliki server fungsional yang mampu menjalankan aplikasi web dinamis berbasis PHP di balik mekanisme proxy yang handal.",[21,956],{},[24,958,960],{"id":959},"langkah-1-memperbarui-repositori-dan-menginstal-nginx","Langkah 1: Memperbarui Repositori dan Menginstal Nginx",[10,962,963],{},"Langkah pertama yang wajib dilakukan pada server Linux seperti Ubuntu adalah memperbarui daftar paket untuk memastikan Anda mendapatkan versi terbaru. Setelah itu, jalankan perintah instalasi untuk memasang server web Nginx ke dalam sistem Anda.",[32,965,967],{"className":34,"code":966,"language":36,"meta":37,"style":37},"sudo apt-get update\nsudo apt-get install nginx\n",[39,968,969,978],{"__ignoreMap":37},[42,970,971,973,976],{"class":44,"line":45},[42,972,49],{"class":48},[42,974,975],{"class":52}," apt-get",[42,977,261],{"class":52},[42,979,980,982,984,986],{"class":44,"line":84},[42,981,49],{"class":48},[42,983,975],{"class":52},[42,985,288],{"class":52},[42,987,988],{"class":52}," nginx\n",[24,990,992],{"id":991},"langkah-2-menginstal-php-fpm","Langkah 2: Menginstal PHP-FPM",[10,994,995],{},"Untuk memproses skrip PHP secara efisien, Nginx memerlukan pustaka PHP-FPM, bukan paket PHP standar yang biasanya menarik dependensi Apache. Menggunakan PHP-FPM sangat disarankan untuk menghindari konflik dengan proses HTTPD milik Apache serta memastikan penggunaan sumber daya server yang lebih hemat.",[32,997,999],{"className":34,"code":998,"language":36,"meta":37,"style":37},"sudo apt-get install php8.1-fpm\n",[39,1000,1001],{"__ignoreMap":37},[42,1002,1003,1005,1007,1009],{"class":44,"line":45},[42,1004,49],{"class":48},[42,1006,975],{"class":52},[42,1008,288],{"class":52},[42,1010,1011],{"class":52}," php8.1-fpm\n",[189,1013],{},[24,1015,1017],{"id":1016},"langkah-3-mengonfigurasi-server-block-nginx","Langkah 3: Mengonfigurasi Server Block Nginx",[10,1019,1020,1021,1024],{},"Anda perlu mengedit file konfigurasi default Nginx agar server mengenali file indeks PHP dan meneruskan permintaan skrip ",[39,1022,1023],{},".php"," ke socket PHP-FPM. Gunakan editor teks seperti Nano untuk membuka file konfigurasi tersebut.",[32,1026,1028],{"className":34,"code":1027,"language":36,"meta":37,"style":37},"sudo nano \u002Fetc\u002Fnginx\u002Fsites-available\u002Fdefault\n",[39,1029,1030],{"__ignoreMap":37},[42,1031,1032,1034,1036],{"class":44,"line":45},[42,1033,49],{"class":48},[42,1035,78],{"class":52},[42,1037,1038],{"class":52}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fdefault\n",[10,1040,1041,1042,1045,1046,1049],{},"Di dalam blok ",[39,1043,1044],{},"server",", pastikan Anda menambahkan ",[39,1047,1048],{},"index.php"," pada baris indeks dan mengatur lokasi FastCGI untuk memproses file PHP:",[32,1051,1055],{"className":1052,"code":1053,"language":1054,"meta":37,"style":37},"language-nginx shiki shiki-themes github-light github-dark","server {\n    listen 80;\n    root \u002Fvar\u002Fwww\u002Fhtml;\n    index index.php index.html index.htm;\n\n    server_name localhost;\n\n    location \u002F {\n        try_files $uri $uri\u002F =404;\n    }\n\n    location ~ \\.php$ {\n        include snippets\u002Ffastcgi-php.conf;\n        fastcgi_pass unix:\u002Frun\u002Fphp\u002Fphp8.1-fpm.sock;\n    }\n\n    location ~ \u002F\\.ht {\n        deny all;\n    }\n}\n","nginx",[39,1056,1057,1062,1067,1072,1077,1081,1086,1090,1095,1100,1106,1111,1117,1123,1129,1134,1139,1145,1151,1156],{"__ignoreMap":37},[42,1058,1059],{"class":44,"line":45},[42,1060,1061],{},"server {\n",[42,1063,1064],{"class":44,"line":84},[42,1065,1066],{},"    listen 80;\n",[42,1068,1069],{"class":44,"line":91},[42,1070,1071],{},"    root \u002Fvar\u002Fwww\u002Fhtml;\n",[42,1073,1074],{"class":44,"line":144},[42,1075,1076],{},"    index index.php index.html index.htm;\n",[42,1078,1079],{"class":44,"line":156},[42,1080,348],{"emptyLinePlaceholder":347},[42,1082,1083],{"class":44,"line":168},[42,1084,1085],{},"    server_name localhost;\n",[42,1087,1088],{"class":44,"line":180},[42,1089,348],{"emptyLinePlaceholder":347},[42,1091,1092],{"class":44,"line":697},[42,1093,1094],{},"    location \u002F {\n",[42,1096,1097],{"class":44,"line":805},[42,1098,1099],{},"        try_files $uri $uri\u002F =404;\n",[42,1101,1103],{"class":44,"line":1102},10,[42,1104,1105],{},"    }\n",[42,1107,1109],{"class":44,"line":1108},11,[42,1110,348],{"emptyLinePlaceholder":347},[42,1112,1114],{"class":44,"line":1113},12,[42,1115,1116],{},"    location ~ \\.php$ {\n",[42,1118,1120],{"class":44,"line":1119},13,[42,1121,1122],{},"        include snippets\u002Ffastcgi-php.conf;\n",[42,1124,1126],{"class":44,"line":1125},14,[42,1127,1128],{},"        fastcgi_pass unix:\u002Frun\u002Fphp\u002Fphp8.1-fpm.sock;\n",[42,1130,1132],{"class":44,"line":1131},15,[42,1133,1105],{},[42,1135,1137],{"class":44,"line":1136},16,[42,1138,348],{"emptyLinePlaceholder":347},[42,1140,1142],{"class":44,"line":1141},17,[42,1143,1144],{},"    location ~ \u002F\\.ht {\n",[42,1146,1148],{"class":44,"line":1147},18,[42,1149,1150],{},"        deny all;\n",[42,1152,1154],{"class":44,"line":1153},19,[42,1155,1105],{},[42,1157,1159],{"class":44,"line":1158},20,[42,1160,1161],{},"}\n",[10,1163,1164],{},[265,1165,1166],{},"Catatan: Pastikan versi pada jalur socket (misalnya php8.1-fpm.sock) di dalam konfigurasi sudah sesuai dengan versi PHP yang Anda instal di server Anda.",[24,1168,1170],{"id":1169},"langkah-4-memvalidasi-konfigurasi-dan-restart-nginx","Langkah 4: Memvalidasi Konfigurasi dan Restart Nginx",[10,1172,1173],{},"Setelah melakukan perubahan pada file konfigurasi, sangat penting untuk memvalidasi sintaks guna memastikan tidak ada kesalahan penulisan yang bisa menyebabkan kegagalan layanan. Jika hasil validasi menunjukkan \"syntax is ok\", lakukan restart pada layanan Nginx untuk menerapkan perubahan tersebut.",[32,1175,1177],{"className":34,"code":1176,"language":36,"meta":37,"style":37},"sudo nginx -t\nsudo systemctl restart nginx\n",[39,1178,1179,1189],{"__ignoreMap":37},[42,1180,1181,1183,1186],{"class":44,"line":45},[42,1182,49],{"class":48},[42,1184,1185],{"class":52}," nginx",[42,1187,1188],{"class":223}," -t\n",[42,1190,1191,1193,1196,1199],{"class":44,"line":84},[42,1192,49],{"class":48},[42,1194,1195],{"class":52}," systemctl",[42,1197,1198],{"class":52}," restart",[42,1200,988],{"class":52},[24,1202,1204],{"id":1203},"langkah-5-membuat-file-uji-coba-php","Langkah 5: Membuat File Uji Coba PHP",[10,1206,1207,1208,1211,1212,1215],{},"Untuk memastikan Nginx dan PHP-FPM sudah terhubung dan berfungsi dengan benar, buatlah file PHP sederhana bernama ",[39,1209,1210],{},"info.php"," di direktori root web server. File ini akan menjalankan fungsi ",[39,1213,1214],{},"phpinfo()"," yang menampilkan informasi detail mengenai instalasi PHP Anda.",[32,1217,1219],{"className":34,"code":1218,"language":36,"meta":37,"style":37},"echo \"\u003C?php phpinfo(); ?>\" | sudo tee \u002Fvar\u002Fwww\u002Fhtml\u002Finfo.php\n",[39,1220,1221],{"__ignoreMap":37},[42,1222,1223,1225,1228,1230,1232,1234],{"class":44,"line":45},[42,1224,232],{"class":223},[42,1226,1227],{"class":52}," \"\u003C?php phpinfo(); ?>\"",[42,1229,214],{"class":213},[42,1231,217],{"class":48},[42,1233,242],{"class":52},[42,1235,1236],{"class":52}," \u002Fvar\u002Fwww\u002Fhtml\u002Finfo.php\n",[24,1238,1240],{"id":1239},"langkah-6-menguji-hasil-konfigurasi-melalui-browser","Langkah 6: Menguji Hasil Konfigurasi melalui Browser",[10,1242,1243],{},"Langkah terakhir adalah melakukan verifikasi melalui peramban web dengan mengakses alamat IP server atau localhost diikuti dengan nama file yang telah dibuat sebelumnya. Jika halaman informasi PHP muncul dengan benar di browser Anda, berarti konfigurasi Nginx untuk mengeksekusi PHP melalui PHP-FPM telah berhasil.",[32,1245,1247],{"className":34,"code":1246,"language":36,"meta":37,"style":37},"http:\u002F\u002Flocalhost\u002Finfo.php\n",[39,1248,1249],{"__ignoreMap":37},[42,1250,1251],{"class":44,"line":45},[42,1252,1246],{"class":48},[10,1254,1255],{},"Selamat, Anda telah berhasil menyelesaikan konfigurasi Nginx sebagai reverse proxy dan mesin eksekusi PHP-FPM dengan sukses!",[413,1257,1258],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":37,"searchDepth":84,"depth":84,"links":1260},[1261,1262,1263,1264,1265,1266],{"id":959,"depth":84,"text":960},{"id":991,"depth":84,"text":992},{"id":1016,"depth":84,"text":1017},{"id":1169,"depth":84,"text":1170},{"id":1203,"depth":84,"text":1204},{"id":1239,"depth":84,"text":1240},"2026-07-16","Pelajari cara mengatur Nginx untuk mengelola trafik sebagai reverse proxy sekaligus mengeksekusi skrip PHP melalui PHP-FPM secara efisien.","https:\u002F\u002Fpub-47f3f6b6df2a4b068efd8b7310709fdd.r2.dev\u002Fimages\u002Fimg_61ca430e061a.jpg",{},"\u002Fid\u002Ftutorials\u002Fkonfigurasi-nginx-sebagai-reverse-proxy-dan-eksekusi-php-fpm",{"title":938,"description":1268},"id\u002Ftutorials\u002Fkonfigurasi-nginx-sebagai-reverse-proxy-dan-eksekusi-php-fpm","Avu-PSIt5U5EBJTHlP_EXq-BZR_0ScnD0LrBzLWb9Iw",{"id":1276,"title":1277,"body":1278,"category":425,"date":1572,"description":1573,"extension":428,"image":1574,"meta":1575,"navigation":347,"path":1576,"seo":1577,"stem":1578,"__hash__":1579},"blog\u002Fid\u002Ftutorials\u002Finstall-outline-wiki-docker.md","Panduan Lengkap Install Outline Wiki dengan Docker",{"type":7,"value":1279,"toc":1563},[1280,1291,1298,1300,1304,1307,1346,1351,1355,1362,1399,1401,1405,1415,1433,1438,1442,1451,1468,1472,1490,1510,1514,1521,1537,1542,1546,1557,1560],[10,1281,1282,1283,1286,1287,1290],{},"Outline adalah platform basis pengetahuan (",[265,1284,1285],{},"knowledgebase",") berbasis ",[265,1288,1289],{},"open-source"," yang sangat mumpuni dan sering dianggap sebagai alternatif Notion yang lebih ringan. Platform ini menawarkan fitur kolaborasi waktu nyata untuk tim, editor berbasis Markdown yang rapi, serta organisasi dokumen yang sangat intuitif.",[10,1292,1293,1294,1297],{},"Melalui tutorial ini, Anda akan belajar cara melakukan instalasi (self-hosting) Outline Wiki di server Anda sendiri menggunakan ",[265,1295,1296],{},"container"," Docker. Pada akhir panduan ini, Anda akan memiliki platform dokumentasi canggih yang berjalan mandiri dan aman, lengkap dengan konfigurasi penyimpanan dan basis datanya.",[21,1299],{},[24,1301,1303],{"id":1302},"langkah-1-persiapan-server-dan-instalasi-docker","Langkah 1: Persiapan Server dan Instalasi Docker",[10,1305,1306],{},"Langkah pertama adalah memperbarui sistem operasi server Anda dan memastikan bahwa Docker serta Docker Compose telah terinstal dengan benar.",[32,1308,1310],{"className":34,"code":1309,"language":36,"meta":37,"style":37},"sudo apt update && sudo apt upgrade -y\nsudo apt install docker.io docker-compose-v2 -y\n",[39,1311,1312,1330],{"__ignoreMap":37},[42,1313,1314,1316,1318,1320,1322,1324,1326,1328],{"class":44,"line":45},[42,1315,49],{"class":48},[42,1317,258],{"class":52},[42,1319,468],{"class":52},[42,1321,471],{"class":366},[42,1323,49],{"class":48},[42,1325,258],{"class":52},[42,1327,476],{"class":52},[42,1329,479],{"class":223},[42,1331,1332,1334,1336,1338,1341,1344],{"class":44,"line":84},[42,1333,49],{"class":48},[42,1335,258],{"class":52},[42,1337,288],{"class":52},[42,1339,1340],{"class":52}," docker.io",[42,1342,1343],{"class":52}," docker-compose-v2",[42,1345,479],{"class":223},[10,1347,1348],{},[265,1349,1350],{},"Catatan: Tutorial ini berasumsi Anda menggunakan distribusi berbasis Linux seperti Debian atau Ubuntu 22.04.",[24,1352,1354],{"id":1353},"langkah-2-membuat-direktori-dan-secret-key","Langkah 2: Membuat Direktori dan Secret Key",[10,1356,1357,1358,1361],{},"Anda perlu membuat direktori kerja khusus dan menghasilkan kunci rahasia (",[265,1359,1360],{},"secret keys",") menggunakan OpenSSL untuk mengamankan sesi aplikasi Outline Anda.",[32,1363,1365],{"className":34,"code":1364,"language":36,"meta":37,"style":37},"mkdir -p \u002Fopt\u002Foutline\ncd \u002Fopt\u002Foutline\nopenssl rand -hex 32\n",[39,1366,1367,1378,1385],{"__ignoreMap":37},[42,1368,1369,1372,1375],{"class":44,"line":45},[42,1370,1371],{"class":48},"mkdir",[42,1373,1374],{"class":223}," -p",[42,1376,1377],{"class":52}," \u002Fopt\u002Foutline\n",[42,1379,1380,1383],{"class":44,"line":84},[42,1381,1382],{"class":223},"cd",[42,1384,1377],{"class":52},[42,1386,1387,1390,1393,1396],{"class":44,"line":91},[42,1388,1389],{"class":48},"openssl",[42,1391,1392],{"class":52}," rand",[42,1394,1395],{"class":223}," -hex",[42,1397,1398],{"class":223}," 32\n",[189,1400],{},[24,1402,1404],{"id":1403},"langkah-3-konfigurasi-environment-file-env","Langkah 3: Konfigurasi Environment (File .env)",[10,1406,1407,1408,888,1411,1414],{},"Buat ",[265,1409,1410],{},"file",[39,1412,1413],{},".env"," yang akan menyimpan konfigurasi krusial seperti pengaturan URL, kredensial database PostgreSQL, Redis, penyimpanan S3\u002FMinio, dan integrasi autentikasi OIDC (seperti Slack atau Google).",[32,1416,1418],{"className":34,"code":1417,"language":36,"meta":37,"style":37},"nano .env\n# Masukkan parameter SECRET_KEY dan UTILS_SECRET dari output OpenSSL sebelumnya\n",[39,1419,1420,1428],{"__ignoreMap":37},[42,1421,1422,1425],{"class":44,"line":45},[42,1423,1424],{"class":48},"nano",[42,1426,1427],{"class":52}," .env\n",[42,1429,1430],{"class":44,"line":84},[42,1431,1432],{"class":87},"# Masukkan parameter SECRET_KEY dan UTILS_SECRET dari output OpenSSL sebelumnya\n",[10,1434,1435],{},[265,1436,1437],{},"Catatan: Outline merupakan aplikasi cloud-native yang mensyaratkan autentikasi eksternal (SSO\u002FOIDC) dan tidak memiliki sistem login lokal bawaan.",[24,1439,1441],{"id":1440},"langkah-4-membuat-konfigurasi-docker-compose","Langkah 4: Membuat Konfigurasi Docker Compose",[10,1443,1444,1445,888,1447,1450],{},"Susun layanan Outline, PostgreSQL, dan Redis ke dalam satu ",[265,1446,1410],{},[39,1448,1449],{},"docker-compose.yml"," agar semua komponen dapat dikelola dan terhubung dalam satu jaringan yang sama.",[32,1452,1454],{"className":34,"code":1453,"language":36,"meta":37,"style":37},"nano docker-compose.yml\n# Definisikan image docker.getoutline.com\u002Foutlinewiki\u002Foutline, database postgres, dan redis di sini\n",[39,1455,1456,1463],{"__ignoreMap":37},[42,1457,1458,1460],{"class":44,"line":45},[42,1459,1424],{"class":48},[42,1461,1462],{"class":52}," docker-compose.yml\n",[42,1464,1465],{"class":44,"line":84},[42,1466,1467],{"class":87},"# Definisikan image docker.getoutline.com\u002Foutlinewiki\u002Foutline, database postgres, dan redis di sini\n",[24,1469,1471],{"id":1470},"langkah-5-menyesuaikan-izin-akses-direktori","Langkah 5: Menyesuaikan Izin Akses Direktori",[10,1473,1474,1475,1478,1479,1482,1483,1485,1486,1489],{},"Karena Outline menggunakan ",[265,1476,1477],{},"user"," khusus (umumnya ",[39,1480,1481],{},"nodejs",") di dalam ",[265,1484,1296],{},", Anda harus memberikan izin kepemilikan pada direktori instalasi agar aplikasi tidak mengalami kendala ",[265,1487,1488],{},"error 502"," atau gagal mengunggah berkas.",[32,1491,1493],{"className":34,"code":1492,"language":36,"meta":37,"style":37},"sudo chown -R 1001:1001 \u002Fopt\u002Foutline\n",[39,1494,1495],{"__ignoreMap":37},[42,1496,1497,1499,1502,1505,1508],{"class":44,"line":45},[42,1498,49],{"class":48},[42,1500,1501],{"class":52}," chown",[42,1503,1504],{"class":223}," -R",[42,1506,1507],{"class":52}," 1001:1001",[42,1509,1377],{"class":52},[24,1511,1513],{"id":1512},"langkah-6-menjalankan-kontainer-docker","Langkah 6: Menjalankan Kontainer Docker",[10,1515,1516,1517,1520],{},"Setelah semua persiapan environment dan Docker Compose selesai, Anda dapat menjalankan seluruh ",[265,1518,1519],{},"stack"," aplikasi Outline di latar belakang.",[32,1522,1524],{"className":34,"code":1523,"language":36,"meta":37,"style":37},"docker-compose up -d\n",[39,1525,1526],{"__ignoreMap":37},[42,1527,1528,1531,1534],{"class":44,"line":45},[42,1529,1530],{"class":48},"docker-compose",[42,1532,1533],{"class":52}," up",[42,1535,1536],{"class":223}," -d\n",[10,1538,1539],{},[265,1540,1541],{},"Catatan: Pastikan Anda juga telah mengatur reverse proxy (seperti Nginx atau Caddy) untuk menangani sertifikat SSL\u002FHTTPS ke port Outline Anda.",[24,1543,1545],{"id":1544},"langkah-7-uji-coba-dan-verifikasi-instalasi","Langkah 7: Uji Coba dan Verifikasi Instalasi",[10,1547,1548,1549,1552,1553,1556],{},"Buka peramban web dan akses nama domain yang telah Anda konfigurasi (misalnya ",[39,1550,1551],{},"https:\u002F\u002Fdocs.domainanda.com","). Cobalah masuk (",[265,1554,1555],{},"login",") menggunakan metode autentikasi OIDC pilihan Anda (seperti Slack), lalu buat sebuah dokumen baru dan unggah gambar untuk memastikan koneksi ke penyimpanan objek S3\u002Flokal berfungsi dengan sempurna.",[10,1558,1559],{},"Selamat! Anda telah berhasil membangun dan mengonfigurasi server Outline Wiki secara mandiri untuk menunjang produktivitas dan kolaborasi tim Anda.",[413,1561,1562],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":37,"searchDepth":84,"depth":84,"links":1564},[1565,1566,1567,1568,1569,1570,1571],{"id":1302,"depth":84,"text":1303},{"id":1353,"depth":84,"text":1354},{"id":1403,"depth":84,"text":1404},{"id":1440,"depth":84,"text":1441},{"id":1470,"depth":84,"text":1471},{"id":1512,"depth":84,"text":1513},{"id":1544,"depth":84,"text":1545},"2026-07-15","Tutorial langkah demi langkah membangun sistem dokumentasi tim menggunakan Outline Wiki dan Docker.","https:\u002F\u002Fpub-47f3f6b6df2a4b068efd8b7310709fdd.r2.dev\u002Fimages\u002Fimg_a28d343a57ee.jpg",{},"\u002Fid\u002Ftutorials\u002Finstall-outline-wiki-docker",{"title":1277,"description":1573},"id\u002Ftutorials\u002Finstall-outline-wiki-docker","l1vHmvX6nPAf9OvtpekKB5Q1gGb8a2CC5mmKqoRjpJ4",[1581],{"id":4,"title":5,"body":1582,"category":425,"date":426,"description":427,"extension":428,"image":429,"meta":1881,"navigation":347,"path":431,"seo":1882,"stem":433,"__hash__":434},{"type":7,"value":1583,"toc":1872},[1584,1588,1590,1592,1594,1596,1610,1614,1634,1636,1638,1710,1712,1714,1716,1762,1766,1768,1770,1784,1788,1790,1792,1802,1804,1806,1840,1844,1846,1850,1862,1866,1870],[10,1585,1586,16],{},[13,1587,15],{},[10,1589,19],{},[21,1591],{},[24,1593,27],{"id":26},[10,1595,30],{},[32,1597,1598],{"className":34,"code":35,"language":36,"meta":37,"style":37},[39,1599,1600],{"__ignoreMap":37},[42,1601,1602,1604,1606,1608],{"class":44,"line":45},[42,1603,49],{"class":48},[42,1605,53],{"class":52},[42,1607,56],{"class":52},[42,1609,59],{"class":52},[10,1611,62,1612,66],{},[39,1613,65],{},[32,1615,1616],{"className":34,"code":69,"language":36,"meta":37,"style":37},[39,1617,1618,1626,1630],{"__ignoreMap":37},[42,1619,1620,1622,1624],{"class":44,"line":45},[42,1621,49],{"class":48},[42,1623,78],{"class":52},[42,1625,81],{"class":52},[42,1627,1628],{"class":44,"line":84},[42,1629,88],{"class":87},[42,1631,1632],{"class":44,"line":91},[42,1633,94],{"class":87},[24,1635,98],{"id":97},[10,1637,101],{},[32,1639,1640],{"className":34,"code":104,"language":36,"meta":37,"style":37},[39,1641,1642,1652,1662,1672,1682,1692,1702],{"__ignoreMap":37},[42,1643,1644,1646,1648,1650],{"class":44,"line":45},[42,1645,49],{"class":48},[42,1647,113],{"class":52},[42,1649,116],{"class":52},[42,1651,119],{"class":52},[42,1653,1654,1656,1658,1660],{"class":44,"line":84},[42,1655,49],{"class":48},[42,1657,113],{"class":52},[42,1659,116],{"class":52},[42,1661,130],{"class":52},[42,1663,1664,1666,1668,1670],{"class":44,"line":91},[42,1665,49],{"class":48},[42,1667,113],{"class":52},[42,1669,116],{"class":52},[42,1671,141],{"class":52},[42,1673,1674,1676,1678,1680],{"class":44,"line":144},[42,1675,49],{"class":48},[42,1677,113],{"class":52},[42,1679,116],{"class":52},[42,1681,153],{"class":52},[42,1683,1684,1686,1688,1690],{"class":44,"line":156},[42,1685,49],{"class":48},[42,1687,113],{"class":52},[42,1689,116],{"class":52},[42,1691,165],{"class":52},[42,1693,1694,1696,1698,1700],{"class":44,"line":168},[42,1695,49],{"class":48},[42,1697,113],{"class":52},[42,1699,116],{"class":52},[42,1701,177],{"class":52},[42,1703,1704,1706,1708],{"class":44,"line":180},[42,1705,49],{"class":48},[42,1707,113],{"class":52},[42,1709,187],{"class":52},[189,1711],{},[24,1713,194],{"id":193},[10,1715,197],{},[32,1717,1718],{"className":34,"code":200,"language":36,"meta":37,"style":37},[39,1719,1720,1736,1754],{"__ignoreMap":37},[42,1721,1722,1724,1726,1728,1730,1732,1734],{"class":44,"line":45},[42,1723,207],{"class":48},[42,1725,210],{"class":52},[42,1727,214],{"class":213},[42,1729,217],{"class":48},[42,1731,220],{"class":52},[42,1733,224],{"class":223},[42,1735,227],{"class":52},[42,1737,1738,1740,1742,1744,1746,1748,1750,1752],{"class":44,"line":84},[42,1739,232],{"class":223},[42,1741,235],{"class":52},[42,1743,214],{"class":213},[42,1745,217],{"class":48},[42,1747,242],{"class":52},[42,1749,245],{"class":52},[42,1751,248],{"class":213},[42,1753,251],{"class":52},[42,1755,1756,1758,1760],{"class":44,"line":91},[42,1757,49],{"class":48},[42,1759,258],{"class":52},[42,1761,261],{"class":52},[10,1763,1764],{},[265,1765,267],{},[24,1767,271],{"id":270},[10,1769,274],{},[32,1771,1772],{"className":34,"code":277,"language":36,"meta":37,"style":37},[39,1773,1774],{"__ignoreMap":37},[42,1775,1776,1778,1780,1782],{"class":44,"line":45},[42,1777,49],{"class":48},[42,1779,258],{"class":52},[42,1781,288],{"class":52},[42,1783,291],{"class":52},[10,1785,1786],{},[265,1787,296],{},[24,1789,300],{"id":299},[10,1791,303],{},[32,1793,1794],{"className":34,"code":306,"language":36,"meta":37,"style":37},[39,1795,1796],{"__ignoreMap":37},[42,1797,1798,1800],{"class":44,"line":45},[42,1799,49],{"class":48},[42,1801,315],{"class":52},[24,1803,319],{"id":318},[10,1805,322],{},[32,1807,1808],{"className":34,"code":325,"language":36,"meta":37,"style":37},[39,1809,1810,1814,1818,1822,1826,1830],{"__ignoreMap":37},[42,1811,1812],{"class":44,"line":45},[42,1813,332],{"class":87},[42,1815,1816],{"class":44,"line":84},[42,1817,337],{"class":87},[42,1819,1820],{"class":44,"line":91},[42,1821,342],{"class":87},[42,1823,1824],{"class":44,"line":144},[42,1825,348],{"emptyLinePlaceholder":347},[42,1827,1828],{"class":44,"line":156},[42,1829,353],{"class":87},[42,1831,1832,1834,1836,1838],{"class":44,"line":168},[42,1833,49],{"class":48},[42,1835,360],{"class":52},[42,1837,363],{"class":52},[42,1839,367],{"class":366},[10,1841,1842],{},[265,1843,372],{},[24,1845,376],{"id":375},[10,1847,379,1848,383],{},[39,1849,382],{},[32,1851,1852],{"className":34,"code":386,"language":36,"meta":37,"style":37},[39,1853,1854,1858],{"__ignoreMap":37},[42,1855,1856],{"class":44,"line":45},[42,1857,393],{"class":87},[42,1859,1860],{"class":44,"line":84},[42,1861,398],{"class":48},[10,1863,401,1864,405],{},[13,1865,404],{},[10,1867,1868,411],{},[13,1869,410],{},[413,1871,415],{},{"title":37,"searchDepth":84,"depth":84,"links":1873},[1874,1875,1876,1877,1878,1879,1880],{"id":26,"depth":84,"text":27},{"id":97,"depth":84,"text":98},{"id":193,"depth":84,"text":194},{"id":270,"depth":84,"text":271},{"id":299,"depth":84,"text":300},{"id":318,"depth":84,"text":319},{"id":375,"depth":84,"text":376},{},{"title":5,"description":427},1784285138390]