Panduan Lengkap Setup Stack Web Server dengan Docker
Docker sekarang jadi salah satu tools paling populer buat mengelola aplikasi agar lebih efisien, termasuk buat setup web server. Di artikel kali ini, kita akan membahas cara mudah membangun stack web server yang terdiri dari Nginx, PHP, dan MySQL. Nah, karena semua komponen ini akan jalan di container masing-masing, proses deploy dan setup server jadi makin mudah. Jadi, kalau mau buat dev environment yang rapi, clean, dan anti ribet, cus langsung ikutin step-by-step-nya di bawah!
Persiapan Sebelum Mulai
Sebelum mulai mengulik setup stack web server di Docker, pastikan dulu udah menyiapkan beberapa hal penting di bawah ini:
- Install Docker: Pastikan Docker udah terinstall di VPS. Kalau belum, bisa cek panduan instalasi Docker.
- Cek Docker: Coba cek pakai commandย docker โversion buat lihat apakah Docker sudah ke-install dan versinya sesuai. Kalau muncul versi, berarti aman.
- Siapkan akses terminal: Kita bakal banyak pakai terminal, jadi pastikan punya akses ke terminal atau SSH di server.
Setup Docker Compose untuk Stack Web Server
Dengan Compose, kamu bisa atur stack web server sepertiย Nginx, PHP, dan MySQL dalam satu file aja. Jadi lebih praktis, tinggal ketik satu command, semuanya langsung running bersama.
1. Persiapan File docker-compose.yml
Buat file baru dengan nama docker-compose.yml di direktori project. Di dalam file ini akan mendefinisikan semua service yang dibutuhkan.
2. Konfigurasi docker-compose.yml
Berikut contoh file docker-compose.yml untuk setup stack web server (Nginx + PHP + MySQL):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
version: '3.9' services: ย ย nginx: ย ย ย ย image: nginx:latest ย ย ย ย container_name: main_nginx ย ย ย ย ports: ย ย ย ย ย ย - "80:80" ย ย ย ย volumes: ย ย ย ย ย ย - ./nginx.conf:/etc/nginx/nginx.conf ย ย ย ย ย ย - ./www:/var/www/html ย ย ย ย depends_on: ย ย ย ย ย ย - php ย ย ย ย networks: ย ย ย ย ย ย - webserver ย ย php: ย ย ย ย image: php:8.2-fpm ย ย ย ย container_name: php-fpm ย ย ย ย volumes: ย ย ย ย ย ย - ./www:/var/www/html ย ย ย ย networks: ย ย ย ย ย ย - webserver ย ย mysql: ย ย ย ย image: mysql:latest ย ย ย ย container_name: my_db ย ย ย ย environment: ย ย ย ย ย ย MYSQL_ROOT_PASSWORD: rootpassword ย ย ย ย ย ย MYSQL_DATABASE: my_db ย ย ย ย volumes: ย ย ย ย ย ย - ./mysql_data:/var/lib/mysql ย ย ย ย networks: ย ย ย ย ย ย - webserver networks: ย ย webserver: ย ย ย ย driver: bridge |
3. Membuat File Konfigurasi Nginx
Buat file konfigurasi untuk Nginx, misalnya nginx.conf, dengan settingan dasar seperti ini:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
server { ย ย ย ย listen 80; ย ย ย ย server_name domain.com; ย ย ย ย root /var/www/html; ย ย ย ย index index.php index.html index.htm; ย ย ย ย location / { ย ย ย ย ย ย ย ย try_files $uri $uri/ /index.php?$query_string; ย ย ย ย } ย ย ย ย location ~ \.php$ { ย ย ย ย ย ย ย ย fastcgi_pass php:9000; ย ย ย ย ย ย ย ย fastcgi_index index.php; ย ย ย ย ย ย ย ย fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; ย ย ย ย ย ย ย ย include fastcgi_params; ย ย ย ย } } |
4. Menjalankan Docker Compose
Setelah file docker-compose.yml dan nginx.conf selesai, run command ini buat download image dan container:
|
1 |
docker-compose up -d |
5. Cek Status dan Akses Web Server
Buat cek status container yang udan running, pakai command:
|
1 |
docker-compose ps |
DomaiNesians bisa akses website di browser dengan mengunjungi http://domain.com. Kalau semuanya berjalan benar, Nginx akan memproses request dan menghubungkan ke PHP-FPM.
Membuat Dockerfile Nginx, PHP, dan MySQL
Waktu setup stack web server pakai Docker Compose, kita perlu buat Dockerfile tiap komponen supaya semuanya bisa lancar. Di langkah ini, kita akan buat Dockerfile Nginx, PHP, dan MySQL. Buat MySQL, bisa langsung pakai image resmi dari Docker Hub, jadi tidak perlu repot bikin Dockerfile khusus. Tapi buat Nginx dan PHP, kita akan kustomisasi sedikit agar sesuai dengan kebutuhan proyek kita.
1. Dockerfile Nginx
Untuk Nginx, kita cukup pakai image resmi dari Docker Hub, tapi kita bisa tambah konfigurasi khusus misalnya, file konfigurasi Nginx dan website. Berikut contoh Dockerfile Nginx:
|
1 2 3 4 5 6 7 8 |
# Gunakan image resmi Nginx FROM nginx:latest # Salin konfigurasi Nginx dari host ke container COPY nginx.conf /etc/nginx/nginx.conf # Salin file website dari host ke container COPY ./www /var/www/html # Expose port 80 agar bisa diakses dari luar EXPOSE 80 |
2. Dockerfile PHP
Di PHP, menggunakan PHP-FPM yang berjalan sebagai service terpisah. Berikut Dockerfile PHP:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Gunakan image resmi PHP dengan FPM FROM php:8.2-fpm # Install dependencies tambahan, misalnya ekstensi PHP RUN apt-get update apt-get install -y \ ย ย ย ย libpng-dev \ ย ย ย ย libjpeg-dev \ ย ย ย ย libfreetype6-dev \ ย ย ย ย docker-php-ext-configure gd --with-freetype --with-jpeg \ ย ย ย ย docker-php-ext-install gd # Salin file website ke dalam container COPY ./www /var/www/html # Expose port 9000 agar bisa diakses oleh Nginx EXPOSE 9000 |
3. Dockerfile MySQL
Pada MySQL, bisa langsung pakai image resmi dari Docker Hub, jadi tidak perlu membuat Dockerfile khusus. Cukup atur variabel buat password root dan database awal di fileย docker-compose.yml seperti yang sudah dijelasin sebelumnya.
Tips Optimasi Stack Web Server di Docker
Setelah stack web server berhasil dijalankan, langkah selanjutnya adalah optimasi performanya. Dengan Docker, kamu bisa memanfaatkan beberapa tips supaya stack web server lebih efisien dan responsif. Berikut beberapa cara buat meningkatkan performa server yang berjalan di Docker:
1. Pakai Docker Volumes buat Persisten Data
Saat running container, data yang ada di dalamnya bisa hilang saat container distop atau dihapus. Jadi, pastiin pakai Docker volumes agar data tetap aman dan persisten meski container restart. Misalnya, buat MySQL bisa dengan volume ini di docker-compose.yml:
|
1 2 3 4 |
mysql: ย ย image: mysql:latest ย ย volumes: ย ย ย ย - mysql_data:/var/lib/mysql |
2. Optimasi Dockerfile untuk Tingkatin Performa
Dockerfile yang terlalu besar atau berisi banyak langkah yang tidak perlu bisa memperlambat build process. Beberapa tips optimasi Dockerfile:
- Minimalkan layer Docker: Gabungkan command yang serupa menjadi satu layer untuk mengurangi ukuran image.
- Pakai multi-stage build: Buat kurangi ukuran image, pakai multi-stage build, yaitu hanya salin file yang diperlukan ke image final.
Contoh multi-stage build di Dockerfile:
|
1 2 3 4 5 6 7 8 |
# Build stage FROM node:14 AS build WORKDIR /app COPY . . RUN npm install # Production stage FROM nginx:latest COPY --from=build /app/dist /usr/share/nginx/html |
3. Set Resource Limits pada Container
Buat menghindari pemakaian resource yang berlebihan, bisa atur limit CPU dan memory buat setiap container di file docker-compose.yml. Ini bantu cegah satu container pakai semua resource dan menyebabkan server jadi lambat.
|
1 2 3 4 5 6 7 8 |
nginx: ย ย image: nginx:latest ย ย deploy: ย ย ย ย resources: ย ย ย ย ย ย limits: ย ย ย ย ย ย ย ย memory: 500M ย ย ย ย ย ย ย ย cpus: '0.5' |
-
Pakai Caching buat Tingkatin Kecepatan
Di Nginx, bisa mengaktifkan caching buat tingkatkan performa. Misalnya, caching file statis (gambar atau file JS) bisa mengurangi beban server. Tambah konfigurasi cache di file nginx.conf:
|
1 2 3 4 |
location / { ย ย try_files $uri $uri/ =404; ย ย add_header Cache-Control "public, max-age=86400"; } |
4. Pakai Network Buat Connect Antar Container
Pakai Docker Network buat connect container secara langsung. Dengan ini, container Nginx bisa langsung berkomunikasi dengan PHP dan MySQL tanpa perlu IP atau hostname yang berubah-ubah. Di file docker-compose.yml, kamu bisa menentukan network seperti ini:
|
1 2 3 |
networks: ย ย webserver: ย ย ย ย driver: bridge |
Dan memastikan container pakai network yang sama:
|
1 2 3 4 5 6 |
nginx: ย ย networks: ย ย ย ย - webserver php: ย ย networks: ย ย ย ย - webserver |
5. Pakai Docker Swarm atau Kubernetes untuk Skalabilitas
Kalau traffic web mulai meningkat, bisa mempertimbangkan buat run Docker di dalam mode Swarm atau pakai Kubernetes buat kelola beberapa instance container di berbagai server. Ini memungkinkan skalabilitas horizontal dengan mudah, yang artinya bisa menambah container sesuai kebutuhan tanpa downtime.
Kesimpulan
Dengan Docker Compose, setup stack web server seperti Nginx, PHP, dan MySQL jadi lebih terstruktur dan mudah dikelola. DomaiNesians bisa optimisasi performa server dengan beberapa langkah sederhana, contohnya memakai Docker volumes, mengatur resource limits, dan memanfaatlam caching. Selain itu, Docker kasih fleksibilitas mengelola berbagai container dalam satu tempat, sehingga pengelolaan aplikasi jadi lebih efisien.
Namun, untuk memastikan performa maksimal, kamu juga perlu pakai VPS yang cukup kuat untuk mendukung kebutuhan stack web server tersebut. Kalau belum punya VPS yang sesuai, ini saatnya memeprtimbangkan ke Cloud VPS DomaiNesia. Dengan VPS yang tepat, kamu bisa menjalankan Docker dan stack web server dengan lebih stabil dan responsif, menjadikan experience kelola server jauh lebih mudah.


