5 min read

Cara Install Wordpress Dengan Docker

Iman Sugirman

Introduction

WordPress adalah Content Management System (CMS) gratis dan open-source yang dibangun di atas basis data MySQL dengan pemrosesan PHP. Berkat arsitektur plugin yang diperluas dan sistem templating, dan fakta bahwa sebagian besar administrasinya dapat dilakukan melalui antarmuka web, WordPress adalah pilihan populer ketika membuat berbagai jenis situs web, dari blog ke halaman produk ke situs eCommerce.

Menjalankan WordPress biasanya melibatkan pemasangan LAMP (Linux, Apache, MySQL, dan PHP) atau LEMP (Linux, Nginx, MySQL, dan PHP), yang dapat menghabiskan waktu. Namun, dengan menggunakan alat seperti Docker dan Docker Compose, Anda dapat menyederhanakan proses pengaturan tumpukan pilihan Anda dan menginstal WordPress. Alih-alih menginstal masing-masing komponen dengan tangan, Anda dapat menggunakan gambar, yang menstandarkan hal-hal seperti perpustakaan, file konfigurasi, dan variabel lingkungan, dan menjalankan gambar ini dalam wadah, proses terisolasi yang berjalan pada sistem operasi bersama. Selain itu, dengan menggunakan Compose, Anda dapat mengoordinasikan beberapa wadah - misalnya, aplikasi dan basis data - untuk saling berkomunikasi.

Dalam tutorial ini, Anda akan membangun instalasi WordPress multi-kontainer. Wadah Anda akan mencakup basis data MySQL, server web Nginx, dan WordPress itu sendiri. Anda juga akan mengamankan instalasi Anda dengan memperoleh sertifikat TLS / SSL dengan Let's Encrypt untuk domain yang ingin Anda kaitkan dengan situs Anda. Terakhir, Anda akan mengatur tugas cron untuk memperbarui sertifikat Anda sehingga domain Anda tetap aman.

Prerequisites

Untuk mengikuti tutorial ini, Anda perlu:

  • Server yang menjalankan Ubuntu 18.04, bersama dengan pengguna non-root dengan hak akses sudo dan firewall aktif. Untuk panduan tentang cara mengatur ini, silakan lihat panduan Pengaturan Server Awal ini.
  • Docker diinstal di server Anda, mengikuti Langkah 1 dan 2 dari Cara Memasang dan Menggunakan Docker di Ubuntu 18.04.
  • Docker Compose diinstal di server Anda, mengikuti Langkah 1 dari Cara Memasang Docker Compose di Ubuntu 18.04.
  • Nama domain terdaftar. Tutorial ini akan menggunakan example.com secara keseluruhan. Anda bisa mendapatkannya secara gratis di Freenom, atau menggunakan pendaftar domain pilihan Anda.
  • Kedua catatan DNS berikut ini diatur untuk server Anda. Anda dapat mengikuti pengantar ini untuk DigitalOcean DNS untuk detail tentang cara menambahkannya ke akun DigitalOcean, jika itu yang Anda gunakan:

Catatan A dengan example.com yang menunjuk ke alamat IP publik server Anda. Catatan A dengan www.example.com yang menunjuk ke alamat IP publik server Anda.

Step 1 — Defining the Web Server Configuration

Sebelum menjalankan wadah apa pun, langkah pertama kami adalah menentukan konfigurasi untuk server web Nginx kami. File konfigurasi kami akan menyertakan beberapa blok lokasi khusus WordPress, bersama dengan blok lokasi untuk mengarahkan Mari Enkripsi permintaan verifikasi ke klien Certbot untuk pembaruan sertifikat otomatis.

Pertama, buat direktori proyek untuk pengaturan WordPress Anda yang disebut wordpress dan arahkan ke sana:

mkdir wordpress && cd wordpress

Selanjutnya, buat direktori untuk file konfigurasi:

mkdir nginx-conf

Buka file dengan nano atau editor favorit Anda:

Dalam file ini, kami akan menambahkan blok server dengan arahan untuk nama server dan root dokumen kami, dan blok lokasi untuk mengarahkan permintaan klien Certbot untuk sertifikat, pemrosesan PHP, dan permintaan aset statis.

