Ngoding jadi pusing karena lupa.

Breaking

Tuesday, January 16

Laravel Dan PostgreSql di Docker

    Kali ini saya sedang mencoba mempelajari PHP framework yang masih sering mendapatkan update yaitu framework Laravel. Framework ini dibangun dengan bahasa pemrograman PHP. Saat ini Laravel sudah mencapai versi 10.x.

    Untuk melakukan ujicoba, dan mebiasakan diri dengan framework ini, cara yang terfikir adalah dengan mencobanya dan terus mencoba hingga akhirnya bisa terbiasa dengan framework ini. Supaya saya bisa melakukan hal tersebut, saya membutuhkan server php, composer dan juga postgresql sebagai databasenya.

    Untuk server PHP nya, saya akan menggunakan Nginx.Karena Nginx tidak bisa mengexekusi script PHP, sehingga kita perlu menambahkan PHP FPM (FastCGI Process Management) sebagai eksekutor script PHP nya, sedangkan Nginx sebagai penerima request dari client ke PHP FPM, dan pemberi response hasil eksekusi dari PHP FPM ke client.

    Selain itu, saya juga memerlukan composer. Composer ini sangat mempermudah dalam melakukan installasi library atau dependency yang nantinya diperlukan ketika sedang melakukan ujicoba ataupun saat sedang mendevelop aplikasi menggunakan Laravel.

    Untuk kebutuhan - kebutuhan tersebut, akan saya letakkan di dalam docker. Hal ini seperti pada alasan yang sudah saya sebutkan di catatan saya sebelumnya Kenapa Docker ?

Apa saja yang akan kita lakukan ?

0. Persiapan
1. Membuat Dockerfile
2. Membuat docker-compose.yml
3. Membuat config untuk Nginx
4. Membuat Container
5. Membuat project Laravel baru
6. Menghubungkan Laravel dengan database Postgresql
7. Melakukan Pengecekan, apakah database sudah terhubung, dan data bisa tampil.

0. Persiapan

    Buatlah sebuah folder (Terserah dimanapun, asal jangan didalam recyclerbin). disini saya membuat folder dengan nama laravel-environment

    Didalam folder laravel-environment, saya membuat folder "database","docker-config","project"

1. Membuat Dockerfile (laravel-environment/Dockerfile)

    Menurut pemahaman saya, setiap kita ingin membuat container pada docker, kita perlu menentukan sumber imagenya darimana. Sudah banyak image yang dibuat oleh orang lain, dan kita hanya perlu membuat container dengan menggunakan image tersebut. Namun dalam keadaan sehari-hari yang kita hadapi, seringkali apa yang sudah disediakan berbeda dengan apa yang kita butuhkan. Itulah kenapa terkadang kita perlu membuat image itu sendiri supaya sesuai dengan apa yang kita butuhkan. 

    Dockerfile adalah dokumen teks yang berisi perintah untuk membangun sebuah image. Didalam file Dockerfile kita bisa memberikan perintah-perintah supaya image yang terbentuk nantinya akan menjadi image yang sesuai dengan kebutuhan.

    Sebelumnya sudah disebutkan, bahwa kita butuh PHP FPM untuk menjalankan script PHP, dan juga saya membutuhkan composer untuk membantu proses install library atau dependensi nantinya. Maka dari itu, saya akan membuat Dockerfile yang nantinya akan membentuk image dengan kombinasi (PHP FPM dan composer)

Berikut bentuk filenya :

2. Membuat docker-compose.yml (laravel-environment/docker-compose.yml)

    Image yang spesifik dengan kebutuhan saya, sudah saya persiapkan didalam Dockerfile sebelumnya. Sedangkan sisanya, seperti Nginx dan postgreSql tidak ada kebutuhan yang spesial. Jadi untuk image sisanya, saya akan menggunakan image yang sudah ada atau sudah disediakan.

    Tahap selanjutnya hanya perlu mengkombinasikan image - image menjadi container. Untuk membuat hal tersebut, saya membuatnya seperti berikut :

