Update besar apk finance
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Tahap 0–1: Persiapan dan Keamanan
|
||||
|
||||
Dokumen ini adalah checklist deployment untuk fondasi keamanan `accounting_dev`.
|
||||
|
||||
## Sebelum deploy
|
||||
|
||||
1. Backup database dan folder `uploads`, lalu lakukan uji restore di staging.
|
||||
2. Rotasi seluruh password database yang pernah tersimpan di repository/source lama.
|
||||
3. Konfigurasikan environment berdasarkan `.env.example` melalui Apache `SetEnv`, virtual host, container, atau secret manager. File `.env` tidak dibaca otomatis oleh aplikasi.
|
||||
4. Gunakan `CI_ENV=production`, URL HTTPS, `COOKIE_SECURE=true`, dan encryption key acak minimal 32 karakter pada production.
|
||||
5. Isi `ATTENDANCE_ALLOWED_SERIALS` dengan serial mesin yang sah.
|
||||
6. Biarkan `DBCOMPARE_ENABLED=false` kecuali saat diagnosis terkontrol oleh Admin.
|
||||
7. Pastikan web server dapat menulis `application/logs`, folder session PHP, dan `uploads`, tetapi tidak dapat mengeksekusi PHP dari `uploads`.
|
||||
|
||||
Contoh konfigurasi Apache development:
|
||||
|
||||
```apache
|
||||
SetEnv CI_ENV development
|
||||
SetEnv APP_BASE_URL http://localhost/accounting_dev/
|
||||
SetEnv APP_ENCRYPTION_KEY ganti-dengan-secret-acak-yang-panjang
|
||||
SetEnv DB_HOST 127.0.0.1
|
||||
SetEnv DB_PORT 3306
|
||||
SetEnv DB_USERNAME accounting_app
|
||||
SetEnv DB_PASSWORD secret
|
||||
SetEnv DB_DATABASE accounting_dev
|
||||
```
|
||||
|
||||
## Deployment dan rollback
|
||||
|
||||
1. Deploy ke staging dan jalankan `composer install --no-dev --optimize-autoloader` untuk build production.
|
||||
2. Jalankan lint, dependency audit, login, logout, seluruh AJAX CRUD utama, upload, export, webhook, dan cron melalui CLI.
|
||||
3. Ambil backup production tepat sebelum deployment.
|
||||
4. Deploy source terlebih dahulu; migration baru hanya dijalankan setelah backup tervalidasi.
|
||||
5. Jika smoke test gagal, kembalikan source release sebelumnya. Restore database hanya jika migration/transaksi deployment telah mengubah data.
|
||||
|
||||
## Aturan endpoint
|
||||
|
||||
- `Auth` adalah endpoint publik untuk login/logout.
|
||||
- `AttendanceWebhook` publik khusus perangkat yang serialnya terdaftar dan dikecualikan dari CSRF.
|
||||
- `Cronjob` hanya dapat dijalankan melalui PHP CLI.
|
||||
- `Dbcompare` hanya untuk Admin, nonaktif secara default, dan seluruh koneksinya berasal dari environment.
|
||||
- Controller bisnis harus mewarisi `MY_Controller`; controller admin penuh dapat mewarisi `MY_Admin_Controller`.
|
||||
|
||||
## Upload dan data pribadi
|
||||
|
||||
- File baru di `uploads/karyawan` dan background hasil upload tidak boleh ditambahkan ke Git.
|
||||
- File lama yang sudah terlanjur tracked perlu dikeluarkan dari Git index pada perubahan repository terpisah, setelah backup dan pemeriksaan dampak deployment.
|
||||
- Untuk production berskala besar, pindahkan upload ke private object storage dan berikan akses melalui endpoint terotorisasi.
|
||||
|
||||
## Database migration
|
||||
|
||||
Folder `application/migrations` telah disiapkan. Baseline migration harus dibuat dari schema production yang sudah diverifikasi dan tidak boleh dijalankan otomatis sebelum perbandingan staging selesai.
|
||||
|
||||
## Verifikasi minimum
|
||||
|
||||
- Request tanpa login ke controller bisnis menghasilkan redirect atau HTTP 401 untuk AJAX.
|
||||
- Login gagal lima kali terkunci selama lima menit pada session tersebut.
|
||||
- POST tanpa token CSRF ditolak.
|
||||
- Cron melalui browser menghasilkan HTTP 403.
|
||||
- Dbcompare nonaktif menghasilkan HTTP 404.
|
||||
- Upload script ke folder upload tidak dapat dieksekusi.
|
||||
- `composer audit --locked` tidak melaporkan advisory pada dependency production.
|
||||
Reference in New Issue
Block a user