Project Environment
Versi PHP
Disini kami menggunakan Laravel versi 11. Oleh karena itu kami menggunakan versi PHP diatas 8.2
. Setelah voting pada 16 Maret 2023, diputuskan untuk menggunakan PHP versi 8.2
untuk semua project.
Alat yang Dibutuhkan
MariaDB (Database SQL)
Merupakan service tempat penyimpanan database utama.
- Semua service memiliki database SQL sendiri.
- Semua service individual dan shared environment memiliki GUI berbasis Web yang menggunakan PhpMyAdmin.
- Apabila anda ingin menggunakan aplikasi external yang diinstal di OS anda, kami menyarankan aplikasi berikut:
- DBeaver merupakan aplikasi gratis. (Download disini)
- Datagrip merupakan aplikasi berbayar yang dikembangkan oleh JetBrains. Cukup bahkan sangat worth 😄 (Download disini)
MongoDB (Database NoSQL)
TIP
Apabila anda bekerja dengan GWA, maka anda perlu setidaknya PHP extension MongoDB. Anda bisa tidak menginstall MongoDB, namun extensi ini tetap diperlukan.
- Apabila anda menggunakan UNIX-like OS (Linux/MacOS), anda tinggal menjalankan perintah PECL. Silahkan ikuti panduan di https://www.mongodb.com/docs/drivers/php-drivers/#installation.
- Apabila anda di Windows, baik menggunakan XAMPP maupun install PHP secara langsung. Anda tidak bisa menggunkan PECL. Yang perlu anda lakukan adalah mengunduh manual dari https://github.com/mongodb/mongo-php-driver/releases, pilih sesuai jenis dan versi PHP yang ada di perangkat anda, lalu ambil file
php_mongodb.dll
dan salin ke folderext
di folder instalasi PHP anda.
Merupakan service tempat penyimpanan data sekunder, hanya data yang masif dan tidak terlalu berguna yang disimpan disini.
- Hanya service Front-End/Gateway yang memiliki database MongoDB.
- Ada 2 jenis GUI untuk mengakses MongoDB:
- GUI berbasis Web menggunakan MongoDB-Express. Kami sediakan di Docker shared environment. Sayangnya, konfigurasi database MongoDB yang dituju itu diatur oleh file konfigurasi/bukan melalui UI, sehingga setiap service membutuhkan MongoDB-Express sendiri-sendiri.
- GUI berbasis Aplikasi menggunakan MongoDBCompass (Download disini). Perlu anda install di OS anda. Disini anda bisa memilih mau membuka MongoDB server yang mana sehingga 1 aplikasi bisa mengakses banyak MongoDB server.
Redis (Cache Database)
Merupakan service tempat penyimpanan data yang digunakan sebagai cache. Yang disimpan disini adalah data perhitungan, data pengolahan, atau data lain yang tujuannya mempercepat request karena server tidak perlu query/menghitung ulang untuk mendapatkan data yang sama.
- Semua service memiliki masing-masing Redis Database.
- Ada 2 jenis GUI untuk mengakses Redis, keduanya merupakan Redisinsight dan bisa digunakan untuk mengakses banyak Redis Server karena pemilihan server dilakukan di Front-End. Berikut adalah opsinya:
- Redisinsight Web interface kami sediakan di Docker shared environment.
- Redisinsight Aplikasi yang anda perlu install sendiri di OS anda. (Download disini)
Sekilas Info Redisinsight
Redisinsight adalah GUI untuk Redis, seperti PhpMyAdmin untuk Mariadb dan MongoDB Express untuk MongoDB. Bedanya, server Redis yang bisa ditampilkan di Redisinsight tidak kaku karena diatur di level interface, tidak seperti 2 GUI sebelumnya diatur di level konfigurasi sehingga harus disambungkan di konfigurasi compose. Sehingga Redisinsight bisa digunakan sebagai GUI terpusat dan mengontrol semua server Redis di masing-masing service.
Cara menyambungkan database Redis anda dengan Redisinsight:
- Buka
localhost:10003
(Apabila anda tidak merubah portnya) untuk membuka Redisinsight dengan Browser anda. - Pilih "I already have a database"
- Pilih "Connect to a Redis Database"
- Isi form yang dibutuhkan sebagai berikut:
- Host => Jangan menggunakan localhost maupun 127.0.0.1, Redisinsight tidak akan menemukan server Redis anda meski anda bisa mengakses Redis dengan port
1xx53
. Untuk host isilah dengan IP perangkat anda di jaringan. - Port => Sesuaikan dengan port Redis, apabila anda tidak merubahnya pasti
1xx53
. - Name => Hanya sebatas nama untuk ditampilkan di list database Redis anda. Jadi anda bisa terserah.
- Host => Jangan menggunakan localhost maupun 127.0.0.1, Redisinsight tidak akan menemukan server Redis anda meski anda bisa mengakses Redis dengan port
- Pilih "Add Redis Database"
- Selamat 😄
MailPit/MailTrap (Dummy SMTP Server)
2 tools ini adalah dummy SMTP server yang digunakan untuk menampilkan email yang dibuat oleh sistem anda. Jadi email bukan dikirim namun ditangkap dan ditampilkan.
- Mailpit adalah service dummy yang perlu anda serve di OS anda.
- Kami juga menyediakan Mailpit di semua service dan Docker Shared Environment.
- Mailpit memiliki 2 port yang digunakan sebagai:
- SMTP server itu sendiri.
- GUI untuk menampilkan email tersebut.
- Mailtrap adalah alternatif, merupakan website yang bisa diakses disini sehingga anda tidak perlu menginstall apapun hanya perlu membuat akun dan inbox yang perlu ditempel di
.env
service.- Cara mengaksesnya sebagai berikut
- Membuat akun di https://mailtrap.io
- Membuat project dengan menekan Add Project
- Membuat inbox dengan menekan Add Inbox
- Buka Inbox tersebut, akan ada tab dengan tulisan SMTP Settings. Di bagian Integrations, pilih Laravel 7+, dan konfigurasi akan muncul dibawahnya. Copy semua baris tersebut dan tempelkan di
.env
di project.
- Cara mengaksesnya sebagai berikut
RabbitMQ (Message Broker)
Service ini digunakan sebagai message broker sebagai sarana komunikasi
FYI
Kami sendiri sebenarnya baru ini menggunakan RabbitMQ. Kami kurang lebih paham teorinya namun belum pernah menggunakannya di project secara langsung.
Meilisearch (Search Engine)
Service ini digunakan untuk menyajikan opsi yang dipakai Search Engine yang akan diimplementasi oleh sistem.
FYI
Kami sendiri sebenarnya baru ini menggunakan Meilisearch. Kami kurang lebih paham teorinya namun belum pernah menggunakannya di project secara langsung.
Opsi Environment Development
Intinya
Proses development semua ada di local PC anda. Kami tidak menyediakan server development apapun.
Dalam pengembangan, kami membebaskan setiap developer untuk menggunakan cara pengembangan berikut. Di setiap project, ada 2 buah file .env.example
yang bisa developer sesuaikan ingin menggunakan environment yang mana. Jadi setelah menentukan ingin menggunakan opsi development yang mana, silahkan copy file .env.xxx.example
menjadi file .env
. Berikut adalah opsi dan .env.example
yang digunakan:
- Menggunakan Docker dengan bantuan Laravel Sail. Opsi ini adalah paket lengkap development, setiap app memiliki environment sendiri-sendiri. File env yang harus anda clone adalah
.env.sail.example
- Local Environment baik itu menggunakan XAMPP maupun install setiap alat secara terpisah di OS anda. Jadi anda perlu menginstall semua tools secara mandiri. File yang harus anda clone adalah
.env.local.example
Setiap mode pengembangan, kami juga memberikan untuk menggunakan Shared Environment yang berbasis Docker meski menggunakan Local Environment, dimana semua tools sudah kami siapkan. Jadi anda seperti menggunakan Local namun anda tidak perlu menginstal karena semuanya disiapkan oleh Compose.
Shared Environment
sa-cf-environment
merupakan paket lengkap development berbasis Docker, termasuk memiliki beberapa GUI container yang tidak ada di container individual, konfigurasi ini bisa digunakan sebagai shared service maupun hanya sebagai service support. Isi containernya sebagai berikut:
Nama Image | Deskripsi | Forward Port |
---|---|---|
PhpMyAdmin | Database SQL GUI | 10001 |
MongoDB-Express | MongoDB GUI | 10002 |
Redisinsight | Redis GUI | 10003 |
MariaDB | Database SQL | 10051 |
MongoDB | Database NoSQL | 10052 |
Redis | Cache | 10053 |
Mailpit | SMTP Dummy | GUI 10004 , SMTP Server 10054 |
RabbitMQ | Message Broker | GUI 10005 , Service 10055 |
Meilisearch | Search engine index | 10056 |
Sebagai Shared Environment untuk Semua Service/Container
Apabila anda ingin menggunakan Docker namun resource anda terbatas, kami memberikan opsi untuk menggunakan shared service dimana environment semua service itu 1 saja, tidak memiliki environment sendiri-sendiri. File compose tersebut berada di sa-cf-environment
.
Untuk menggunakan ini, edit file .env
di masing-masing project dengan URL adalah IP Interface jaringan anda (karena terkadang tidak bisa apabila menggunakan localhost), dan portnya sesuaikan variabel x
menjadi 0. Misal di sa-gw-adm
yang awalnya DB_PORT adalah 10151
rubah menjadi 10051
.
Dev dengan Docker Stack
Apabila developer hendak menggunakan Docker, kami telah menyiapkan Docker Compose untuk setiap project.
FYI
Semua forward port akan menggunakan pola 1xxyz
sehingga port berada dalam rentang 10000
hingga 19999
. Makna dari setiap variabel sebagai berikut:
xx
merupakan kode service. Misalsa-gw-adm
itu 01,sa-gw-cust
itu 02, dst. (Lihat penjelasan disini)y
merupakan rentang jenis container. Apabila rentang berada di0
-4
maka container tersebut merupakan GUI/Tampilan yang bisa diakses browser, sedangkan apabila berada pada rentang5
-9
maka container tersebut merupakan servicenya.z
merupakan nomor urut dari setiap container. Untuk lebih jelasnya akan dijelaskan di masing-masing item dibawah.
Kami selalu mengusahakan bahwa variabel z
itu sama untuk pasangan GUI dan Servicenya. Misalkan MariaDB berada di port 10151
, maka PhpMyAdmin di port 10101
, perhatikan bahwa z
sama-sama 1.
Requirement
- Jelas anda butuh Docker.
- Composer dan PHP. Untuk menginstall Laravel Sail.
- Untuk Windows, Docker butuh WSL. Sehingga ya butuh WSL eheheh.
Container Individual yang Global
Setiap Docker Compose memiliki container sebagai berikut.
Nama Image | Ada di Gw/Be | Deskripsi | Forward Port |
---|---|---|---|
PhpMyAdmin | Keduanya | GUI Database SQL | 1xx01 |
MariaDB | Keduanya | Database primary dengan SQL | 1xx51 |
MongoDB | Gw | Database sekunder dengan NoSQL | 1xx52 |
Redis | Keduanya | Penyimpanan cache data | 1xx53 |
MailPit | Keduanya | Dummy SMTP server | GUI 1xx04 , Server 1xx54 |
Meilisearch | Gw | Index search engine | 1xx56 |
Selain itu, semua service Laravel berjalan pada port 1xx00
dan Vite berjalan pada port 1xx50
.
Dev dengan Local Server
TL;DR
Ribet 😄
Jelas, apabila development dengan local tools, maka anda perlu menginstall semua alat yang dibutuhkan satu per satu. Namun karena stepnya banyak, maka nanti saya berikan link referensi ke sumber yang lebih ahlinya. 😄
Apabila anda keberatan menginstall satu per satu, silahkan gunakan sa-cf-environment
untuk penggunaan shared environment (Lihat disini). Dalam prakteknya, setiap project Laravel anda jalankan manual di localhost anda menggunakan php artisan serve
dan npm run dev
secara biasa tanpa Docker, hanya saja link environment didalam .env
arahkan ke link hasil Port Forwarding. Sehingga anda hanya menjalankan 1 docker compose yaitu environment saja.
Menjalankan Service Laravel dan Vite
TL;DR
Server dev Laravel anda harus menjalankan di port 1xx00
, sedangkan untuk server dev Vite sudah kami konfigurasi untuk jalan di 1xx50
.
Dalam menjalankan service Laravel, setiap service kami sarankan jalan di Port yang sama sesuai Docker terutama untuk semua Gateway. Alasannya, Gateway disini menggunakan sistem autentikasi dengan bantuan Laravel Sanctum. Portnya harus didefinisi terlebih dahulu agar bisa dianngap menerima stateful API auth cookies. Kami mendefinisikan port berikut:
- localhost
- localhost:3000
- 127.0.0.1
- localhost:8000
- 127.0.0.1:8000
- localhost:1
xx
00 - 127.0.0.1:1
xx
00
Karena anda kedepannya memungkinkan untuk menjalankan lebih dari 1 service, maka kami sarankan tidak menggunakan port 8000 melakinkan sesuaikan dengan 1xx00
.
Untuk Vite semua dev server berada pada port 1xx50
. Semua service sudah kami konfigurasi seperti ini sehingga anda tidak perlu merubahnya lagi seperti saat menjalankan server Laravel.
Instalasi Server dan MariaDB
Kami sarankan menggunakan XAMPP saja daripada ribet 😃
Instalasi Redis
Silahkan buka official docs 😄
Instalasi Meilisearch
Meilisearch yang kami gunakan adalah self-host. Silahkan buka official docsnya juga 😂
Sedikit info tambahan.
- Untuk pengguna Windows yang ingin menginstall menggunakan executables, bisa download dari sini.
- Untuk file json yang akan dimasukkan ke Meilisearch, nanti itu dihandle oleh Laravel Scout.
Instalasi MongoDB
MongoDB yang kami gunakan adalah Community edition. Silahkan buka official docs 😄
Instalasi RabbitMQ
Silahkan buka official docs di bagian Installation Guides.
Instalasi SMTP Server
Daripada anda menginstal, silahkan gunakan MailTrap untuk menangkap email. Silahkan daftar lalu silahkan copy SMTP settings ke .env
.