3. Membuat config untuk Nginx (laravel-environment/docker-config/default.conf)

    Sudah dijelaskan sebelumnya, bahwa Nginx tidak akan bisa menjalankan script PHP, sehingga kita perlu mengarahkan Nginx supaya menuju ke PHP FPM.

Berikut file config yang saya buat :

4. Membuat Container

    Semua persiapan untuk membuat container sudah selesai. Saatnya kita eksekusi untuk membuat containernya.

    Klik kanan folder laravel-environment, lalu pilih buka terminal (Setiap OS beda-beda). Setelah terminal terbuka, jalankan perintah berikut :

docker compose up -d

    Setelah selesai, jika kita buka Docker desktop, maka akan muncul container-container yang sudah diatur sebelumnya, yaitu postgresql, nginx dan php fpm.


5. Membuat project Laravel baru

    Pada saat saya membuat Dockerfile, di dalamnya saya juga sekaligus menambahkan perintah untuk melakukan install composer. Sehingga composer akan ada di dalam container yang dibangun dengan image dari Dockerfile tersebut. Pada kasus kali ini, composer terdapat pada container fpm-laravel-environment. Jadi jika ingin mengexekusi perintah composer yang ada di dalam container, bisa menggunakan perintah berikut :

docker exec -it fpm-laravel-environment composer create-project laravel/laravel /var/www/

Setelah prosesnya selesai, maka folder laravel-environment/project akan berisi project laravel. Sekarang coba akses localhost dari browser, seharusnya sudah bisa menampilkan halaman defaultnya Laravel.

6. Menghubungkan Laravel dengan database Postgresql

Untuk menghubungkan project laravel dengan database postgresql yang sudah saya buat, saya perlu merubah file .env yang ada di dalam folder laravel-environment/project menjadi seperti ini :


7. Melakukan Pengecekan, apakah database sudah terhubung, dan data bisa tampil.

    Setelah sudah selesai melakukan configurasi supaya Laravel bisa terhubung dengan database postgresql. Kita bisa melakukan perintah untuk membuat tabel migrasi. Ini nanti berguna dalam keperluan migrasi tabel dan lain - lain. Berikut perintahnya :

docker exec -it fpm-laravel-environment php /var/www/artisan migrate:install

Jika koneksi ke database sudah benar, seharusnya perintah sebelumnya tidak akan memunculkan pesan error. 

Selanjutnya saya akan membuat data seeder atau data dummy menggunakan perintah bawaan dari artisan. Namun sebelum menjalankan perintah pembuatan seedernya, saya perlu mengubah sedikit code yang ada pada laravel-environment/project/database/seeders/DatabaseSeeder.php menjadi seperti berikut :


Code tersebut digunakan untuk menjalankan perintah, membuat data seeder sebanyak 10 data. Berikut perintah yang perlu di jalankan untuk membuat seeder 

docker exec -it fpm-laravel-environment php /var/www/artisan migrate --seed 

 Sejauh ini sudah berjalan tanpa muncul kendala, saatnya saya butuh pembuktian bahwa data yang ada pada database bisa ditampilkan menggunakan laravel. Tapi saya perlu merubah beberapa code untuk menampilkan data yang sudah ada.

Pertama, ubah dulu laravel-environment/routes/web.php menjadi seperti berikut


Selanjutnya, ubah file laravel-environment/resources/views/welcome.blade.php. Tambahkan 

{{dd($data)}}

Pada posisi paling atas, sehingga terlihat seperti berikut :


 Lalu test akses localhost dari browser. Niscaya akan menampilkan tampilan seperti berikut :


Umh, Nais. Datanya sudah muncul, artinya sekarang environment laravel, postgresql sudah bisa digunakan. 

Oh iya, kalau ada yang ingin clone reponya, bisa clone dari sini ya : Laravel Environment

No comments:

Post a Comment