D
Setup

Deployment

Branch produksi adalah v3, bukan main. Push langsung trigger deploy ke self-hosted runner dengan git reset --hard.

Branch dan workflow

BranchWorkflowRunnerTarget
v3deploy_production.ymlself-hosted productionProduksi
stagingdeploy_staging.ymlself-hosted stagingStaging
toko_digitaldeploy_toko_digital.ymlself-hosted toko_digitalToko Digital

Branch produksi adalah v3, bukan main. main ada di repo tapi tidak digunakan untuk deploy.

Ada 25+ branch aktif

Banyak bernama personal (adi, ardi_temp, quickstart-bimbo). Konfirmasi ke user branch mana yang jadi target sebelum operasi git.

Apa yang dilakukan workflow

Setiap deploy otomatis menjalankan langkah berikut di self-hosted runner:

bash
# Clear cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan optimize:clear
php artisan config:cache
php artisan view:cache

# Pull code (DESTRUCTIVE — perubahan lokal di server hilang)
git fetch --all
git reset --hard origin/v3

# Install dependencies (tanpa dev)
composer install --no-dev --optimize-autoloader --ignore-platform-req=ext-mongodb
npm ci

# Build frontend
npm run build

# Fix permissions
sudo /usr/local/bin/chmod-dazo.sh

Aturan operasi git

  • Jangan commit, push, atau merge tanpa diminta eksplisit
  • Pisahkan commit pembenahan dari commit fitur
  • Jangan gabungkan refactor dengan perubahan fungsional
  • Sebelum push ke v3, pastikan npm run build dan php artisan test lolos lokal

Setup server — yang tidak terlihat dari repo

Dua blocker yang membuat project gagal jalan di server baru:

  1. resources/js/global.js — gitignored. Harus dibuat manual di server, dengan env = 'production'. Lihat Environment.
  2. .env — wajib DB_CONNECTION=mongodb dan seluruh kredensial service. .env.example tertinggal 87 variabel.

Scheduler dan cron

app/Console/Kernel.php mendaftarkan 3 schedule:

php
$schedule->command('app:downgrade')->everyMinute();
$schedule->command('app:addon-expired')->everyMinute();
$schedule->command('notif:subscription')->daily();

Dua command pertama berjalan setiap menit — pastikan keduanya idempoten dan cepat.

Server butuh cron entry:

plaintext
* * * * * cd /path/to/dazoapp && php artisan schedule:run >> /dev/null 2>&1

Queue — perlu perhatian

.env saat ini QUEUE_CONNECTION=sync. Artinya:

  • PaymentTimer job berjalan blocking dalam request
  • 6 Mailable ShouldQueue (OTP, notifikasi) juga blocking

Jika ada service worker eksternal yang seharusnya memproses job, konfigurasi ini perlu diperiksa. Worker mungkin punya sumber pekerjaan sendiri (misalnya polling MongoDB) — konfirmasi ke tim.

Perintah artisan custom yang relevan untuk deploy

CommandFungsi
app:downgradeTurunkan paket langganan kedaluwarsa
app:addon-expiredNonaktifkan add-on kedaluwarsa
wallet:sync-orders {--store_id=}Sinkronkan pembayaran order ke saldo wallet
order:send-digital-link {order_id}Kirim manual link produk digital

Setelah deploy

Verifikasi cepat:

  1. Buka app.dazo.id — pastikan halaman login muncul
  2. Cek storage/logs/laravel.log — cari error 500 atau exception
  3. Test satu endpoint API (mis. GET /api/testjwt dengan token)
  4. Cek scheduler: php artisan schedule:list
  5. Pastikan tidak ada console.log/dd() yang lolos — cari di diff

Checklist sebelum push ke v3

  • npm run build lolos lokal
  • php artisan test lolos (walau minim, tetap jalankan)
  • Tidak ada console.log/dd() di diff
  • Tidak ada file debug/backup/mockup di root
  • Tidak ada perubahan di config/jwt.php, JWT_SECRET, atau payload token tanpa koordinasi lintas repo
  • Tidak ada perubahan URL service tanpa koordinasi lintas repo
  • Commit message jelas, terpisah antara fitur dan pembenahan