GNU/Linux >> Belajar Linux >  >> Linux

Cara Menyebarkan Aplikasi PHP dengan Nginx dan MySQL Menggunakan Docker dan Docker Compose

Docker adalah alat containerization open-source yang memungkinkan Anda membuat, menyebarkan, dan menjalankan aplikasi dengan menggunakan container. Wadah memungkinkan Anda untuk mengemas aplikasi dengan semua bagian yang diperlukan dan menyebarkannya sebagai satu paket. Wadah bersifat portabel dan Anda dapat menyebarkannya di mana saja. Sebuah wadah memberikan pengembang lingkungan kerja yang seragam dan efisien yang dapat dibagikan dengan mudah.

Dalam panduan ini, kami akan menunjukkan cara men-deploy aplikasi PHP dengan Nginx dan MySQL menggunakan Docker dan Docker Compose.

Prasyarat

  • Server Ubuntu 20.04 baru di Atlantic.Net Cloud Platform
  • Kata sandi root yang dikonfigurasi di server Anda

Langkah 1 – Buat Server Cloud Atlantic.Net

Pertama, masuk ke Server Cloud Atlantic.Net Anda. Buat server baru, pilih Ubuntu 20.04 sebagai sistem operasi dengan setidaknya 4GB RAM. Hubungkan ke Server Cloud Anda melalui SSH dan masuk menggunakan kredensial yang disorot di bagian atas halaman.

Setelah Anda masuk ke server Ubuntu 20.04 Anda, jalankan perintah berikut untuk memperbarui sistem dasar Anda dengan paket terbaru yang tersedia.

apt-get update -y

Langkah 2 – Instal Docker dan Docker Compose

Pertama, instal dependensi yang diperlukan menggunakan perintah berikut:

apt-get install apt-transport-https ca-certificates curl tree software-properties-common -y

Selanjutnya, tambahkan repositori Docker menggunakan perintah berikut:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Selanjutnya, instal Docker dan Docker Compose dengan perintah berikut:

apt-get install docker-ce docker-compose -y

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Langkah 3 – Struktur Direktori

Untuk tujuan tutorial ini, kita akan menggunakan struktur direktori berikut:

/root/docker-project/├── docker-compose.yml├── nginx│   default.conf│   Dockerfile├── php│   Dockerfile└── www html index.php

Langkah 4 – Buat Kontainer Nginx

Sebelum memulai, Anda perlu membuat dan meluncurkan wadah Nginx untuk menghosting aplikasi PHP.

Pertama, buat direktori untuk proyek Anda dengan perintah berikut:

mkdir ~/docker-project

Selanjutnya, ubah direktori ke proyek Anda dan buat file docker-compose.yml untuk meluncurkan container Nginx.

cd ~/docker-projectnano docker-compose.yml

Tambahkan baris berikut:

 nginx:image:nginx:nama_kontainer terbaru:port kontainer nginx:- 80:80 

Simpan dan tutup file setelah Anda selesai.

File di atas akan mendownload image Nginx terbaru, membuat nginx-container, dan mengeksposnya pada port 80.

Selanjutnya, luncurkan wadah Nginx dengan perintah berikut:

docker-compose up -d

Anda dapat memeriksa container yang sedang berjalan dengan perintah berikut:

docker ps

Anda akan melihat output berikut:

CONTAINER ID IMAGE COMMAND NAMA PORT STATUS DIBUAT SC6641e4d5bbf nginx:latest "/docker-entrypoint...." 5 detik yang lalu Naik 3 detik 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- wadah

Sekarang, buka browser web Anda dan akses wadah Nginx Anda menggunakan URL http://your-server-ip . Anda akan melihat halaman pengujian Nginx pada layar berikut:

Langkah 5 – Buat Wadah PHP

Pertama, buat direktori baru di dalam proyek Anda dengan perintah berikut:

mkdir -p ~/docker-project/www/html

Selanjutnya, buat file index.php untuk memverifikasi versi PHP Anda.

nano ~/docker-project/www/html/index.php

Tambahkan baris berikut:

   Halo Dunia!   

Halo Dunia!

Simpan dan tutup file, lalu buat direktori untuk Nginx di dalam direktori proyek Anda:

mkdir ~/docker-project/nginx

Selanjutnya, buat file konfigurasi default Nginx untuk menjalankan aplikasi PHP Anda:

nano ~/docker-project/nginx/default.conf

Tambahkan baris berikut:

server { dengarkan 80 default_server; root /var/www/html; indeks index.html index.php; rangkaian karakter utf-8; lokasi / { try_files $uri $uri/ /index.php?$query_string; } lokasi =/favicon.ico { access_log off; log_not_ditemukan mati; } lokasi =/robots.txt { access_log off; log_not_ditemukan mati; } access_log off; error_log /var/log/nginx/error.log kesalahan; sendfile mati; client_max_body_size 100m; lokasi ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; termasuk fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors mati; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } lokasi ~ /.ht { tolak semua; } }  

