Lompat ke konten
dokumentasi.id
Commit a2522f5
v1
Star645

3

Instalasi, Konfigurasi, dan Docker

Aplikasi ini adalah proyek Laravel 12 dengan panel Filament 4. README mencantumkan kebutuhan minimum: PHP 8.2 ke atas, Composer, serta Node.js dan npm (README.md:30-36). Constraint di composer.json sejalan dengan itu, yaitu php: ^8.2, laravel/framework: ^12.0, dan filament/filament: ^4.0 (composer.json:8-18).

Urutan instalasi dari clone sampai server lokal

Langkah pertama dan kedua adalah clone repository lalu memasang dependency PHP dan Node lewat composer install dan npm install (README.md:44-56). Langkah ketiga menyalin .env.example menjadi .env dan membangkitkan APP_KEY (README.md:58-62). Langkah keempat mengisi lima variabel DB_* untuk MySQL (README.md:64-72). Setelah itu php artisan migrate dijalankan, lalu php artisan storage:link agar berkas unggahan dapat diakses (README.md:74-82). Akun panel dibuat dengan php artisan make:filament-user, kemudian hak akses diaktifkan lewat tiga perintah Shield: shield:setup, shield:install, dan shield:super-admin (README.md:84-94). Langkah terakhir menjalankan npm run dev lalu php artisan serve (README.md:96-104).

graph TD
  clone[git clone dan cd] --> deps[composer install dan npm install]
  deps --> env[salin .env.example ke .env lalu php artisan key generate]
  env --> db[isi variabel DB di .env]
  db --> migrate[php artisan migrate]
  migrate --> link[php artisan storage link]
  link --> user[php artisan make filament user]
  user --> shield[shield setup lalu shield install lalu shield super-admin]
  shield --> assets[npm run dev]
  assets --> serve[php artisan serve]
  style env fill:#f59e0b,color:#000
  style db fill:#f59e0b,color:#000
  style shield fill:#f59e0b,color:#000
  style migrate fill:#336791,color:#fff
  style assets fill:#8b5cf6,color:#fff
  style serve fill:#2d7d46,color:#fff
%% fig: Urutan instalasi dari clone sampai server lokal
%% desc: Tiap langkah memakai hasil langkah sebelumnya; warna kuning menandai konfigurasi, biru migration, ungu build asset, dan hijau server siap.
Fig. 1: Urutan instalasi dari clone sampai server lokalTiap langkah memakai hasil langkah sebelumnya; warna kuning menandai konfigurasi, biru migration, ungu build asset, dan hijau server siap.

Rangkaian pada diagram itu berurutan, dan satu langkah hanya bisa berjalan setelah langkah sebelumnya selesai. Bagian ini hanya membahas penyiapan; isi panel setelah login dijelaskan di Ringkasan Proyek, sedangkan peran dan hak akses dijelaskan di Kontrol Akses dan Peran.

Variabel .env yang mengikat perilaku

Nilai bawaan di .env.example sudah bisa langsung dipakai. Blok pertama menetapkan APP_NAME, APP_ENV=local, APP_URL=http://localhost, dan APP_TIMEZONE=Asia/Jakarta (.env.example:1-10).

Blok database menetapkan DB_CONNECTION=mysql, DB_HOST=127.0.0.1, DB_PORT=3306, basis data dewakoding_project_management, user root, dan DB_PASSWORD=password; komentar di berkas itu menyarankan DB_HOST=db bila memakai Docker (.env.example:24-30).

Driver bawaan mengarah ke basis data: SESSION_DRIVER=database, QUEUE_CONNECTION=database, dan CACHE_STORE=database, sedangkan FILESYSTEM_DISK=local dan BROADCAST_CONNECTION=log (.env.example:32-42). Karena itu sesi, job queue, dan cache memerlukan tabel hasil migration.

Mail bawaan menuliskan pesan ke log: MAIL_MAILER=log, MAIL_HOST=127.0.0.1, MAIL_PORT=2525 (.env.example:52-59).

Baris terakhir menyiapkan nama aset Vite dan kredensial Google, yaitu VITE_APP_NAME, GOOGLE_CLIENT_ID, dan GOOGLE_CLIENT_SECRET (.env.example:67-70).

VariabelNilai bawaanKonsekuensi
DB_CONNECTIONmysqldriver basis data utama
DB_PORT3306port MySQL sekaligus port host di docker-compose
SESSION_DRIVERdatabasesesi butuh tabel sesi
QUEUE_CONNECTIONdatabasejob queue butuh tabel job
CACHE_STOREdatabasecache butuh tabel cache
MAIL_MAILERlogemail tidak terkirim, hanya tercatat
GOOGLE_CLIENT_IDplaceholdertombol login Google butuh nilai nyata

