Dulu, memasang WordPress berarti harus install Apache, PHP, dan MySQL satu per satu. Sekarang, Docker membuat semua itu lebih sederhana. Docker adalah container yang membawa aplikasi beserta semua yang dibutuhkannya, sehingga bisa berjalan di komputer mana pun tanpa masalah versi atau konfigurasi.
WordPress di Docker biasanya menggunakan Apache, tapi di setup ini kita menggunakan Nginx karena lebih ringan, lebih cepat, dan fleksibel untuk konfigurasi modern seperti reverse proxy, HTTPS, dan caching. Dengan Docker Compose, WordPress, MySQL, dan Nginx bisa dijalankan bersamaan dengan rapi, stabil, dan mudah dipindahkan ke komputer lain.
Docker sendiri punya banyak kelebihan, mulai dari instalasi yang otomatis, lingkungan pengembangan yang sama persis dengan produksi, hingga kemampuan mereplikasi aplikasi tanpa risiko konflik konfigurasi. Nanti akan ada artikel khusus yang membahas lebih detail keunggulan Docker dibanding setup tradisional, sehingga konsep ini bisa dipahami lebih lengkap.
Artikel ini akan fokus pada bagaimana menjalankan WordPress di Docker dengan Nginx, supaya website bisa berjalan stabil, efisien, dan mudah dikelola.
Menyiapkan Struktur Docker Compose
Untuk menjalankan WordPress di Docker dengan Nginx, kita perlu tiga komponen utama: WordPress (PHP-FPM), MySQL, dan Nginx sebagai web server. Semua dijalankan bersamaan menggunakan Docker Compose, sehingga lebih rapi dan mudah dikelola. Berikut ini struktur folder yang direkomendasikan
devsetneg/
│
├─ docker-compose.yml
├─ nginx/
│ ├─ conf.d/
│ │ └─ default.conf
│ └─ snippets/
│ └─ fastcgi-php.conf
Docker Compose
File docker-compose.yml akan mengatur semua service sekaligus. Buat docker-compose.yml dengan konfigurasi minimal sebagai berikut
services:
db:
image: mysql:8.0
container_name: wp-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
volumes:
- db_data:/var/lib/mysql
networks:
- wp-network
wordpress:
image: wordpress:php8.2-fpm
container_name: wp-app
depends_on:
- db
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
networks:
- wp-network
nginx:
image: nginx:latest
container_name: wp-nginx
depends_on:
- wordpress
restart: always
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/snippets:/etc/nginx/snippets
- wp_data:/var/www/html
networks:
- wp-network
volumes:
db_data:
wp_data:
networks:
wp-network:
driver: bridge
Snnipet NGINX
Buat snippet pada nginx/snippets/fastcgi-php.conf dengan konfigurasi sebagai berikut
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param REDIRECT_STATUS 200;
NGINX Config
Buat file pada nginx/conf.d/default.conf dengan konfigurasi sebagai berikut
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include /etc/nginx/snippets/fastcgi-php.conf;
fastcgi_pass wp-app:9000;
}
}
Menjalankan Docker
Jika sudah, jalankan docker dengan pernitah berikut
docker-compose up -d
atau jika menggunakan Mac (dibeberapa versi docker-compose digantikan dengan docker compose), gunakan perintah berikut
docker compose up -d
Tunggu docker berjalan, pada proses ini, docker akan mengunduh file image yang dibutuhkan, untuk memastikan docker sudah berjalan, dapat gunakan perintah :
docker ps
Jika docker berjalan, maka akan ada docker bernama db, wordpress, dan nginx, anda dapat mengakses URL localhost pada browser, dan lakukan setup wordpress seperti biasa.
PS :
Untuk mematikan service docker dapat gunakan perintah
docker compose down