Simpan dan tutup file.

Selanjutnya, buat Dockerfile di dalam direktori nginx. Ini akan menyalin file konfigurasi default Nginx ke wadah Nginx.

nano ~/docker-project/nginx/Dockerfile

Tambahkan baris berikut:

 DARI nginx:COPY terbaru ./default.conf /etc/nginx/conf.d/default.conf 

Selanjutnya, edit file docker-compose.yml:

nano ~/docker-project/docker-compose.yml

Hapus konten lama dan tambahkan konten berikut:

---
nginx:
build: ./nginx/
container_name: nginx-container
ports:
- 80:80
links:
- php
volumes:
- ./www/html/:/var/www/html/

php:
gambar:php:7.0-fpm
nama_wadah:php-wadah
mengekspos:
– 9000
volume:
– ./www/html /:/var/www/html/

 

Simpan dan tutup file setelah Anda selesai.

File di atas akan membuat php-container baru, mengekspos PHP-FPM pada port 9000, menautkan nginx-container ke php-container, membuat volume, dan memasangnya di container sehingga semua konten akan sinkron dengan direktori container /var/www/html/.

Sekarang, luncurkan container dengan perintah berikut:

cd ~/docker-projectdocker-compose up -d

Anda dapat memverifikasi container yang sedang berjalan dengan perintah berikut:

docker ps

Anda akan melihat output berikut:

CONTAINER ID IMAGE COMMAND NAMA PORT STATUS YANG DIBUAT 82c8baf15221 docker-project_nginx "/docker-entrypoint...." 23 detik yang lalu Naik 22 detik 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- container10778c6686d8 php:7.0-fpm "docker-php-entrypoi..." 25 detik yang lalu Naik 23 detik 9000/tcp php-container

Sekarang, buka browser web Anda dan akses URL http://your-server-ip . Anda akan melihat halaman Hello World Anda:

Selanjutnya, kami akan memeriksa apakah volume terpasang kami berfungsi atau tidak. Untuk melakukannya, edit file index.php:

nano ~/docker-project/www/html/index.php

Ubah baris “Halo Dunia! Perubahan Diterapkan”:

   Halo Dunia!   

Halo Dunia! Perubahan diterapkan

Sekarang, segarkan halaman web Anda. Anda akan melihat halaman yang dimodifikasi di layar:

Langkah 6 – Buat Wadah Data

Seperti yang Anda lihat, kami telah memasang direktori www/html ke container kami, nginx-container dan php-container. Namun, ini bukan cara yang tepat. Di bagian ini, kita akan membuat wadah data terpisah untuk menampung data dan menautkannya ke semua wadah lainnya.

Untuk melakukannya, edit file docker-compose.html:

nano ~/docker-project/docker-compose.yml

Lakukan perubahan berikut:

 nginx:build:./nginx/ container_name:nginx-container ports:- 80:80 tautan:- php volumes_from:- app-data php:image:php:7.0-fpm container_name:php-container expose:- 9000 volumes_from:- app-data app-data:gambar:php:7.0-fpm container_name:app-data-container volumes:- ./www/html/:/var/www/html/ perintah:"true"

Sekarang, buat ulang dan luncurkan semua wadah menggunakan perintah berikut:

cd ~/docker-projectdocker-compose up -d

Sekarang, verifikasi semua container yang sedang berjalan dengan perintah berikut:

docker ps -a

Anda akan melihat output berikut:

CONTAINER ID IMAGE COMMAND NAMA PORT STATUS DIBUAT PORTS849315c7ffc0 docker-project_nginx "/docker-entrypoint...." 27 detik yang lalu Naik 25 detik 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- container59a0d7040fd8 php:7.0-fpm "docker-php-entrypoi..." 28 detik yang lalu Naik 27 detik 9000/tcp php-containerfbca95944234 php:7.0-fpm "docker-php-entrypoi..." 29 detik yang lalu Keluar (0) 28 detik lalu aplikasi -data-container

Langkah 7 – Buat Penampung MySQL

Di bagian ini, kita akan membuat wadah database MySQL dan menautkannya ke semua wadah lainnya.

Pertama, Anda perlu memodifikasi image PHP dan menginstal ekstensi PHP untuk MySQL agar dapat terhubung ke database MySQL.

Pertama, buat direktori untuk PHP dengan perintah berikut:

mkdir ~/docker-project/php

Selanjutnya, buat Dockerfile untuk menginstal ekstensi PHP:

nano ~/docker-project/php/Dockerfile

Tambahkan baris berikut:

 DARI php:7.0-fpm RUN docker-php-ext-install pdo_mysql 

