{"id":1158,"date":"2026-05-20T12:04:40","date_gmt":"2026-05-20T05:04:40","guid":{"rendered":"https:\/\/www.jakhoster.com\/blog\/docker-website-deployment-vps-hosting\/"},"modified":"2026-05-20T12:04:40","modified_gmt":"2026-05-20T05:04:40","slug":"docker-website-deployment-vps-hosting","status":"publish","type":"post","link":"https:\/\/www.jakhoster.com\/blog\/docker-website-deployment-vps-hosting\/","title":{"rendered":"Panduan Lengkap Docker Website Deployment untuk VPS dan Hosting"},"content":{"rendered":"<h2>Menghadapi Tantangan dalam Deployment Website<\/h2>\n<p>Dalam dunia pengembangan perangkat lunak dan operasi, salah satu tantangan terbesar yang sering dihadapi adalah bagaimana melakukan deployment aplikasi web dengan efisien dan tanpa downtime. Bayangkan Anda sedang menjalankan website kritikal untuk bisnis Anda, dan server mulai mengalami beban tinggi. Pengguna melaporkan waktu loading yang lambat, dan bahkan ada beberapa yang mengalami downtime. Ini adalah skenario yang sering terjadi di lingkungan produksi dan memerlukan solusi yang handal.<\/p>\n<p>Docker hadir sebagai solusi yang memungkinkan kita untuk mengisolasi aplikasi dengan semua dependensinya menjadi satu paket yang disebut kontainer. Dengan Docker, kita bisa melakukan deployment yang lebih cepat dan lebih aman. Di artikel ini, kita akan membahas bagaimana cara melakukan deployment website menggunakan Docker, mulai dari setup lingkungan hingga optimasi dan scaling.<\/p>\n<h2>Persiapan Lingkungan Docker<\/h2>\n<p>Sebelum kita mulai, pastikan Anda telah menginstal Docker di server Anda. Di bawah ini adalah langkah-langkah untuk menginstal Docker di sistem berbasis Linux seperti Ubuntu.<\/p>\n<h3>Instalasi Docker di Ubuntu<\/h3>\n<pre><code>sudo apt-get update\nsudo apt-get install apt-transport-https ca-certificates curl software-properties-common\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo apt-key add -\nsudo add-apt-repository \"deb [arch=amd64] https:\/\/download.docker.com\/linux\/ubuntu $(lsb_release -cs) stable\"\nsudo apt-get update\nsudo apt-get install docker-ce<\/code><\/pre>\n<p>Perintah di atas melakukan hal-hal berikut:<\/p>\n<ul>\n<li><code>sudo apt-get update<\/code>: Memperbarui daftar paket yang tersedia.<\/li>\n<li><code>sudo apt-get install apt-transport-https ca-certificates curl software-properties-common<\/code>: Menginstal paket yang dibutuhkan untuk menambahkan repositori baru.<\/li>\n<li><code>curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo apt-key add -<\/code>: Menambahkan kunci GPG untuk repositori Docker.<\/li>\n<li><code>sudo add-apt-repository...<\/code>: Menambahkan repositori Docker ke dalam daftar sumber paket.<\/li>\n<li><code>sudo apt-get install docker-ce<\/code>: Menginstal Docker Community Edition.<\/li>\n<\/ul>\n<p>Setelah instalasi, pastikan Docker berjalan dengan perintah berikut:<\/p>\n<pre><code>sudo systemctl start docker\nsudo systemctl enable docker<\/code><\/pre>\n<h2>Membuat Dockerfile untuk Website Node.js<\/h2>\n<p>Setelah Docker terinstal, langkah berikutnya adalah membuat <code>Dockerfile<\/code> untuk aplikasi Node.js kita. Dockerfile adalah file teks yang berisi semua instruksi untuk membangun image Docker.<\/p>\n<h3>Contoh Dockerfile<\/h3>\n<pre><code>FROM node:14\n\n# Set working directory\nWORKDIR \/usr\/src\/app\n\n# Copy package.json and package-lock.json\nCOPY package*.json .\/\n\n# Install dependencies\nRUN npm install\n\n# Copy source files\nCOPY . .\n\n# Expose the application port\nEXPOSE 3000\n\n# Run the application\nCMD [\"node\", \"app.js\"]<\/code><\/pre>\n<p>Dalam Dockerfile di atas:<\/p>\n<ul>\n<li><code>FROM node:14<\/code>: Menggunakan image Node.js versi 14 sebagai basis.<\/li>\n<li><code>WORKDIR \/usr\/src\/app<\/code>: Menentukan direktori kerja di dalam kontainer.<\/li>\n<li><code>COPY package*.json .\/<\/code>: Menyalin file <code>package.json<\/code> dan <code>package-lock.json<\/code> ke dalam kontainer.<\/li>\n<li><code>RUN npm install<\/code>: Menginstal semua dependensi yang terdaftar di <code>package.json<\/code>.<\/li>\n<li><code>COPY . .<\/code>: Menyalin semua file sumber aplikasi ke dalam kontainer.<\/li>\n<li><code>EXPOSE 3000<\/code>: Memberitahu Docker bahwa kontainer mendengarkan pada port 3000.<\/li>\n<li><code>CMD [\"node\", \"app.js\"]<\/code>: Menjalankan aplikasi Node.js.<\/li>\n<\/ul>\n<h2>Membangun dan Menjalankan Kontainer<\/h2>\n<p>Setelah kita memiliki <code>Dockerfile<\/code>, langkah selanjutnya adalah membangun image dan menjalankan kontainer. Jalankan perintah berikut di terminal Anda di direktori yang sama dengan Dockerfile:<\/p>\n<pre><code>docker build -t my-node-app .<\/code><\/pre>\n<p>Perintah ini akan membangun image dengan nama <code>my-node-app<\/code>. Tanda titik di akhir perintah menunjukkan bahwa Docker harus mencari <code>Dockerfile<\/code> di direktori saat ini.<\/p>\n<h3>Menjalankan Kontainer<\/h3>\n<pre><code>docker run -d -p 3000:3000 --name node-app my-node-app<\/code><\/pre>\n<p>Dalam perintah ini:<\/p>\n<ul>\n<li><code>-d<\/code>: Menjalankan kontainer di latar belakang (detached mode).<\/li>\n<li><code>-p 3000:3000<\/code>: Memetakan port 3000 di host ke port 3000 di dalam kontainer.<\/li>\n<li><code>--name node-app<\/code>: Menetapkan nama untuk kontainer yang sedang dijalankan.<\/li>\n<li><code>my-node-app<\/code>: Menunjukkan nama image yang akan dijalankan.<\/li>\n<\/ul>\n<h2>Menambahkan Database MySQL dengan Docker Compose<\/h2>\n<p>Dalam banyak kasus, aplikasi web memerlukan database untuk menyimpan data. Docker Compose memungkinkan kita untuk mendefinisikan dan menjalankan beberapa kontainer sebagai satu aplikasi. Mari kita buat file <code>docker-compose.yml<\/code>.<\/p>\n<h3>Contoh docker-compose.yml<\/h3>\n<pre><code>version: '3'\nservices:\n  app:\n    build: .\n    ports:\n      - '3000:3000'\n  db:\n    image: mysql:5.7\n    restart: always\n    environment:\n      MYSQL_ROOT_PASSWORD: example\n      MYSQL_DATABASE: my_database\n    volumes:\n      - db_data:\/var\/lib\/mysql\n\nvolumes:\n  db_data:<\/code><\/pre>\n<p>Dalam <code>docker-compose.yml<\/code> ini:<\/p>\n<ul>\n<li><code>version: '3'<\/code>: Menentukan versi Docker Compose yang digunakan.<\/li>\n<li><code>services:<\/code>: Menentukan layanan yang dijalankan.<\/li>\n<li><code>app:<\/code>: Layanan untuk aplikasi Node.js.<\/li>\n<li><code>db:<\/code>: Layanan untuk database MySQL.<\/li>\n<li><code>environment:<\/code>: Menetapkan variabel lingkungan untuk konfigurasi MySQL.<\/li>\n<li><code>volumes:<\/code>: Menyimpan data MySQL secara persisten.<\/li>\n<\/ul>\n<p>Untuk menjalankan semua layanan yang didefinisikan, gunakan perintah:<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<h2>Optimasi dan Monitoring Kontainer<\/h2>\n<p>Setelah aplikasi dan database berjalan, penting untuk memantau performa kontainer. Anda bisa menggunakan tools seperti Prometheus untuk monitoring dan Grafana untuk visualisasi data performa. Selain itu, pastikan Anda memperhatikan penggunaan sumber daya dengan perintah berikut:<\/p>\n<pre><code>docker stats<\/code><\/pre>\n<p>Perintah ini akan menunjukkan penggunaan CPU dan memori dari semua kontainer yang berjalan.<\/p>\n<h3>Scaling Aplikasi dengan Docker<\/h3>\n<p>Salah satu keunggulan Docker adalah kemampuannya untuk melakukan scaling dengan mudah. Misalnya, jika Anda memerlukan lebih banyak instance dari aplikasi Node.js, Anda bisa menggunakan perintah:<\/p>\n<pre><code>docker-compose up --scale app=3 -d<\/code><\/pre>\n<p>Perintah ini akan menjalankan 3 instance dari aplikasi Anda, membantu menangani lebih banyak permintaan pengguna.<\/p>\n<h2>Keamanan Kontainer<\/h2>\n<p>Saat menggunakan Docker, keamanan adalah hal yang sangat penting. Pastikan Anda tidak menjalankan kontainer dengan hak akses root jika tidak diperlukan. Gunakan user namespace untuk memberikan isolasi tambahan. Anda juga perlu memindai image Docker Anda untuk kerentanan dengan menggunakan alat seperti <code>Clair<\/code> atau <code>Trivy<\/code>.<\/p>\n<h3>Backup Data Kontainer<\/h3>\n<p>Jangan lupa untuk melakukan backup data dari kontainer yang menyimpan informasi penting seperti database. Untuk melakukan backup database MySQL, Anda bisa menggunakan perintah:<\/p>\n<pre><code>docker exec db-container-name mysqldump -u root -p my_database &gt; backup.sql<\/code><\/pre>\n<p>Di mana <code>db-container-name<\/code> adalah nama kontainer MySQL Anda. Perintah ini akan mengekspor database ke file <code>backup.sql<\/code>.<\/p>\n<h2>Kesimpulan<\/h2>\n<p>Dengan mengikuti langkah-langkah di atas, Anda dapat melakukan deployment website menggunakan Docker dengan lebih efisien dan aman. Dari instalasi Docker, pembuatan Dockerfile, hingga pengaturan database MySQL dan monitoring, semua aspek penting sudah dibahas untuk membantu Anda mengelola lingkungan produksi dengan lebih baik. Ingatlah untuk selalu memperhatikan aspek keamanan dan melakukan backup data untuk menjaga integritas aplikasi Anda.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pelajari cara mendalam melakukan deployment website menggunakan Docker di VPS dan hosting. Temukan langkah-langkah praktis, solusi untuk tantangan umum, dan optimasi untuk performa terbaik.<\/p>\n","protected":false},"author":5,"featured_media":1157,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[87],"tags":[],"class_list":["post-1158","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/posts\/1158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/comments?post=1158"}],"version-history":[{"count":0,"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/posts\/1158\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/media\/1157"}],"wp:attachment":[{"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/media?parent=1158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/categories?post=1158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jakhoster.com\/blog\/wp-json\/wp\/v2\/tags?post=1158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}