
[{"content":"Selamat datang di Blog GezyTech. Tempat berbagi pengetahuan tentang AI, Linux, Server, Docker, dan teknologi lainnya.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/","section":"Blog GezyTech","summary":"","title":"Blog GezyTech","type":"page"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/categories/linux/","section":"Categories","summary":"","title":"Linux","type":"categories"},{"content":"Tips, trik, dan panduan seputar sistem operasi Linux.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/linux/","section":"Linux","summary":"","title":"Linux","type":"linux"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/linux-mint/","section":"Tags","summary":"","title":"Linux-Mint","type":"tags"},{"content":" TLDR # Linux Mint adalah distribusi Linux yang ramah pemula, ringan, dan stabil. Berbasis Ubuntu, Linux Mint hadir dengan antarmuka yang mirip Windows sehingga memudahkan transisi pengguna baru. Artikel ini akan memandumu dari persiapan instalasi hingga tips produktivitas harian — semua dalam satu tempat.\nPendahuluan # Pindah dari Windows ke Linux memang terasa menakutkan. Ada kekhawatiran: \u0026ldquo;Apa aplikasi favoritku jalan?\u0026rdquo;, \u0026ldquo;Apakah game bisa dimainkan?\u0026rdquo;, \u0026ldquo;Bagaimana kalau error dan tidak ada yang membantu?\u0026rdquo;\nKabar baiknya: Linux Mint dirancang khusus untuk menjawab kekhawatiran itu.\nLinux Mint adalah distribusi Linux yang mengutamakan kemudahan penggunaan. Dengan antarmuka yang mirip Windows, manajer paket yang intuitif, dan komunitas yang ramah, Linux Mint menjadi pilihan tepat bagi siapa pun yang ingin mencoba Linux — termasuk kamu yang tidak terbiasa dengan terminal.\nVersi terbaru (Linux Mint 22 \u0026ldquo;Xiaomi\u0026rdquo; berbasis Ubuntu 24.04 LTS) menawarkan stabilitas enterprise, dukungan hingga 2029, dan lingkungan desktop Cinnamon yang modern dan responsif.\nArtikel ini akan membantumu memulai dari nol.\nKonten Utama # 1. Kenapa Linux Mint? # Alasan Penjelasan Mirip Windows Menu Start di pojok kiri, taskbar, system tray — langsung terasa akrab Ringan Cinnamon hanya butuh RAM 2 GB (rekomendasi 4 GB), cocok untuk laptop lawas Stabil Berbasis Ubuntu LTS, update teruji, jarang crash Software Manager Toko aplikasi grafis — install software tanpa terminal Driver Manager Deteksi dan instal driver (NVIDIA, WiFi, printer) langsung dari GUI Komunitas besar Forum aktif, dokumentasi lengkap, solusi mudah ditemukan Budaya Linux Mint:\nEdisi Desktop Cocok untuk Cinnamon Modern, fitur lengkap Desktop/laptop standar MATE Lebih ringan Laptop lawas (2010-an) Xfce Paling ringan Komputer spek rendah Rekomendasi untuk pemula: Cinnamon edition.\n2. Persiapan Sebelum Instalasi # Download ISO # Kunjungi linuxmint.com/download dan unduh edisi Cinnamon (sekitar 3 GB). Verifikasi checksum SHA-256 jika ingin benar-benar aman.\nBuat USB Bootable # Di Windows pakai Rufus atau Balena Etcher:\n# Kalau sudah di Linux, pakai dd: sudo dd if=linuxmint-22-cinnamon-64bit.iso of=/dev/sdX bs=4M status=progress Ganti /dev/sdX dengan perangkat USB-mu (cek dengan lsblk).\nBackup Data # ⚠️ Backup dulu! Instalasi sistem operasi akan memformat partisi.\n3. Panduan Instalasi Langkah demi Langkah # Boot dari USB — Masuk BIOS (F2/DEL), atur boot priority ke USB Pilih \u0026ldquo;Start Linux Mint\u0026rdquo; — Coba dulu lewat live USB Klik \u0026ldquo;Install Linux Mint\u0026rdquo; — Ikon di desktop Pilih bahasa — Indonesia atau Inggris Layout keyboard — Pilih \u0026ldquo;Indonesian\u0026rdquo; atau \u0026ldquo;English (US)\u0026rdquo; Install multimedia codecs — ✅ Centang (biar bisa mainkan MP3/MP4) Tipe instalasi — Pilih \u0026ldquo;Erase disk and install Linux Mint\u0026rdquo; (kalau mau full Linux) atau \u0026ldquo;Install alongside Windows\u0026rdquo; (dual boot) Partisi otomatis — Jangan repot, biarkan installer mengatur partisi Zona waktu — Ketik \u0026ldquo;Jakarta\u0026rdquo; atau pilih dari peta Buat user — Nama, username, password Tunggu selesai — 5–10 menit, restart, cabut USB, masuk ke Linux Mint baru! 🎉 4. Pasca-Instalasi: Hal Pertama yang Harus Dilakukan # Setelah masuk desktop, lakukan ini:\na. Update Sistem # Buka Update Manager (ikon perisai di taskbar) → Refresh → Install Updates. Atau lewat terminal:\nsudo apt update \u0026amp;\u0026amp; sudo apt upgrade -y b. Driver # Buka Driver Manager → Pilih driver proprietary (NVIDIA atau WiFi) jika ada → Apply.\nc. Aktifkan Firewall # sudo ufw enable sudo ufw status d. Timeshift (Backup Sistem) # Linux Mint sudah menginstall Timeshift secara default. Atur backup mingguan ke drive eksternal. Ini penyelamat saat terjadi error.\n5. Tips \u0026amp; Trik Sehari-hari # Shortcut Penting # Shortcut Fungsi Ctrl+Alt+T Buka terminal Super (Windows key) Menu utama Super+D Show desktop Alt+Tab Pindah jendela Super+L Lock screen Shift+Ctrl+Esc System Monitor (Task Manager) Print Screen Screenshot Shift+Print Screen Screenshot area tertentu Manajemen File dengan Nemo # Nemo adalah file manager bawaan Linux Mint. Fitur keren:\nSplit view — F3 untuk dua panel Bulk rename — seleksi file → F2 Open as root — Klik kanan folder → \u0026ldquo;Open as Root\u0026rdquo; Bookmark — Seret folder ke sidebar Software Manager # Buka Software Manager dari menu. Ini toko aplikasi grafis Linux Mint. Beberapa aplikasi yang wajib:\nKategori Aplikasi Rekomendasi Browser Firefox (default), Google Chrome, Brave Office LibreOffice (default), OnlyOffice, WPS Office Multimedia VLC, GIMP, Audacity, OBS Studio Coding VS Code, Git, Docker, VSCodium Chat Telegram, Discord, WhatsApp (WebCord) Utility Timeshift, Stacer, BleachBit, Flameshot 6. Terminal untuk Pemula # Kamu tidak perlu hafal ratusan perintah. Ini saja yang paling sering dipakai:\n# Navigasi pwd # Lihat folder saat ini ls # Lihat isi folder cd Documents # Pindah ke folder cd .. # Naik satu folder # File cp file.txt /target # Copy mv file.txt /target # Pindah/rename rm file.txt # Hapus file rm -rf folder/ # Hapus folder # Sistem sudo apt install nama-paket # Install software sudo apt remove nama-paket # Hapus software sudo apt update # Update daftar paket sudo apt upgrade # Upgrade semua software systemctl status nama-service # Cek status service Tip: Ketik command --help untuk melihat panduan singkat perintah apa pun.\n7. Troubleshooting Umum # Masalah Solusi WiFi tidak terdeteksi Buka Driver Manager → install driver proprietary Suara tidak keluar Buka Sound Settings → cek output device. Atau sudo alsa force-reload USB tidak terbaca Coba sudo mkdir /media/usb \u0026amp;\u0026amp; sudo mount /dev/sdX1 /media/usb Resolusi layar aneh Buka Display Settings → atur resolusi. Kalau Nvidia, buka NVIDIA X Server Settings Aplikasi tidak bisa diinstall Coba sudo apt update dulu, lalu sudo apt install namanya GRUB tidak muncul (dual boot) Boot ke Linux → sudo update-grub 8. 5 Tips Produktivitas # Workspaces — Super + Arrow Up untuk melihat semua workspace. Seret jendela ke workspace berbeda untuk multitasking yang rapi.\nHot Corners — Settings → Hot Corners. Atur pojok kiri atas untuk \u0026ldquo;Show all windows\u0026rdquo; atau \u0026ldquo;Expo view\u0026rdquo;.\nDesklets — Klik kanan desktop → \u0026ldquo;Add a desklet\u0026rdquo;. Tambahkan jam, kalender, monitor CPU, atau cuaca langsung di desktop.\nAuto-start apps — Buka Startup Applications → Add → pilih aplikasi (Telegram, Dropbox, dll) yang mau jalan otomatis saat login.\nKeyboard Shortcuts — Settings → Keyboard → Shortcuts. Sesuaikan shortcut sesuai keinginanmu.\n9. Rekomendasi Software Khusus Linux # Aplikasi Fungsi Alternatif Windows Timeshift Backup sistem (seperti System Restore) System Restore Stacer Bersihkan sistem, monitor resource CCleaner Flameshot Screenshot + anotasi keren Snip \u0026amp; Sketch Kazam Screen recorder sederhana OBS (alternative) Synaptic Package manager lanjutan Tidak ada Grub Customizer Atur tampilan boot menu EasyBCD Variety Wallpaper changer otomatis Tidak ada Neofetch Info sistem di terminal (keren!) Tidak ada 10. Bergabung dengan Komunitas # Linux Mint punya komunitas yang aktif dan ramah:\nForum resmi: forums.linuxmint.com Subreddit: r/linuxmint Channel Telegram: @linuxmint_id (Indonesia) Blog resmi: blog.linuxmint.com Jangan ragu bertanya — komunitas Linux terkenal dengan budaya membantu pengguna baru.\nKesimpulan # Linux Mint adalah pilihan terbaik untuk pemula yang ingin beralih ke Linux. Dengan antarmuka yang familiar, Software Manager yang mudah, dan komunitas yang suportif, kamu bisa mulai menggunakan Linux untuk pekerjaan sehari-hari tanpa perlu menjadi ahli terminal.\nLangkah selanjutnya:\nDownload ISO Linux Mint Cinnamon Buat USB bootable dengan Balena Etcher Install — butuh waktu sekitar 15 menit Update sistem, install driver, atur backup Timeshift Install aplikasi favorit dari Software Manager Nikmati Linux! 🐧 Selamat bergabung dengan dunia Linux! Jangan khawatir kalau ada error — Googling saja, hampir pasti solusinya sudah ada. Selamat vibe coding! 😊\nArtikel ini ditulis dengan bantuan AI dan telah diedit oleh tim GezyTech.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/linux/panduan-lengkap-linux-mint-untuk-pemula/","section":"Linux","summary":"Panduan lengkap Linux Mint untuk pemula: cara instalasi, pengaturan awal, tips produktivitas, dan troubleshooting. Cocok untuk pengguna Windows yang baru pindah ke Linux.","title":"Panduan Lengkap Linux Mint untuk Pemula: Instalasi, Pengaturan, dan Tips","type":"linux"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/pemula/","section":"Tags","summary":"","title":"Pemula","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/vibecoding/","section":"Tags","summary":"","title":"Vibecoding","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/api/","section":"Tags","summary":"","title":"Api","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/bun/","section":"Tags","summary":"","title":"Bun","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/devops/","section":"Tags","summary":"","title":"Devops","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/hono/","section":"Tags","summary":"","title":"Hono","type":"tags"},{"content":" TLDR # Hono adalah framework web ringan yang dirancang untuk runtime modern seperti Bun, Deno, dan Cloudflare Workers. Kombinasinya dengan Bun — runtime JavaScript tercepat saat ini — menghasilkan REST API yang bisa ditulis dalam hitungan menit. Artikel ini akan memandumu dari instalasi hingga deploy REST API lengkap dengan CRUD, validasi, dan koneksi database.\nPendahuluan # Membangun REST API dulu terasa berat: setup Express, TypeScript, ts-node, Nodemon, dan berbagai middleware yang harus dikonfigurasi satu per satu. Prosesnya bisa memakan waktu 30 menit sebelum kamu benar-benar menulis kode bisnis.\nDengan Bun + Hono, semua itu berubah.\nBun adalah runtime all-in-one yang menjalankan TypeScript langsung tanpa konfigurasi, package manager cepat bawaan, dan test runner terintegrasi. Hono adalah framework web minimalis dengan performa tinggi — bobotnya hanya 14 KB dan tidak punya dependensi eksternal.\nGabungan keduanya memungkinkan kamu membuat REST API dari nol hingga selesai dalam waktu kurang dari 10 menit. Cocok untuk kamu yang suka vibe coding dan ingin hasil cepat.\nKonten Utama # 1. Kenapa Hono + Bun? # Fitur Express + Node.js Hono + Bun Setup awal 10-15 menit (config TypeScript, ts-node, dll) 30 detik (bun init + bun add hono) Ukuran bundle ~500 KB + middleware ~14 KB (zero dependencies) Kecepatan Standar 3-5x lebih cepat TypeScript Perlu tsconfig + ts-node Native (jalan langsung) Middleware body-parser, cors terpisah Built-in (cors, json, dll) Deploy Butuh setup PM2/forever Satu perintah (bun run) Edge ready Tidak Ya (Cloudflare Workers, Deno) 2. Inisialisasi Proyek # # Buat folder proyek mkdir hono-bun-api cd hono-bun-api # Inisialisasi bun init # Install Hono bun add hono Hasil bun init akan membuat:\npackage.json tsconfig.json index.ts (entry point) 3. Hello World Pertama # Buka index.ts dan tulis:\nimport { Hono } from \u0026#39;hono\u0026#39;; const app = new Hono(); app.get(\u0026#39;/\u0026#39;, (c) =\u0026gt; { return c.text(\u0026#39;Hello dari Hono + Bun!\u0026#39;); }); export default app; Jalankan:\nbun run index.ts Akses http://localhost:3000 — lihat? REST API pertamamu sudah hidup dalam 2 menit! 🚀\n4. REST API CRUD Lengkap # Mari kita buat API untuk mengelola data buku perpustakaan dengan operasi CRUD lengkap.\nimport { Hono } from \u0026#39;hono\u0026#39;; import { cors } from \u0026#39;hono/cors\u0026#39;; const app = new Hono(); // Middleware CORS app.use(\u0026#39;/*\u0026#39;, cors()); // In-memory database (nanti bisa diganti dengan database sungguhan) interface Book { id: number; title: string; author: string; year: number; is_read: boolean; } let books: Book[] = [ { id: 1, title: \u0026#39;Pemrograman Web dengan Bun\u0026#39;, author: \u0026#39;Budi\u0026#39;, year: 2025, is_read: false }, { id: 2, title: \u0026#39;Belajar Docker untuk Developer\u0026#39;, author: \u0026#39;Ani\u0026#39;, year: 2026, is_read: true }, ]; let nextId = 3; // CREATE - Tambah buku baru app.post(\u0026#39;/api/books\u0026#39;, async (c) =\u0026gt; { const body = await c.req.json(); const book: Book = { id: nextId++, title: body.title, author: body.author, year: body.year, is_read: body.is_read ?? false, }; books.push(book); return c.json(book, 201); }); // READ ALL - Ambil semua buku app.get(\u0026#39;/api/books\u0026#39;, (c) =\u0026gt; { // Filter query parameters?search= const search = c.req.query(\u0026#39;search\u0026#39;); if (search) { const filtered = books.filter( (b) =\u0026gt; b.title.toLowerCase().includes(search.toLowerCase()) || b.author.toLowerCase().includes(search.toLowerCase()), ); return c.json(filtered); } return c.json(books); }); // READ ONE - Ambil satu buku berdasarkan ID app.get(\u0026#39;/api/books/:id\u0026#39;, (c) =\u0026gt; { const id = Number(c.req.param(\u0026#39;id\u0026#39;)); const book = books.find((b) =\u0026gt; b.id === id); if (!book) { return c.json({ message: \u0026#39;Buku tidak ditemukan\u0026#39; }, 404); } return c.json(book); }); // UPDATE - Ubah data buku app.put(\u0026#39;/api/books/:id\u0026#39;, async (c) =\u0026gt; { const id = Number(c.req.param(\u0026#39;id\u0026#39;)); const index = books.findIndex((b) =\u0026gt; b.id === id); if (index === -1) { return c.json({ message: \u0026#39;Buku tidak ditemukan\u0026#39; }, 404); } const body = await c.req.json(); books[index] = { ...books[index], title: body.title ?? books[index].title, author: body.author ?? books[index].author, year: body.year ?? books[index].year, is_read: body.is_read ?? books[index].is_read, }; return c.json(books[index]); }); // DELETE - Hapus buku app.delete(\u0026#39;/api/books/:id\u0026#39;, (c) =\u0026gt; { const id = Number(c.req.param(\u0026#39;id\u0026#39;)); const index = books.findIndex((b) =\u0026gt; b.id === id); if (index === -1) { return c.json({ message: \u0026#39;Buku tidak ditemukan\u0026#39; }, 404); } books.splice(index, 1); return c.json({ message: \u0026#39;Buku berhasil dihapus\u0026#39; }); }); export default app; 5. Menguji API dengan curl # Buka terminal lain dan coba:\n# GET all books curl http://localhost:3000/api/books # GET search curl \u0026#34;http://localhost:3000/api/books?search=docker\u0026#34; # GET single book curl http://localhost:3000/api/books/1 # POST new book curl -X POST http://localhost:3000/api/books \\ -H \u0026#34;Content-Type: application/json\u0026#34; \\ -d \u0026#39;{\u0026#34;title\u0026#34;:\u0026#34;Matematika Kelas 8\u0026#34;,\u0026#34;author\u0026#34;:\u0026#34;Gunanto\u0026#34;,\u0026#34;year\u0026#34;:2026,\u0026#34;is_read\u0026#34;:false}\u0026#39; # PUT update book curl -X PUT http://localhost:3000/api/books/1 \\ -H \u0026#34;Content-Type: application/json\u0026#34; \\ -d \u0026#39;{\u0026#34;is_read\u0026#34;:true}\u0026#39; # DELETE book curl -X DELETE http://localhost:3000/api/books/2 6. Validasi dengan Zod # Agar API lebih aman, tambahkan validasi menggunakan Zod:\nbun add zod import { z } from \u0026#39;zod\u0026#39;; const BookSchema = z.object({ title: z.string().min(1, \u0026#39;Judul tidak boleh kosong\u0026#39;), author: z.string().min(1, \u0026#39;Penulis tidak boleh kosong\u0026#39;), year: z.number().int().min(1900).max(2030), is_read: z.boolean().optional(), }); app.post(\u0026#39;/api/books\u0026#39;, async (c) =\u0026gt; { const body = await c.req.json(); const result = BookSchema.safeParse(body); if (!result.success) { return c.json({ message: \u0026#39;Validasi gagal\u0026#39;, errors: result.error.flatten().fieldErrors }, 400); } // Lanjutkan simpan data... }); 7. Koneksi ke Database SQLite # Untuk data yang persisten, kita bisa tambahkan SQLite menggunakan Bun SQLite (built-in, tanpa package tambahan):\nimport { Database } from \u0026#39;bun:sqlite\u0026#39;; // Buat database const db = new Database(\u0026#39;library.db\u0026#39;); // Buat tabel db.run(` CREATE TABLE IF NOT EXISTS books ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, author TEXT NOT NULL, year INTEGER NOT NULL, is_read INTEGER DEFAULT 0 ) `); // INSERT app.post(\u0026#39;/api/books\u0026#39;, async (c) =\u0026gt; { const body = await c.req.json(); const result = db.query( \u0026#39;INSERT INTO books (title, author, year, is_read) VALUES ($title, $author, $year, $is_read)\u0026#39; ).run({ $title: body.title, $author: body.author, $year: body.year, $is_read: body.is_read ? 1 : 0, }); const book = db.query(\u0026#39;SELECT * FROM books WHERE id = $id\u0026#39;).get({ $id: Number(result.lastInsertRowid), }); return c.json(book, 201); }); // SELECT ALL app.get(\u0026#39;/api/books\u0026#39;, (c) =\u0026gt; { const books = db.query(\u0026#39;SELECT * FROM books\u0026#39;).all(); return c.json(books); }); 8. Mode Development dengan Hot Reload # Bun mendukung watch mode yang otomatis merestart server saat file berubah:\nbun --watch run index.ts Untuk development yang lebih nyaman, tambahkan script di package.json:\n{ \u0026#34;scripts\u0026#34;: { \u0026#34;dev\u0026#34;: \u0026#34;bun --watch run index.ts\u0026#34;, \u0026#34;start\u0026#34;: \u0026#34;bun run index.ts\u0026#34; } } Jalankan:\nbun run dev Setiap kali kamu mengubah file, server akan restart dalam milidetik.\n9. Struktur Folder untuk Proyek Nyata # Untuk proyek yang lebih besar, gunakan struktur folder seperti ini:\nhono-bun-api/ ├── src/ │ ├── index.ts # Entry point │ ├── routes/ │ │ ├── books.ts # Route handler buku │ │ └── users.ts # Route handler user │ ├── middleware/ │ │ └── auth.ts # Middleware autentikasi │ ├── db/ │ │ └── schema.ts # Database schema │ ├── validators/ │ │ └── book.ts # Validasi Zod │ └── types/ │ └── index.ts # Type definitions ├── package.json └── tsconfig.json Contoh route terpisah (src/routes/books.ts):\nimport { Hono } from \u0026#39;hono\u0026#39;; const books = new Hono(); books.get(\u0026#39;/\u0026#39;, (c) =\u0026gt; c.json({ message: \u0026#39;Daftar buku\u0026#39; })); books.get(\u0026#39;/:id\u0026#39;, (c) =\u0026gt; c.json({ message: `Buku ${c.req.param(\u0026#39;id\u0026#39;)}` })); books.post(\u0026#39;/\u0026#39;, async (c) =\u0026gt; { const body = await c.req.json(); return c.json(body, 201); }); export default books; Lalu di src/index.ts:\nimport { Hono } from \u0026#39;hono\u0026#39;; import booksRoute from \u0026#39;./routes/books\u0026#39;; const app = new Hono(); app.route(\u0026#39;/api/books\u0026#39;, booksRoute); export default app; 10. Middleware Bawaan Hono yang Berguna # Hono menyediakan berbagai middleware bawaan:\nimport { Hono } from \u0026#39;hono\u0026#39;; import { cors } from \u0026#39;hono/cors\u0026#39;; import { logger } from \u0026#39;hono/logger\u0026#39;; import { secureHeaders } from \u0026#39;hono/secure-headers\u0026#39;; import { etag } from \u0026#39;hono/etag\u0026#39;; const app = new Hono(); // Logging setiap request app.use(\u0026#39;*\u0026#39;, logger()); // Security headers app.use(\u0026#39;*\u0026#39;, secureHeaders()); // ETag untuk caching app.use(\u0026#39;*\u0026#39;, etag()); // CORS dengan konfigurasi spesifik app.use(\u0026#39;/api/*\u0026#39;, cors({ origin: [\u0026#39;https://example.com\u0026#39;, \u0026#39;http://localhost:5173\u0026#39;], allowMethods: [\u0026#39;GET\u0026#39;, \u0026#39;POST\u0026#39;, \u0026#39;PUT\u0026#39;, \u0026#39;DELETE\u0026#39;], allowHeaders: [\u0026#39;Content-Type\u0026#39;, \u0026#39;Authorization\u0026#39;], maxAge: 600, })); 11. Deploy dengan Docker # Setelah API selesai, deploy dengan Docker:\nDockerfile\nFROM oven/bun:latest WORKDIR /app COPY package.json bun.lock ./ RUN bun install --frozen-lockfile COPY . . EXPOSE 3000 CMD [\u0026#34;bun\u0026#34;, \u0026#34;run\u0026#34;, \u0026#34;index.ts\u0026#34;] docker-compose.yml (dengan Nginx reverse proxy)\nversion: \u0026#39;3.8\u0026#39; services: api: build: . ports: - \u0026#34;3000:3000\u0026#34; environment: - NODE_ENV=production restart: always nginx: image: nginx:alpine ports: - \u0026#34;80:80\u0026#34; - \u0026#34;443:443\u0026#34; volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl depends_on: - api restart: always Kesimpulan # Bun + Hono adalah kombinasi yang sangat powerful untuk membangun REST API modern. Dengan setup yang minimal, performa tinggi, dan ekosistem yang terus berkembang, pasangan ini menjadi pilihan tepat untuk proyek baru — baik untuk prototyping cepat maupun production.\nYang sudah kamu pelajari:\nSetup proyek Bun + Hono dalam 30 detik CRUD lengkap dengan validasi Zod Koneksi SQLite dengan Bun bawaan Struktur folder untuk proyek nyata Middleware, hot reload, dan deployment Docker Langkah selanjutnya:\nCoba buat API sendiri dengan Bun + Hono malam ini Tambahkan autentikasi JWT Deploy ke VPS dengan Nginx + SSL Explore fitur Hono lainnya seperti WebSocket dan SSE Selamat vibe coding! ⚡🚀\nArtikel ini ditulis dengan bantuan AI dan telah diedit oleh tim GezyTech.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/tutorials/membuat-rest-api-dengan-hono-bun/","section":"Tutorials","summary":"Pelajari cara membuat REST API dari nol menggunakan Hono framework dan Bun runtime. CRUD lengkap dengan TypeScript, middleware, validasi, dan deploy.","title":"Membuat REST API dengan Hono + Bun","type":"tutorials"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/nginx/","section":"Tags","summary":"","title":"Nginx","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/server/","section":"Tags","summary":"","title":"Server","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/ssl/","section":"Tags","summary":"","title":"Ssl","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/categories/tutorials/","section":"Categories","summary":"","title":"Tutorials","type":"categories"},{"content":"Tutorial praktis step-by-step untuk berbagai teknologi.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/tutorials/","section":"Tutorials","summary":"","title":"Tutorials","type":"tutorials"},{"content":" TLDR # Bun adalah runtime JavaScript modern yang dikembangkan oleh Jarred Sumner dan dirilis pada Juli 2022. Bun bukan sekadar pengganti Node.js — ia adalah toolkit all-in-one yang mencakup runtime, package manager (bun install), bundler, dan test runner dalam satu file biner. Dibangun dengan Zig dan menggunakan JavaScriptCore (bukan V8), Bun mampu menjalankan kode 4 kali lebih cepat dari Node.js. Artikel ini akan memandumu memulai Bun dari instalasi hingga membuat REST API sederhana.\nPendahuluan # Node.js telah menjadi standar runtime JavaScript selama 15 tahun terakhir. Namun seiring waktu, beberapa kelemahannya mulai terasa: package manager npm yang lambat, konfigurasi bundler yang rumit (Webpack, Vite, Rollup), dan inisialisasi proyek yang membutuhkan banyak boilerplate.\nBun hadir untuk menjawab semua masalah ini dalam satu paket.\nDengan Bun, kamu tidak perlu menginstal npm terpisah, tidak perlu Webpack untuk bundling, dan tidak perlu Jest atau Vitest untuk testing. Semua sudah termasuk dalam satu file biner berukuran sekitar 40 MB. Yang paling penting: Bun bisa 4-10 kali lebih cepat dalam instalasi package dan 2-4 kali lebih cepat dalam eksekusi kode.\nBagi kamu yang suka vibe coding — menulis kode cepat tanpa banyak setup — Bun adalah pilihan yang tepat.\nKonten Utama # 1. Apa Keunggulan Bun Dibanding Node.js? # Fitur Node.js Bun Runtime Engine V8 (C++) JavaScriptCore (WebKit) Ukuran instalasi ~30 MB + npm ~40 MB (all-in-one) Package manager npm / yarn / pnpm (terpisah) bun install (built-in, 10-30x lebih cepat) Bundler Webpack, Rollup, Vite (terpisah) bun build (built-in, esbuild-based) Test runner Jest, Vitest (terpisah) bun test (built-in, kompatibel Jest API) TypeScript Butuh ts-node atau compile dulu Native (jalan langsung tanpa config) File I/O Libuv + callback Libuv + POSIX API async Kecepatan Standar 4x lebih cepat pada benchmark 2. Instalasi Bun # Instalasi Bun sangat mudah. Cukup satu perintah:\ncurl -fsSL https://bun.sh/install | bash Atau jika lebih suka menggunakan npm:\nnpm install -g bun Untuk pengguna Linux (Debian/Ubuntu), bisa juga pakai:\nsudo apt install unzip curl -fsSL https://bun.sh/install | bash Setelah terinstal, verifikasi:\nbun --version # contoh output: 1.2.8 3. Perintah Dasar Bun # Inisialisasi Proyek # # Buat folder dan masuk mkdir my-bun-project cd my-bun-project # Inisialisasi package.json bun init Perintah bun init akan membuat file berikut secara interaktif:\npackage.json tsconfig.json (jika pakai TypeScript) index.ts (file entry point) Manajemen Package # # Install semua dependensi dari package.json bun install # Tambah package baru (dengan nama pendek dan cepat!) bun add express bun add zod bun add @types/node -d # Hapus package bun remove express # Update semua package bun update Bun menggunakan binary cache yang membuatnya 10-30x lebih cepat dari npm. Bahkan untuk proyek dengan 100+ dependensi, bun install selesai dalam 1-2 detik.\nMenjalankan Kode # # Jalankan file bun run index.ts # Jalankan script dari package.json bun run dev # Jalankan langsung kode inline bun -e \u0026#34;console.log(\u0026#39;Hello Bun!\u0026#39;)\u0026#34; 4. Bun Native TypeScript — Tanpa Config # Salah satu fitur terbaik Bun: tidak perlu konfigurasi TypeScript. Bun bisa menjalankan file .ts langsung tanpa tsconfig.json atau ts-node.\n// hello.ts const name: string = \u0026#34;Bun\u0026#34;; console.log(`Hello ${name}!`); // Jalankan langsung: // bun run hello.ts Fitur yang langsung berfungsi:\nTipe statis TypeScript Import path alias Environment variable dari .env JSX/TSX untuk React 5. Membuat REST API dengan Bun + Hono # Mari kita buat REST API sederhana menggunakan Hono — framework web ringan yang cocok dipasangkan dengan Bun.\nStep 1: Inisialisasi proyek # mkdir bun-hono-api cd bun-hono-api bun init Step 2: Install Hono # bun add hono Step 3: Buat file index.ts # import { Hono } from \u0026#39;hono\u0026#39;; import { cors } from \u0026#39;hono/cors\u0026#39;; const app = new Hono(); // Middleware CORS app.use(\u0026#39;/*\u0026#39;, cors()); // Route: GET / — Hello app.get(\u0026#39;/\u0026#39;, (c) =\u0026gt; { return c.json({ message: \u0026#39;Halo dari Bun + Hono!\u0026#39; }); }); // Route: GET /api/users app.get(\u0026#39;/api/users\u0026#39;, (c) =\u0026gt; { const users = [ { id: 1, name: \u0026#39;Budi\u0026#39; }, { id: 2, name: \u0026#39;Ani\u0026#39; }, { id: 3, name: \u0026#39;Citra\u0026#39; }, ]; return c.json(users); }); // Route: POST /api/users app.post(\u0026#39;/api/users\u0026#39;, async (c) =\u0026gt; { const body = await c.req.json(); return c.json( { message: \u0026#39;User created\u0026#39;, user: body }, 201, ); }); // Route: GET /api/hello/:name app.get(\u0026#39;/api/hello/:name\u0026#39;, (c) =\u0026gt; { const name = c.req.param(\u0026#39;name\u0026#39;); return c.json({ message: `Hello, ${name}!` }); }); export default app; Step 4: Jalankan server # bun run index.ts Atau gunakan mode watch (auto restart saat file berubah):\nbun --watch run index.ts Server berjalan di http://localhost:3000. Coba akses:\ncurl http://localhost:3000/ curl http://localhost:3000/api/users curl http://localhost:3000/api/hello/Pak%20Gun 6. Bun Package Manager — Kenapa Lebih Cepat? # Perbandingan kecepatan install package (100 package):\nTool Waktu Instalasi npm ~45 detik yarn ~35 detik pnpm ~25 detik bun install ~1.5 detik 🚀 Bun menggunakan beberapa teknik untuk mencapai kecepatan ini:\nGlobal binary cache: Package yang pernah diunduh disimpan, install berikutnya instan Request batching: Semua request HTTP dikirim paralel Zig implementation: Manajemen memori lebih efisien tanpa GC overhead JavaScriptCore optimization: Start-up time lebih cepat dari V8 7. Bun Test Runner # Bun memiliki test runner internal yang kompatibel dengan Jest API:\n// math.ts export function add(a: number, b: number): number { return a + b; } export function divide(a: number, b: number): number { if (b === 0) throw new Error(\u0026#39;Cannot divide by zero\u0026#39;); return a / b; } // math.test.ts import { describe, expect, test } from \u0026#39;bun:test\u0026#39;; import { add, divide } from \u0026#39;./math\u0026#39;; describe(\u0026#39;Math functions\u0026#39;, () =\u0026gt; { test(\u0026#39;add(2, 3) should return 5\u0026#39;, () =\u0026gt; { expect(add(2, 3)).toBe(5); }); test(\u0026#39;divide(10, 2) should return 5\u0026#39;, () =\u0026gt; { expect(divide(10, 2)).toBe(5); }); test(\u0026#39;divide by zero should throw\u0026#39;, () =\u0026gt; { expect(() =\u0026gt; divide(5, 0)).toThrow(\u0026#39;Cannot divide by zero\u0026#39;); }); }); Jalankan:\nbun test Hasil: output berwarna, waktu eksekusi cepat, dan format yang mudah dibaca.\n8. Bun Build — Bundler Bawaan # Bun bisa menggantikan Webpack atau Rollup untuk proyek sederhana:\n# Build file TypeScript ke JavaScript bun build index.ts --outdir=./dist # Build untuk production (minify) bun build index.ts --outdir=./dist --minify # Build dengan sourcemap bun build index.ts --outdir=./dist --sourcemap=external Contoh bundling aplikasi Hono:\nbun build index.ts --outdir=./dist --target=bun File output di ./dist/index.js siap di-deploy.\n9. Deploy Bun dengan Docker # Bun juga bisa di-container-kan dengan Docker. Contoh Dockerfile minimal:\nFROM oven/bun:latest WORKDIR /app # Copy package files COPY package.json bun.lock ./ RUN bun install # Copy source code COPY . . # Expose port EXPOSE 3000 # Run CMD [\u0026#34;bun\u0026#34;, \u0026#34;run\u0026#34;, \u0026#34;index.ts\u0026#34;] Build dan jalankan:\ndocker build -t bun-api . docker run -d -p 3000:3000 bun-api Dengan ukuran image sekitar 150 MB (vs Node.js yang 300+ MB), Bun sangat cocok untuk deployment container yang efisien.\n10. Kapan Sebaiknya Pakai Bun? # Cocok untuk:\nREST API dengan framework ringan (Hono, Elysia) CLI tools dan script automation Proyek vibe coding yang butuh setup cepat Aplikasi real-time (WebSocket) Microservices dengan container Kurang cocok untuk:\nProyek yang bergantung pada native Node.js modules (C++ addons) Aplikasi yang membutuhkan ekosistem tools lama (gulp, grunt, dll.) Proyek enterprise dengan ribuan dependensi yang sudah mature di Node.js Kesimpulan # Bun adalah masa depan runtime JavaScript. Dengan kecepatan eksekusi yang luar biasa, tool all-in-one yang terintegrasi, dan dukungan TypeScript native, Bun membuat pengalaman coding menjadi lebih cepat dan menyenangkan.\nBagi kamu yang suka vibe coding — tinggal install, buat file, dan langsung jalan tanpa ribet setup — Bun adalah pilihan yang sulit ditandingi. Mulailah dengan proyek kecil seperti REST API dengan Hono, dan rasakan sendiri perbedaan kecepatannya.\nLangkah selanjutnya:\nInstall Bun di sistemmu Coba bun init untuk proyek pertama Buat REST API sederhana dengan Hono Bandingkan sendiri kecepatannya dengan Node.js Selamat vibe coding dengan Bun! ⚡🚀\nArtikel ini ditulis dengan bantuan AI dan telah diedit oleh tim GezyTech.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/bun/belajar-bun-alternatif-nodejs-yang-lebih-cepat/","section":"Bun","summary":"Bun adalah runtime JavaScript all-in-one yang dirancang untuk kecepatan. Pelajari cara instalasi, fitur unggulan, dan cara membuat REST API dengan Bun dan Hono.","title":"Belajar Bun: Alternatif Node.js yang Lebih Cepat","type":"bun"},{"content":"JavaScript runtime cepat berbasis Bun.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/bun/","section":"Bun","summary":"","title":"Bun","type":"bun"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/categories/bun/","section":"Categories","summary":"","title":"Bun","type":"categories"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":" TLDR # Docker adalah platform yang memungkinkan kamu menjalankan aplikasi dalam container — lingkungan terisolasi yang ringan dan portabel. Bayangkan container sebagai \u0026ldquo;paket lengkap\u0026rdquo; berisi aplikasi beserta semua yang dibutuhkannya (library, konfigurasi, dependensi) yang bisa berjalan di mana saja tanpa ribet install ulang. Artikel ini akan membantumu memahami konsep dasar Docker dan langsung praktik dalam 10 menit.\nPendahuluan # Pernah mengalami masalah ini? Kamu sudah coding berjam-jam, aplikasi berjalan lancar di laptopmu. Tapi ketika dikirim ke teman atau di-deploy ke server, tiba-tiba error. \u0026ldquo;Kok di laptop saya jalan?\u0026rdquo; — kalimat klasik yang bikin frustrasi.\nPenyebabnya sederhana: lingkungan yang berbeda. Laptopmu punya versi Node.js yang berbeda, library yang tidak sama, atau konfigurasi sistem operasi yang lain.\nDocker hadir untuk menyelesaikan masalah ini dengan konsep container.\nContainer bukanlah hal baru — teknologi ini sudah ada sejak era 1970-an dalam bentuk UNIX chroot. Tapi Docker, yang dirilis pada 2013, membuat container menjadi mudah dan praktis digunakan oleh developer di seluruh dunia. Hingga 2026, Docker telah menjadi standar industri untuk pengembangan dan deployment aplikasi.\nArtikel ini akan membimbingmu dari nol: apa itu Docker, bagaimana cara kerjanya, dan bagaimana memulainya di Linux.\nKonten Utama # 1. Apa Itu Docker? # Docker adalah platform open-source untuk mengembangkan, mengirim, dan menjalankan aplikasi di dalam container. Docker memisahkan aplikasi dari infrastruktur sehingga kamu bisa mengirimkan perangkat lunak dengan cepat.\nApa bedanya dengan virtual machine (VM)?\nAspek Virtual Machine Docker Container Sistem Operasi Setiap VM punya OS sendiri (guest OS) Berbagi OS host Ukuran Gigabyte (GB) Megabyte (MB) Waktu boot Menit Detik Resource Berat (butuh RAM \u0026amp; CPU besar) Ringan (minimal overhead) Isolasi Sangat kuat (hardware-level) Cukup kuat (kernel-level) Karena container berbagi kernel dengan sistem host, container jauh lebih ringan dan cepat daripada VM. Ini kenapa kamu bisa menjalankan puluhan container di satu server tanpa masalah.\n2. Konsep Dasar Docker # Ada tiga konsep utama yang harus kamu pahami:\na. Image # Image adalah template read-only yang berisi instruksi untuk membuat container. Bayangkan image seperti resep masakan — dia berisi daftar bahan dan langkah-langkah, tapi belum ada masakannya.\nImage Docker biasanya didasarkan pada sistem operasi minimal (seperti Alpine Linux yang hanya 5 MB) ditambah aplikasi dan dependensinya.\nb. Container # Container adalah instance dari sebuah image yang sedang berjalan. Jika image adalah resep, container adalah masakan yang sudah jadi dan siap dimakan.\nKamu bisa memiliki banyak container dari image yang sama. Misalnya, kamu punya image Nginx, lalu menjalankan 3 container Nginx untuk 3 website berbeda.\nc. Registry / Docker Hub # Registry adalah tempat menyimpan dan mendistribusikan image Docker. Docker Hub adalah registry publik default yang berisi ribuan image siap pakai: Ubuntu, Nginx, PostgreSQL, Node.js, dan masih banyak lagi.\n3. Istilah Penting Lainnya # Istilah Penjelasan Dockerfile File teks berisi instruksi untuk membangun image Docker docker-compose.yml File konfigurasi untuk menjalankan multi-container (misal: app + database + cache) Volume Penyimpanan persisten untuk data container (data tidak hilang saat container dihapus) Port Mapping Meneruskan port dari container ke host (misal: port 3000 container → port 80 host) Bind Mount Menghubungkan folder di host ke folder di container (untuk development) 4. Instalasi Docker di Linux # Cara termudah install Docker di Linux (Ubuntu/Debian):\n# Hapus paket lama jika ada sudo apt remove docker docker-engine docker.io containerd runc # Update paket sudo apt update # Install dependensi sudo apt install ca-certificates curl gnupg # Tambah GPG key resmi Docker sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Tambah repository Docker echo \u0026#34;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release \u0026amp;\u0026amp; echo \u0026#34;$VERSION_CODENAME\u0026#34;) stable\u0026#34; | sudo tee /etc/apt/sources.list.d/docker.list \u0026gt; /dev/null # Install Docker sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Verifikasi instalasi sudo docker run hello-world # Agar bisa pakai Docker tanpa sudo (tambahkan user ke grup docker) sudo usermod -aG docker $USER # Logout lalu login kembali atau jalankan: newgrp docker 5. Perintah Docker Dasar yang Wajib Diketahui # Manajemen Image # # Melihat daftar image lokal docker images # Mendownload image dari Docker Hub docker pull nginx:alpine docker pull ubuntu:22.04 # Menghapus image docker rmi nginx:alpine Manajemen Container # # Menjalankan container docker run nginx:alpine # Menjalankan container di background (detached) docker run -d nginx:alpine # Menjalankan container dengan port mapping docker run -d -p 8080:80 nginx:alpine # Melihat container yang berjalan docker ps # Melihat semua container (termasuk yang berhenti) docker ps -a # Menghentikan container docker stop \u0026lt;container_id\u0026gt; # Menghapus container docker rm \u0026lt;container_id\u0026gt; Interaksi dengan Container # # Masuk ke dalam container yang sedang berjalan docker exec -it \u0026lt;container_id\u0026gt; /bin/sh # Melihat log container docker logs \u0026lt;container_id\u0026gt; # Melihat resource yang dipakai container docker stats 6. Membuat Image Sendiri dengan Dockerfile # Ini bagian yang paling penting. Mari kita buat aplikasi web sederhana dengan Node.js.\nBuat folder proyek dan file-file berikut:\napp.js\nconst express = require(\u0026#39;express\u0026#39;); const app = express(); const PORT = 3000; app.get(\u0026#39;/\u0026#39;, (req, res) =\u0026gt; { res.send(\u0026#39;Halo dari Docker! 🐳\u0026#39;); }); app.listen(PORT, () =\u0026gt; { console.log(`Server berjalan di port ${PORT}`); }); package.json\n{ \u0026#34;name\u0026#34;: \u0026#34;docker-demo\u0026#34;, \u0026#34;version\u0026#34;: \u0026#34;1.0.0\u0026#34;, \u0026#34;dependencies\u0026#34;: { \u0026#34;express\u0026#34;: \u0026#34;^4.18.2\u0026#34; } } Dockerfile\n# Gunakan image Node.js versi 20 (ringan) FROM node:20-alpine # Buat folder kerja di dalam container WORKDIR /app # Copy file dependensi COPY package.json ./ # Install dependensi RUN npm install # Copy semua file aplikasi COPY . . # Buka port 3000 EXPOSE 3000 # Perintah saat container dijalankan CMD [\u0026#34;node\u0026#34;, \u0026#34;app.js\u0026#34;] Build dan jalankan:\n# Build image docker build -t docker-demo . # Jalankan container docker run -d -p 3000:3000 docker-demo # Buka browser: http://localhost:3000 7. Menggunakan Docker Compose untuk Multi-Container # Aplikasi nyata biasanya butuh lebih dari satu service. Contoh: aplikasi web + database MySQL.\ndocker-compose.yml\nversion: \u0026#39;3.8\u0026#39; services: app: build: . ports: - \u0026#34;3000:3000\u0026#34; depends_on: - db environment: - DB_HOST=db - DB_USER=root - DB_PASSWORD=secret db: image: mysql:8.0 environment: - MYSQL_ROOT_PASSWORD=secret - MYSQL_DATABASE=myapp volumes: - mysql_data:/var/lib/mysql volumes: mysql_data: Jalankan dengan satu perintah:\ndocker compose up -d Docker Compose akan:\nBuild image aplikasi Download image MySQL Jalankan kedua container Hubungkan mereka dalam satu network internal 8. Praktik Terbaik Docker # Praktik Penjelasan Gunakan image kecil Pilih alpine atau slim variant untuk ukuran minimal Multi-stage build Pisahkan environment build dan runtime dalam satu Dockerfile Jangan simpan data di container Gunakan volume untuk data yang perlu bertahan Satu proses per container Jangan jalankan banyak service dalam satu container Gunakan .dockerignore Sama seperti .gitignore, untuk mengecualikan file yang tidak perlu Tag image dengan versi Jangan pakai latest untuk production; gunakan v1.0, v2.0, dll Scan keamanan Gunakan docker scan untuk memeriksa kerentanan image 9. Contoh Multi-stage Build # # Stage 1: Build FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Stage 2: Production FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html EXPOSE 80 CMD [\u0026#34;nginx\u0026#34;, \u0026#34;-g\u0026#34;, \u0026#34;daemon off;\u0026#34;] Hasilnya: image final hanya berisi file statis (HTML, JS, CSS) tanpa Node.js — ukuran turun dari 200 MB menjadi hanya 20 MB!\nKesimpulan # Docker adalah alat yang powerful untuk mengatasi masalah \u0026ldquo;bekerja di laptop saya\u0026rdquo; dan menyederhanakan deployment aplikasi. Dengan Docker, kamu bisa:\nMenjamin konsistensi lingkungan dari development ke production Mengisolasi aplikasi tanpa overhead VM Memulai dan menghentikan aplikasi dalam hitungan detik Berbagi environment dengan tim melalui Dockerfile Mengelola aplikasi multi-service dengan Docker Compose Langkah selanjutnya setelah membaca artikel ini:\nInstall Docker di Linux-mu Coba docker run hello-world Jalankan container Nginx: docker run -d -p 8080:80 nginx:alpine Akses http://localhost:8080 — lihat? Semudah itu! Buat Dockerfile untuk proyekmu sendiri Docker bukan lagi \u0026ldquo;opsional\u0026rdquo; — ini sudah menjadi keterampilan dasar yang harus dimiliki setiap developer. Semakin cepat kamu memulainya, semakin banyak waktu yang bisa kamu hemat di masa depan.\nSelamat mencoba, dan selamat datang di dunia container! 🐳\nArtikel ini ditulis dengan bantuan AI dan telah diedit oleh tim GezyTech.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/docker/apa-itu-docker-panduan-memulai-untuk-pemula/","section":"Docker","summary":"Pelajari konsep dasar Docker, cara kerja container, dan langkah-langkah praktis untuk memulai Docker di Linux. Cocok untuk pemula yang baru pertama kali mendengar istilah container.","title":"Apa itu Docker? Panduan Memulai untuk Pemula","type":"docker"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/container/","section":"Tags","summary":"","title":"Container","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/categories/docker/","section":"Categories","summary":"","title":"Docker","type":"categories"},{"content":"Container, Docker Compose, dan best practices deployment.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/docker/","section":"Docker","summary":"","title":"Docker","type":"docker"},{"content":"Artikel-artikel tentang Artificial Intelligence, Large Language Models, dan machine learning.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/ai/","section":"AI","summary":"","title":"AI","type":"ai"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/categories/ai/","section":"Categories","summary":"","title":"AI","type":"categories"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/chatgpt/","section":"Tags","summary":"","title":"ChatGPT","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/llm/","section":"Tags","summary":"","title":"LLM","type":"tags"},{"content":" TLDR # Prompt engineering adalah seni dan ilmu merancang instruksi (prompt) untuk mendapatkan output terbaik dari model AI seperti ChatGPT, Claude, atau Gemini. Artikel ini membahas teknik dasar hingga strategi lanjutan, lengkap dengan contoh konkret yang bisa langsung kamu praktikkan.\nPendahuluan # Bayangkan kamu punya asisten super cerdas yang bisa menulis email, membuat kode program, meringkas dokumen, atau bahkan membantu riset. Tapi ada satu masalah: asisten ini tidak bisa membaca pikiran. Dia hanya melakukan apa yang kamu perintahkan — persis seperti yang kamu tuliskan.\nDi sinilah prompt engineering berperan.\nPrompt engineering adalah keterampilan merancang perintah tertulis (prompt) agar model AI bahasa besar (Large Language Model / LLM) menghasilkan respons yang akurat, relevan, dan sesuai dengan yang kamu inginkan. Tanpa prompt yang baik, AI bisa memberikan jawaban yang ambigu, tidak fokus, atau bahkan salah total.\nKabar baiknya: prompt engineering bukanlah sihir. Ini adalah keterampilan yang bisa dipelajari siapa saja — termasuk kamu yang baru pertama kali menggunakan AI.\nArtikel ini akan membimbingmu dari nol hingga mahir dalam merancang prompt, lengkap dengan contoh nyata dan trik yang langsung bisa kamu pakai hari ini.\nKonten Utama # 1. Apa Itu Prompt Engineering? # Prompt engineering adalah proses merancang dan menyempurnakan input teks (prompt) untuk memandu model AI menghasilkan output yang diinginkan. Istilah ini mulai populer sejak ChatGPT dirilis pada akhir 2022 dan kini menjadi salah satu keterampilan paling dicari di era AI.\nKenapa prompt engineering penting?\nModel AI tidak bisa membaca niat — mereka hanya memproses teks yang kamu berikan Prompt yang buruk menghasilkan output yang buruk (garbage in, garbage out) Prompt yang baik bisa meningkatkan akurasi hingga 80-90% Menghemat waktu karena mengurangi iterasi perbaikan 2. Struktur Dasar Prompt yang Efektif # Setiap prompt yang baik umumnya memiliki empat komponen berikut:\na. Persona (Siapa AI-nya?) # Beri AI peran yang jelas agar dia merespons dalam konteks yang tepat.\nKamu adalah seorang guru matematika SMP yang ramah. Jelaskan konsep Pythagoras kepada siswa kelas 8. b. Tugas (Apa yang harus dilakukan?) # Sebutkan tindakan spesifik yang kamu inginkan.\nBuatlah ringkasan artikel berikut dalam 3 paragraf... c. Konteks (Informasi pendukung apa yang relevan?) # Berikan latar belakang agar AI memahami situasi.\nSaya sedang menulis proposal untuk proyek UKKJ. Target pembaca adalah kepala sekolah dan pengawas. Bantu saya menyusun kerangka proposal... d. Format (Bagaimana output-nya?) # Tentukan format output: bullet points, tabel, paragraf, kode, atau lainnya.\nTulis dalam bentuk tabel dengan kolom: Topik, Waktu, dan Kegiatan. 3. Teknik Prompt Engineering untuk Pemula # Berikut teknik-teknik yang paling mudah dipraktikkan:\nTeknik 1: Zero-Shot Prompting # Memberi perintah langsung tanpa contoh. Cocok untuk tugas sederhana.\nTuliskan 3 fakta menarik tentang planet Mars. Teknik 2: Few-Shot Prompting # Memberikan beberapa contoh sebelum meminta AI mengerjakan tugas serupa. Efektif untuk tugas yang membutuhkan pola tertentu.\nUbah kalimat berikut ke bentuk pasif: Aktif: Kucing itu memakan ikan. → Pasif: Ikan itu dimakan kucing. Aktif: Ibu memasak nasi goreng. → Pasif: Nasi goreng dimasak ibu. Aktif: Andi membaca buku di perpustakaan. → Pasif: Teknik 3: Chain-of-Thought (CoT) # Meminta AI berpikir langkah demi langkah sebelum memberikan jawaban. Sangat efektif untuk soal logika, matematika, atau analisis.\nSebuah toko menjual 15 buku setiap hari. Jika toko buka 6 hari dalam seminggu, berapa buku yang terjual dalam 4 minggu? Selesaikan langkah demi langkah. Teknik 4: Role Prompting # Memberi AI peran spesifik agar responsnya sesuai dengan perspektif yang diinginkan.\nKamu adalah seorang pengacara yang sedang mempersiapkan argumen hukum. Analisis kasus berikut dari sudut pandang hukum... 4. Strategi Prompting Tingkat Lanjut # Setelah menguasai dasar, coba teknik berikut:\nIterative Refinement # Jangan berharap prompt pertama langsung sempurna. Prompt yang baik adalah hasil dari iterasi:\nTulis prompt versi pertama Evaluasi output Identifikasi kekurangannya Revisi prompt dengan instruksi tambahan Ulangi sampai hasilnya memuaskan Negative Prompting # Kadang lebih mudah menyebutkan apa yang TIDAK kamu inginkan.\nJelaskan teori relativitas. Jangan gunakan rumus matematika. Jelaskan dengan analogi sederhana yang bisa dipahami anak SMP. Temperature Setting # Parameter temperature mengontrol \u0026ldquo;kreativitas\u0026rdquo; AI:\nTemperature rendah (0.0–0.3): Output lebih deterministik, cocok untuk fakta dan kode Temperature sedang (0.4–0.7): Seimbang antara kreativitas dan akurasi Temperature tinggi (0.8–1.0): Lebih kreatif, cocok untuk cerita dan ide 5. Contoh Prompt untuk Berbagai Kebutuhan # Untuk Menulis Email # Kamu adalah asisten profesional. Tulislah email follow-up kepada klien yang belum merespons proposal saya selama seminggu. Nama saya: Gunanto. Nama klien: Pak Budi. Proyek: Implementasi sistem informasi sekolah. Buatlah nada yang sopan tapi tidak mendesak. Untuk Membantu Belajar # Saya sedang belajar teorema Pythagoras di kelas 8 SMP. Jelaskan konsep ini dengan: 1. Definisi sederhana 2. Contoh soal dengan gambar (deskripsikan) 3. Soal latihan dengan jawaban Gunakan bahasa yang mudah dipahami anak SMP. Untuk Membuat Kode Program # Buatlah fungsi JavaScript untuk menghitung diskon: - Input: harga asli (number), persen diskon (number) - Output: harga setelah diskon (number) - Sertakan validasi input - Tulis dengan gaya ES6 Untuk Meringkas Dokumen # Ringkas artikel berikut dalam 100 kata. Fokus pada poin-poin utama saja. Hilangkan opini penulis dan detail teknis yang tidak penting. Gunakan bahasa Indonesia yang baik dan benar. 6. Kesalahan Umum yang Harus Dihindari # Kesalahan Contoh Salah Contoh Benar Prompt terlalu umum \u0026ldquo;Buatkan artikel\u0026rdquo; \u0026ldquo;Buatkan artikel 500 kata tentang manfaat AI dalam pendidikan, dengan gaya formal\u0026rdquo; Tidak memberi konteks \u0026ldquo;Jelaskan ini\u0026rdquo; \u0026ldquo;Saya guru SMP, jelaskan konsep ini untuk siswa kelas 8\u0026rdquo; Perintah ambigu \u0026ldquo;Perbaiki tulisan ini\u0026rdquo; \u0026ldquo;Perbaiki tata bahasa dan ejaan tulisan ini, jangan ubah gaya penulisan\u0026rdquo; Terlalu banyak instruksi dalam satu prompt [5 instruksi berbeda sekaligus] [Pisahkan menjadi beberapa prompt atau gunakan numbered list] Tidak menentukan format output \u0026ldquo;Buat daftar\u0026rdquo; \u0026ldquo;Buat daftar bullet dengan format: [Nama] — [Deskripsi] — [Contoh]\u0026rdquo; Kesimpulan # Prompt engineering adalah keterampilan esensial di era AI. Dengan menguasai teknik dasar seperti role prompting, few-shot learning, dan chain-of-thought, kamu bisa mendapatkan hasil yang jauh lebih baik dari model AI manapun.\nIngatlah tiga prinsip utama:\nSpesifik: Semakin jelas instruksimu, semakin baik hasilnya Konteks: Beri AI latar belakang yang cukup Iterasi: Prompt yang sempurna lahir dari perbaikan bertahap Mulailah praktikkan teknik-teknik di atas hari ini — semakin sering kamu berlatih, semakin intuitif kamu dalam merancang prompt yang efektif.\nSelamat mencoba, dan jangan ragu untuk bereksperimen. Karena pada akhirnya, AI yang hebat dimulai dari prompt yang hebat! 🚀\nArtikel ini ditulis dengan bantuan AI dan telah diedit oleh tim GezyTech.\n","date":"16 Juli 2026","externalUrl":null,"permalink":"/ai/prompt-engineering-untuk-pemula/","section":"AI","summary":"Pelajari teknik dasar prompt engineering untuk mendapatkan hasil maksimal dari AI. Panduan lengkap dari struktur prompt hingga strategi lanjutan.","title":"Prompt Engineering untuk Pemula: Cara Efektif Berkomunikasi dengan AI","type":"ai"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/prompt-engineering/","section":"Tags","summary":"","title":"Prompt-Engineering","type":"tags"},{"content":"","date":"16 Juli 2026","externalUrl":null,"permalink":"/tags/tips/","section":"Tags","summary":"","title":"Tips","type":"tags"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"Database MariaDB dan MySQL untuk berbagai kebutuhan.\n","externalUrl":null,"permalink":"/mariadb/","section":"MariaDB","summary":"","title":"MariaDB","type":"mariadb"},{"content":"Node.js, npm, dan ekosistem JavaScript di backend.\n","externalUrl":null,"permalink":"/nodejs/","section":"Node.js","summary":"","title":"Node.js","type":"nodejs"},{"content":" Kebijakan Privasi # Blog GezyTech menghormati privasi pengunjung. Kami tidak mengumpulkan data pribadi tanpa persetujuan Anda.\nData yang Dikumpulkan # Analitik: Kami menggunakan analitik privacy-first untuk memahami lalu lintas. Cookie: Hanya cookie yang diperlukan untuk fungsionalitas situs. Hubungi Kami # Untuk pertanyaan terkait privasi, hubungi: info@gezytech.web.id\n","externalUrl":null,"permalink":"/privacy/","section":"Privacy Policy","summary":"","title":"Privacy Policy","type":"privacy"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"Konfigurasi dan manajemen server untuk production.\n","externalUrl":null,"permalink":"/server/","section":"Server","summary":"","title":"Server","type":"server"},{"content":"Database ringan SQLite untuk aplikasi skala kecil dan menengah.\n","externalUrl":null,"permalink":"/sqlite/","section":"SQLite","summary":"","title":"SQLite","type":"sqlite"}]