config/services.php membaca GOOGLE_CLIENT_ID dan GOOGLE_CLIENT_SECRET, lalu membentuk redirect dari APP_URL ditambah /auth/google/callback (config/services.php:38-42). README meminta kedua nilai itu diisi dari OAuth 2.0 Client ID yang dibuat di Google Cloud Console (README.md:216-223).

Menjalankan stack lewat docker-compose

graph TD
  browser[Browser] --> nginx[laravel_nginx port 8000 ke 80]
  nginx -->|fastcgi_pass ke port 9000| app[laravel_app php 8.3-fpm]
  app --> db[laravel_db mysql 8.0]
  pma[laravel_phpmyadmin port 8080] --> db
  db --> vol[volume laravel-data]
  style db fill:#336791,color:#fff
  style vol fill:#336791,color:#fff
  style nginx fill:#2d7d46,color:#fff
  style app fill:#f59e0b,color:#000
  style pma fill:#8b5cf6,color:#fff
%% fig: Empat service docker-compose dan arah trafiknya
%% desc: Nginx meneruskan permintaan PHP ke container app lewat port 9000, app membaca MySQL, dan phpMyAdmin memakai db yang sama di atas volume laravel-data.
Fig. 2: Empat service docker-compose dan arah trafiknyaNginx meneruskan permintaan PHP ke container app lewat port 9000, app membaca MySQL, dan phpMyAdmin memakai db yang sama di atas volume laravel-data.
ServiceImage atau buildPort hostPeran
appbuild dari Dockerfiletidak dipublikasikanPHP-FPM 8.3
nginxnginx:alpine8000:80web server
dbmysql:8.0${DB_PORT}:3306MySQL
phpmyadminphpmyadmin/phpmyadmin8080:80klien basis data

Service app dibangun dari Dockerfile dengan working directory /var/www dan dua volume: seluruh repository serta ./php/local.ini (docker-compose.yml:1-14). Image memakai php:8.3-fpm dan memasang ekstensi pdo_mysql, mbstring, exif, pcntl, bcmath, gd, intl, serta zip (Dockerfile:1-19); image mengekspos port 9000 dan menjalankan php-fpm sebagai perintah utama (Dockerfile:24-33).

Service nginx memakai nginx:alpine dan memetakan port host 8000 ke port 80 (docker-compose.yml:16-27). Berkas nginx/conf.d/app.conf menetapkan root /var/www/public dan meneruskan skrip PHP ke app:9000 (nginx/conf.d/app.conf:1-22).

Service db memakai mysql:8.0; nama basis data, password, dan user diambil dari DB_DATABASE, DB_PASSWORD, dan DB_USERNAME, sedangkan port host mengikuti DB_PORT (docker-compose.yml:29-46). Datanya disimpan di volume laravel-data dalam network laravel-network (docker-compose.yml:62-68).

Service phpmyadmin berjalan di port host 8080 dengan PMA_HOST: db (docker-compose.yml:48-60).

Berkas php/local.ini yang di-mount menaikkan upload_max_filesize dan post_max_size ke 40M (php/local.ini:1-2), sehingga import berkas berukuran besar tidak terpotong di lapisan PHP. Batas itu relevan untuk alur di Import dan Export Ticket.

⚠️ .dockerignore mengeluarkan node_modules, vendor, .git, .idea, dan .env dari build context (.dockerignore:1-5). Image hanya menerima salinan kode, jadi dependency tetap harus dipasang di dalam container, dan .env harus datang dari volume ./:/var/www (docker-compose.yml:1-14), bukan dari image.

⚠️ DB_PORT dipakai dua kali: sebagai port host pada pemetaan db dan sebagai port koneksi di .env. Mengubahnya menggeser port publik MySQL sekaligus alamat yang dipakai aplikasi.

Build asset frontend

vite.config.js mendaftarkan tiga entry: resources/css/app.css, resources/js/app.js, dan resources/css/filament/admin/theme.css (vite.config.js:5-13). package.json menyediakan npm run dev dan npm run build (package.json:4-7).

composer run dev menjalankan empat proses sekaligus: php artisan serve, queue:listen --tries=1, pail --timeout=0, dan npm run dev (composer.json:59-62). Setelah composer install, hook post-autoload-dump juga menjalankan php artisan filament:upgrade (composer.json:42-47).

Menjalankan test

phpunit.xml menetapkan DB_CONNECTION=sqlite dengan DB_DATABASE=:memory:, CACHE_STORE=array, QUEUE_CONNECTION=sync, dan SESSION_DRIVER=array (phpunit.xml:20-32). Karena itu suite test tidak menyentuh MySQL milik Docker.

Catatan upgrade Shield

README menandai bagian upgrade dari Filament 3 ke Filament 4, meminta backup basis data lebih dulu, dan menutupnya dengan php artisan shield:generate --all --option=policies untuk membangkitkan ulang policy serta permission (README.md:116-135).