Ngoding jadi pusing karena lupa.

Breaking

Tuesday, January 16

January 16, 2024

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

Sunday, January 7

January 07, 2024

Docker : Kenapa dan Bagaimana ?

    Programmer selalu harus siap dengan environment atau ketersediaan aplikasi pendukung dalam mengerjakan suatu project. Seperti misalnya programmer Backend PHP, beliau harus sudah menginstall aplikasi pendukung supaya bisa melakukan pengkodingan di komputernya. Namun seringkali proses develop nya lancar, tetapi ketika melakukan deploy atau perilisan aplikasi yang sudah susah payah dibangun, menghadapi masalah. Masalah sederhana yang sering kali muncul adalah perbedaannya environment yang ada di komputer sang programmer dengan environment yang ada pada server hosting atau server tempat melakukan deploy. Semakin banyak perbedaan environment sang programmer dengan environment server, maka semakin banyak juga yang harus diperhatikan lagi. Karena hal itu bisa saja membuat kodingan yang sebelumnya sudah dibuat perlu banyak perubahan untuk menyesuaikan dengan environment yang ada pada server. Selain itu, masalah serupa akan terjadi lagi jika ternyata pengerjaan dari project tersebut ingin didelegasikan atau diserahkan ke programmer lain.


    Daripada harus mengulang - ulang hal merepotkan yang sama, kenapa tidak kita buat saja sebuah file yang berisi konfigurasi tentang kebutuhan environment dalam membangun project tersebut. Konfigurasi bisa dibuat supaya menghasilkan environment yang sama dengan kondisi yang ada pada server. Selain itu, jika kita ingin mendelegasikan project tersebut kepada programmer lain, maka programmer lain itu hanya perlu implementasikan saja konfigurasi yang sudah dibuat dan dia akan secara otomatis memiliki environment yang sama dengan yang sudah di tuliskan di dalam konfigurasi tersebut. Dengan begitu maka masalah tentang perbedaan environment tidak akan terjadi. Proses deploy tidak perlu khawatir, karena kita memiliki environment yang sama dengan yang ada pada server. Proses delegasi project tidak perlu khawatir, karena programmer lainnya juga akan mendapatkan environment yang sama.


    Docker adalah platform perangkat lunak yang memungkinkan pengembang untuk mengemas, mendistribusikan, dan menjalankan aplikasi dalam lingkungan kontainer. Kontainer adalah unit standar perangkat lunak yang mencakup kode dan semua dependensinya, memastikan aplikasi dapat berjalan dengan konsisten di berbagai lingkungan. Docker memungkinkan pengembang untuk mengisolasi aplikasi mereka dari infrastruktur yang mendasarinya, membuatnya mudah dipindahkan antar lingkungan pengembangan, pengujian, dan produksi.


    Sesuai dengan penjelasan tentang Docker diatas, kita bisa memanfaatkan Docker ini sebagai tools untuk menyelesaikan masalah yang sudah disebutkan sebelumnya.