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.

Untuk detail pipeline tiap workflow (trigger, runner, langkah deploy, dan apa yang tidak ada), lihat CI/CD.

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

Untuk detail pipeline GitHub Actions (trigger, runner, langkah, dan apa yang tidak ada), lihat CI/CD. 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