Install nginx dan php-fpm 7.3 di alpine docker image.
Di alpine, jika kita ingin menginstall php-fpm dengan versi tertentu, kita harus lihat juga versi alpine yang digunakan. Sebagai contoh jika kita ingin menginstall php-fpm versi 7.3, maka kita harus menggunakan alpine versi 3.12. Referensinya bisa dilihat pada repository alpine disini http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/
Jika kita cari php-fpm pada repository tersebut maka php-fpm yang tersedia adalah versi 7.3.
Ditutorial kali ini kita akan mencoba menginstall php-fpm versi 7.3 dan nginx pada alpine docker image.
Daftar isi:
- Mendownload alpine docker image dan membuat container
- Install Nginx
- Install Php-fpm versi 7.3
- Menghubungkan antara nginx dengan Php-fpm 7.3
- Build menjadi image baru
- Test image baru
Mendownload alpine docker image dan membuat container
Pastikan docker sudah terinstall pada lokal komputer.
Mendownload alpine docker image
jalankan perintah berikut untuk mendownload alpine dari repository docker:
docker pull alpine:3.12
setelah terdownload maka akan ada image baru di lokal komputer dengan nama alpine dan tag 3.12. Kita bisa cek dengan perintah berikut
docker images alpine:3.12
Membuat container
Selanjutnya membuat container dari image alpine:3.12 yang tadi sudah kita download. Kita akan coba mengekspos port pada container tersebut agar bisa diakses dari browser. Jalankan perintah berikut:
docker run -it --name mycontainer -p 92:80 alpine:3.12 sh
Keterangan:
- docker run = membuat container baru dari image alpine:3.12.
- -it = mode interaktif dan tty. Kita akan masuk ke terminalnya container dan bisa melakukan input (STDIN).
- –name mycontainer = nama container yang dibuat.
- -p 92:80 = mengekspos port 92 agar bisa diakses dari browser. Setelah port 92 diakses akan diteruskan ke port yang ada didalam container yaitu port 80 / http yang akan digunakan oleh nginx nanti.
- apline:3.12 = image yang digunakan pada saat membuat container.
- sh = sh artinya shell. Setelah container terbuat, maka akan menjalankan perintah sh. Dengan sh kita bisa melakukan operasi seperti
ls
,pwd
,mkdir
,rm
, dll
Jika kita buka lewat browser dengan memasukkan port 92
http://localhost:92
Maka akan tampil error
This site can’t be reached
Error tersebut muncul karena kita belum menginstall nginx. Selanjutnya kita akan menginstall nginx.
Install Nginx
Jalankan perintah berikut untuk menginstall nginx di alpine docker image:
apk add nginx
Setelah itu akan mendownload nginx dari repository
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
(1/2) Installing pcre (8.44-r0)
(2/2) Installing nginx (1.18.0-r3)
Executing nginx-1.18.0-r3.pre-install
Executing busybox-1.31.1-r22.trigger
OK: 7 MiB in 16 packages
Jalankan dengan perintah berikut untuk menyalakan web server nginx
cd /run/
mkdir nginx
cd nginx
touch nginx.pid
nginx
Dan buka lagi di browser dengan url
http://localhost:92
Sekarang nginx sudah bisa diakses walaupun tampilannya 404 Not Found. Itu karena kita belum set pengaturan di default.conf nginx. Untuk sementara biarkan tampilannya seperti ini dulu.
Install Php-fpm versi 7.3
Jalankan perintah berikut untuk menginstall php-fpm versi 7.3
apk add php-fpm
Setelah itu akan mendownload php-fpm versi 7.3
(1/9) Installing php7-common (7.3.33-r0)
(2/9) Installing argon2-libs (20190702-r1)
(3/9) Installing ncurses-terminfo-base (6.2_p20200523-r1)
(4/9) Installing ncurses-libs (6.2_p20200523-r1)
(5/9) Installing libedit (20191231.3.1-r0)
(6/9) Installing pcre2 (10.35-r0)
(7/9) Installing xz-libs (5.2.5-r1)
(8/9) Installing libxml2 (2.9.14-r0)
(9/9) Installing php7-fpm (7.3.33-r0)
Executing busybox-1.31.1-r22.trigger
OK: 15 MiB in 25 packages
Setelah terdownload kita bisa cek detail versinya
php-fpm7 -v
Untuk melihat module apa saja yang sudah terinstall kita bisa cek dengan
php-fpm7 -m
Jika ingin menginstall module lainnya, contoh zip dan xml kita bisa install dengan
apk add php7-zip php7-xml
Untuk menghidupkan php-fpm menggunakan perintah berikut
php-fpm7
Untuk mengecek apakah php-fpm7 sudah running dengan
ps aux
Menghubungkan antara nginx dengan Php-fpm 7.3
Nginx dan php-fpm sudah terinstall, selanjutnya menghubungkan nginx dengan php-fpm 7.3.
Buka konfigurasi default.conf pada nginx
vi /etc/nginx/conf.d/default.conf
Ganti isinya dengan konfigurasi berikut
server {
listen 80 default_server;
listen [::]:80 default_server;
location ~ \.php$ {
root /var/www/localhost/htdocs;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# You may need this to prevent return 404 recursion.
location = /404.html {
internal;
}
}
Secara default, area kerja nginx ada di /var/www/localhost/htdocs
maka diatas kita set rootnya ke folder htdocs. Lalu cara menghubungkan nginx dengan php-fpm adalah melalui socket. Pada script diatas kita panggil php-fpm menggunakan fastcgi ke IP lokal (127.0.0.1) dengan port 9000.
Setelah konfigurasi diatas kita save, lalu reload nginx dengan perintah
nginx -s reload
Buka kembali url
http://localhost:92
Maka akan tampil halaman baru Welcome to nginx!
Kita akan tambahkan file phpinfo.php untuk mengetest file php apakah berfungsi dengan baik
cd /var/www/localhost/htdocs
echo "<?php echo phpinfo(); ?>" > phpinfo.php
Buka phpinfo.php melalui browser
http://localhost:92/phpinfo.php
Jika tampilannya seperti dibawah, maka php berfungsi dengan baik
Build menjadi image baru
Untuk menkonversi container yang tadi kita buat menjadi image baru, kita bisa lakukan dengan perintah docker commit
. Buka terminal baru (new tab) dan jalankan perintah berikut
docker commit --change='CMD php-fpm7 -D && nginx -g "daemon off;"' mycontainer my_new_image:1.0
Pada perintah diatas kita akan menjalankan nginx dan php-fpm7 bersamaan dalam 1 container.
mycontainer merupakan nama container yang tadi kita buat, sedangkan my_new_image:1.0 adalah nama image baru.
Setelah commit diatas dijalankan, harusnya akan ada image baru my_new_image:1.0. Kita bisa mengeceknya dengan
docker images my_new_image:1.0
Test image baru
Kita test apakah image baru tersebut berfungsi dengan baik atau tidak. Kita akan buat container baru lagi dari image baru tersebut.
docker run -itd --name mycontainer2 -p 502:80 my_new_image:1.0
Lalu buka browser dengan url
http://localhost:502
Jika berhasil tampilannya akan Welcome to nginx!
Demikianlah tutorial Install nginx dan php-fpm 7.3 di alpine docker image.