self-hosting
Catatan teknis seputar web development, DevOps, dan integrasi AI.
16 artikel
- 14.05devops
Mirror dokumen pindah kantor: dari work item ke Plane Pages
Halaman API Plane bikin mirror dokumen versi work item terasa salah tempat. Kontrak penyimpanannya berubah, desain identitas mirror ikut dibongkar.
TL;DR: Gue kira tinggal ganti endpoint Pages beres, ternyata kontrak storagenya beda total bikin desain mirror harus dibongkar. Di Pages HTML disimpen verbatim jadi marker bisa ngumpet di komen, kalau update itu ngereplace semua bukan nambahin. Halamannya datar tanpa folder, hapus harus diarsip dulu, dan gambar tetep nangkring di git aja.
#plane#self-hosting#git - 23.25devops
Status Done di tracker cuma klaim, buktinya ada di Git
Kartu Done tanpa bukti itu kata-kata. Sekarang work item cuma boleh Done kalau hash commit di baris Buktinya beneran resolve di Git.
TL;DR: Awalnya gue kira status Done di board udah paling bener, ternyata cuma klaim kosong kalau nggak ada bukti commit-nya. Makanya gue bikin gate yang ngunci, kartu baru boleh Done kalau baris "Bukti: hash" di deskripsi beneran ke-resolve di Git. Soalnya hash Git itu nggak bisa bohong, tanggal selesainya juga ngambil dari aktivitas tracker bukan timestamp commit.
#plane#self-hosting#git - 23.25backend
Sync dokumen dua arah: yang layak dipercaya rajin menolak
Pull balikin isi yang beda dari yang saya push, tanpa error. Ternyata jawabannya bukan parser yang lebih pintar, tapi peta penolakan yang presisi.
TL;DR: Gue pull markdown terus formatnya hilang tanpa error, ternyata server Plane ngebersihin description_html pakai nh3 clean jadi rich-editor kebuang diam-diam. Akhirnya gue putar haluan, identitas dokumen dipindah ke description_stripped yang aman dan sistem milih nolak daripada maksa nebak. Makanya dibikin enam status jelas biar tau kapan harus abort daripada data ilang setengah tanpa jejak.
#plane#self-hosting#sync - 23.24devops
Plane onboarding satu pintu: logika di pusat, data di tepi
Nyaris menyalin folder skill plane-init ke tiap repo. Ternyata satu pintu lebih sehat: logika di satu repo, config dan template di repo konsumen.
TL;DR: Gue hampir copy-paste skill plane-init ke tiap repo biar mandiri tapi sadar itu bakal jadi mimpi buruk maintenance. Akhirnya skill dibikin terpusat aja, repo lain cuma simpan config ringan dan template. Enak soalnya skill berat tetap murah diload, logic di pusat data di pinggiran.
#plane#self-hosting#claude-code - 22.30devops
Live probe Plane: dua asumsi spesifikku tumbang dalam 27 menit
Spesifikasi 905 baris kehilangan dua asumsinya setelah live probe ke Plane CE: marker HTML lenyap disanitasi server, endpoint archive ternyata 404.
TL;DR: Gue udah bikin spek sinkronisasi panjang banget tapi pas di-probe langsung ketahuan dua asumsi ngaco. Komentar HTML buat marker ternyata kesapu sanitizer server jadi hilang, endpoint archive di CE juga zonk 404. Akhirnya marker dipindah ke teks polos dan config, cleanup cukup pindah status Done aja.
#plane#self-hosting#rest-api - 13.29ai
Satu patch kecil di plane-mcp biar mau ngobrol sama Plane Community Edition
Endpoint /dependencies/ 404 di CE self-hosted. Patch fallback ke /relations/ lama, bedakan 404 rute vs 404 data.
TL;DR: Gue coba hubungin work item lewat MCP malah dapet 404, kirain ID salah padahal rutenya yang nggak ada di CE. SDK maksa pake endpoint /dependencies/ ala cloud, sedangkan CE self-hosted cuma kenal /relations/ dengan body issues. Akhirnya dibikin fallback yang bedain 404 page sama 404 data, kalau rutenya hilang otomatis dialihin biar relasi tetap jalan.
#plane#mcp#ai - 13.11ai
Plane MCP sudah live, tiga jebakan operasional ini baru terasa
Workspace nggak bisa dihapus lewat MCP, CORS dipakai ulang sebagai CSRF, dan token API ngintip di .mcp.json.
TL;DR: Hapus workspace nggak bisa lewat MCP, cuma bisa di UI harus ketik nama dan frasa konfirmasi biar nggak kepencet AI. CORS sama CSRF ternyata satu variabel, jadi abis edit .env harus recreate semua container bukan cuma restart proxy. Token API kesimpen plain text di .mcp.json jadi wajib di-gitignore dan mending pakai yang ada expiry.
#plane#mcp#ai - 21.44ai
Plane MCP untuk self-host, tanpa OAuth, cukup header auth
Mode http plane-mcp-server selalu membangun OAuth dan crash tanpa env. Wrapper 16 baris membuka header auth, token tetap divalidasi ke Plane.
TL;DR: Container Plane MCP versi 033 langsung crash karena mode http maksa bikin OAuth app padahal env kosong. Ternyata kode header auth udah ada via get_header_mcp cuma nggak diekspos jadi gue bikin wrapper 16 baris biar validasi token langsung ke Plane. Enak mode stateless tanpa sesi jalan di loopback 8211 cuma butuh header Authorization tiap request.
#plane#mcp#ai - 20.58devops
Self-hosting Plane tanpa satu pun port publik
Cerita deploy Plane 13 service di VPS tunggal: cloudflared sidecar jadi satu-satunya pintu publik, state bind-mount, dan host tanpa port publik.
TL;DR: VPS gue udah sesak container, eh Plane malah maksa buka port 80 dan 443 lewat proxy defaultnya. Gue akalin dengan hapus semua ports, jalanin 13 service internal aja dan public-nya cuma lewat cloudflared tunnel ke proxy bukan port 8000. Enak banget firewall ketutup rapat cuma SSH, nggak usah ngurus certbot dan tetap jalan mulus di lokal.
#self-hosting#plane#docker