Halo, Sobat Jagoan! Sebagai alat yang mampu menyediakan lingkungan terisolasi bagi aplikasi yang berjalan di atasnya, Docker juga dapat digunakan setup web server. Ini cocok jika kamu ingin memiliki lingkungan server di mana setiap komponen berada dalam wadah masing-masing, sehingga setup lebih mudah dengan struktur yang bersih dan rapi.
Artikel kali ini akan memandu kamu untuk membangun stack web server yang terdiri dari Nginx, PHP, dan MySQL di Docker. Yuk, mulai!
Prasyarat
Sebelum memulai, pastikan kamu telah menginstal Docker dan Docker Compose di server ya, Sob
Cara Setup Stack Web dengan Docker
Berikut ini langkah-langkah mudah setup web server di Docker.
Step 1: Buat file baru dengan nama docker-compose.yml di direktori projek.
Step 2: Konfigurasi docker-compose.yml
File docker-compose.yml digunakan untuk mendefinisikan semua service yang dibutuhkan untuk membangun stack web server. Sebagai contoh, berikut isi docker-compose.yml untuk stack web yang terdiri dari Nginx, PHP, dan MySQL.
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
Step 3: Selanjutnya, buat file konfigurasi Nginx, misalnya nginx.conf dengan aturan dasar kurang lebih seperti berikut ini:
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;
}
}
Catatan: Jangan lupa ganti namadomain.com dengan nama alamat situs kamu, Sob.
Step 4: Setelah itu, jalankan perintah berikut untuk download image dan container.
docker-compose up -d
Step 5: Kemudian, periksa status dan akses web server dengan command:
docker-compose ps
Jika telah dipastikan running, kamu bisa akses di browser dengan membuka http://domain.com. Nginx akan memproses request dan menghubungkan ke PHP-FPM jika tidak ada kendala dan semunaya berjalan dengan benar.
Membuat Dockerfile Nginx, PHP, dan MySQL
Ketika setup web server menggunakan Docker Compose, kamu perlu membuat Dockerfile untuk setiap komponen. Dan di langkah ini, kamu akan dipandu membuat Dockerfile Nginx, PHP, dan MySQL.
1) Dockerfile Nginx
Dockerfile Nginx cukup menggunakan image resmi dari Docker Hub, namun kamu bisa menambahkan konfigurasi khusus, misalnya konfigurasi Nginx dan website. Berikut contohnya:
# 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
Berikut Dockerfile PHP dengan menggunakan PHP-FPM yang berjalan sebagai service terpisah.
# 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
Buat MySQL, kamu bisa langsung menggunakan image resmi dari Docker Hub lalu atur variable buat password root dan database awal di file docker-compose.yml. Jadi tidak perlu buat Dockerfile khusus.
Sekarang, kamu telah memiliki stack web server yang terstruktur dan mudah dikelola berkat Docker Compose, Sob. Dan untuk mengoptimasi performa servernya, kamu bisa melakukan langkah sederhana seperti, memakai Docker volumes, mengatur resource limits, dan memanfaatkan caching. Fyi, Docker juga memberikan fleksibilitas mengelola berbagai container dalam satu tempat, lho.
Selamat mencoba, good luck, ya! Apabila ada yang masih bingung, jangan ragu hubungi Tim Support Jagoan Hosting melalui Live Chat atau Open Ticket, Sob.
Pengantar Halo sobat Jagoan! di tutorial kali ini kita bakalan membahas permasalahan Error Undefined Index/Variable. Pasti sekarang kamu lagi main-main Read more
Tahu nggak, Sob! untuk dapat mengaktifkan layanan SSL murah, ada beberapa persyaratan yang harus disiapkan terlebih dahulu, diantaranya adalah CSR Read more
Hai, Sob kamu pasti tentu tidak ingin jika website kamu dibobol oleh hacker, terutama jika kamu seorang programmer dan webmaster. Read more
Kamu ngerasa insecure karena belum install antivirus? Install antivirus emang penting, Sob untuk menjaga performa server kamu. Nah, kamu bisa Read more