Simpan dan tutup file. Kemudian, edit file docker-compose.yml untuk membuat wadah MySQL dan wadah data MySQL untuk menampung database dan tabel:

nano ~/docker-project/docker-compose.yml

Lakukan perubahan berikut:

 nginx:build:./nginx/ container_name:nginx-container ports:- 80:80 tautan:- php volumes_from:- app-data php:build:./php/ container_name:php-container expose:- 9000 tautan :- mysql volumes_from:- app-data app-data:image:php:7.0-fpm container_name:app-data-container volumes:- ./www/html/:/var/www/html/ perintah:"true" mysql :gambar:mysql:5.7 container_name:mysql-container volumes_from:- lingkungan mysql-data:MYSQL_ROOT_PASSWORD:rahasia MYSQL_DATABASE:mydb MYSQL_USER:myuser MYSQL_PASSWORD:kata sandi mysql-data:gambar:mysql:5.7 container_name:mysql-data-volume container /var/lib/mysql perintah:"benar" 

Simpan dan tutup file.

Selanjutnya, edit index.php file dan buat beberapa perubahan untuk menguji koneksi database.

nano ~/docker-project/www/html/index.php

Lakukan perubahan berikut:

   Halo Dunia!   

Halo Dunia!

query("SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_TYPE='BASE TABLE'"); $tabel =$query->fetchAll(PDO::FETCH_COLUMN); if (empty($tables)) { echo "

Tidak ada tabel dalam database \"{$database}\".

"; } else { echo "

Database \"{$database}\" memiliki tabel berikut:

"; echo "
    "; foreach ($tabel sebagai $tabel) { echo "
  • {$tabel}
  • "; } echo "
"; } ?>

Simpan dan tutup file, lalu luncurkan container dengan perintah berikut:

cd ~/docker-projectdocker-compose up -d

Verifikasi semua container yang sedang berjalan dengan perintah berikut:

docker ps -a

Anda akan melihat output berikut:

PERINTAH GAMBAR ID PENAMPUNG NAMA PORT STATUS DIBUAT NAMASd3e82747fe0d mysql:5.7 "docker-entrypoint.s..." 39 detik yang lalu Naik 38 detik 3306/tcp, 33060/tcp mysql-container606320e5a7f8 mysql:5.7 "docker-entrypoint.s..." 41 detik yang lalu Keluar (0) 39 detik yang lalu mysql-data-containerca4f63797d11 docker-project_php "docker-php-entrypoi..." 2 jam yang lalu Naik 2 jam 9000/tcp php-container849315c7ffc0 docker-project_nginx "/docker-entrypoint...." 2 jam lalu Naik 2 jam 0.0.0.0:80->80/tcp, :::80->80/tcp nginx-containerfbca95944234 php:7.0-fpm "docker-php-entrypoi..." 2 jam yang lalu Keluar (0) 39 detik yang lalu app-data-container

Langkah 8 – Verifikasi Koneksi Database

Sekarang, buka browser web Anda dan akses halaman web di http://your-server-ip . Anda akan melihat layar berikut:

Seperti yang Anda lihat, tidak ada tabel di database mydb.

Namun, sebenarnya ada beberapa tabel, tetapi tidak terlihat oleh pengguna biasa. Jika Anda ingin melihatnya, edit file index.php dan ubah $user ke “root” dan $sandi untuk “rahasia”

nano ~/docker-project/www/html/index.php

Ubah baris berikut:

 $pengguna ="akar"; $sandi ="rahasia"; 

Simpan dan tutup file kemudian segarkan halaman. Anda akan melihat database dengan semua tabel pada layar berikut:

Kesimpulan

Dalam panduan di atas, Anda telah mempelajari cara menerapkan aplikasi PHP dengan Nginx dan MySQL menggunakan Docker dan Docker Compose. Anda sekarang harus dapat meng-host aplikasi PHP di lingkungan produksi dengan Docker; coba di akun hosting VPS Anda dari Atlantic.Net.


Linux
  1. Cara menyebarkan Aplikasi Node.js dengan pm2 dan Nginx di Ubuntu

  2. Cara Menyebarkan Layanan Mikro dengan Docker

  3. Cara Menyebarkan Wadah nginx dengan Docker di Linode

  1. Cara Menyebarkan dan Mengelola MongoDB dengan Docker

  2. Cara Menyebarkan Aplikasi React ke Produksi Menggunakan Docker dan NGINX dengan Proksi API

  3. Cara Deploy Aplikasi Flask dengan Nginx dan Gunicorn di Ubuntu 20.04

  1. Cara Menginstal Nextcloud dengan Nginx dan PHP 7.3 di CentOS 8

  2. Cara Instal Nginx Dengan PHP Dan MySQL (LEMP Stack) Di CentOS 7

  3. Dockerizing Laravel dengan Nginx MySQL dan Docker Compose di Ubuntu 18.04 LTS