Rekatkan kode berikut ke dalam file. Pastikan untuk mengganti example.com dengan nama domain Anda sendiri:

server {
        listen 80;
        listen [::]:80;

        server_name example.com www.example.com;

        index index.php index.html index.htm;

        root /var/www/html;

        location ~ /.well-known/acme-challenge {
                allow all;
                root /var/www/html;
        }

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass wordpress:9000;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        }

        location ~ /\.ht {
                deny all;
        }

        location = /favicon.ico {
                log_not_found off; access_log off;
        }
        location = /robots.txt {
                log_not_found off; access_log off; allow all;
        }
        location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
                expires max;
                log_not_found off;
        }
}

Blok server kami mencakup informasi berikut:

Arahan:

listen : Ini memberitahu Nginx untuk mendengarkan pada port 80, yang memungkinkan kita untuk menggunakan plugin webroot Certbot untuk permintaan sertifikat kami. Perhatikan bahwa kami belum memasukkan port 443 - kami akan memperbarui konfigurasi untuk menyertakan SSL setelah kami berhasil memperoleh sertifikat kami.

server_name: Ini menentukan nama server Anda dan blok server yang harus digunakan untuk permintaan ke server Anda. Pastikan untuk mengganti example.com di baris ini dengan nama domain Anda sendiri.

indeks: Arahan indeks menentukan file yang akan digunakan sebagai indeks saat memproses permintaan ke server Anda. Kami telah memodifikasi urutan prioritas default di sini, memindahkan index.php di depan index.html sehingga Nginx memprioritaskan file yang disebut index.php bila memungkinkan.

root: Arahan root kami menamai direktori root untuk permintaan ke server kami. Direktori ini, /var/www/html, dibuat sebagai titik mount pada saat membangun dengan instruksi di WordPress Dockerfile kami. Instruksi Dockerfile ini juga memastikan bahwa file dari rilis WordPress sudah di-mount ke volume ini.

Location Blocks:

location ~/.well-known/acme-challenge

Blok lokasi ini akan menangani permintaan ke direktori .well-known, di mana Certbot akan menempatkan file sementara untuk memvalidasi bahwa DNS untuk domain kami diputuskan ke server kami. Dengan konfigurasi ini, kami dapat menggunakan plugin webroot Certbot untuk mendapatkan sertifikat untuk domain kami.

location /

Di blok lokasi ini, kami akan menggunakan arahan try_files untuk memeriksa file yang cocok dengan permintaan URI individu. Alih-alih mengembalikan status 404 Tidak Ditemukan sebagai default, kami akan memberikan kontrol ke file index.php WordPress dengan argumen permintaan.

location ~.php$

Blok lokasi ini akan menangani pemrosesan PHP dan proksi permintaan ini ke wadah wordpress kami. Karena gambar WordPress Docker kami akan didasarkan pada gambar php: fpm, kami juga akan menyertakan opsi konfigurasi yang khusus untuk protokol FastCGI di blok ini. Nginx membutuhkan prosesor PHP independen untuk permintaan PHP: dalam kasus kami, permintaan ini akan ditangani oleh prosesor php-fpm yang disertakan dengan php: fpm image. Selain itu, blok lokasi ini mencakup arahan khusus FastCGI, variabel, dan opsi yang akan mem-proksi permintaan ke aplikasi WordPress yang berjalan di wadah wordpress kami, menetapkan indeks yang disukai untuk URI permintaan yang diuraikan, dan mengurai permintaan URI.

location ~ /\.ht

Blok ini akan menangani file .htaccess karena Nginx tidak akan melayani mereka. Arahan deny_all memastikan bahwa file .htaccess tidak akan pernah disajikan kepada pengguna.

location = /favicon.ico, location = /robots.txt: Blok-blok ini memastikan bahwa permintaan ke /favicon.ico dan /robots.txt tidak akan dicatat. location ~ * . (css | gif | ico | jpeg | jpg | js | png) $: Blok ini mematikan pencatatan untuk permintaan aset statis dan memastikan bahwa aset ini sangat dapat di-cache, karena biasanya mahal untuk disajikan.