580 lines
10 KiB
Markdown
580 lines
10 KiB
Markdown
# DEPLOY.md - Database Kesiswaan
|
|
|
|
Panduan ini dibuat supaya aplikasi **Database Kesiswaan** mudah dipindahkan dan dideploy ke server baru tanpa bergantung pada ingatan manual.
|
|
|
|
---
|
|
|
|
## 1. Ringkasan Arsitektur Deploy
|
|
|
|
Pisahkan 3 hal ini dengan jelas:
|
|
|
|
1. **Source code**
|
|
- Disimpan di GitHub repository project
|
|
- Berisi code Laravel, migration, seeder, assets, docs
|
|
|
|
2. **Environment & runtime**
|
|
- File `.env`
|
|
- Database MySQL / MariaDB
|
|
- Folder `storage/app/public`
|
|
- Cache, logs, session runtime
|
|
|
|
3. **Backup**
|
|
- Dump database
|
|
- Backup file upload / storage publik
|
|
- Salinan `.env` yang aman
|
|
|
|
> GitHub adalah source of truth untuk **kode**, bukan untuk data produksi.
|
|
|
|
---
|
|
|
|
## 2. Kebutuhan Server
|
|
|
|
Minimal server baru perlu:
|
|
|
|
- Linux server (Ubuntu/Debian direkomendasikan)
|
|
- Web server: **Apache** atau **Nginx**
|
|
- PHP **8.2+**
|
|
- Composer
|
|
- Node.js + npm
|
|
- MySQL / MariaDB
|
|
- Git
|
|
|
|
### PHP extensions yang dibutuhkan
|
|
|
|
Minimal pastikan extension berikut aktif:
|
|
|
|
- bcmath
|
|
- ctype
|
|
- curl
|
|
- dom
|
|
- fileinfo
|
|
- filter
|
|
- gd
|
|
- intl
|
|
- mbstring
|
|
- openssl
|
|
- pdo
|
|
- pdo_mysql
|
|
- session
|
|
- tokenizer
|
|
- xml
|
|
- zip
|
|
|
|
Cek cepat:
|
|
|
|
```bash
|
|
php -m
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Struktur Lokasi yang Disarankan
|
|
|
|
Contoh lokasi deploy:
|
|
|
|
```bash
|
|
/var/www/database-kesiswaan
|
|
```
|
|
|
|
Document root web server harus mengarah ke:
|
|
|
|
```bash
|
|
/var/www/database-kesiswaan/public
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Fresh Deploy dari GitHub
|
|
|
|
### 4.1 Clone repository
|
|
|
|
```bash
|
|
cd /var/www
|
|
git clone https://github.com/novysan87/database-kesiswaan.git
|
|
cd database-kesiswaan
|
|
```
|
|
|
|
Atau pakai SSH:
|
|
|
|
```bash
|
|
git clone git@github.com:novysan87/database-kesiswaan.git
|
|
cd database-kesiswaan
|
|
```
|
|
|
|
---
|
|
|
|
### 4.2 Cara deploy yang direkomendasikan
|
|
|
|
Setelah `.env` siap, gunakan script deploy bawaan project:
|
|
|
|
```bash
|
|
./deploy.sh
|
|
```
|
|
|
|
Untuk staging / non-production:
|
|
|
|
```bash
|
|
APP_ENVIRONMENT=staging ./deploy.sh
|
|
```
|
|
|
|
Kalau perlu sekalian seed:
|
|
|
|
```bash
|
|
RUN_SEED=true ./deploy.sh
|
|
```
|
|
|
|
---
|
|
|
|
### 4.3 Alternatif manual (tanpa script)
|
|
|
|
#### Install dependency backend
|
|
|
|
```bash
|
|
composer install --no-dev --optimize-autoloader
|
|
```
|
|
|
|
Untuk server development / staging:
|
|
|
|
```bash
|
|
composer install
|
|
```
|
|
|
|
#### Install dependency frontend
|
|
|
|
```bash
|
|
npm install
|
|
npm run build
|
|
```
|
|
|
|
Kalau lingkungan development:
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
---
|
|
|
|
### 4.4 Siapkan file environment
|
|
|
|
Copy `.env.example` menjadi `.env`:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Lalu edit:
|
|
|
|
```bash
|
|
nano .env
|
|
```
|
|
|
|
Minimal sesuaikan:
|
|
|
|
```env
|
|
APP_NAME="Database Kesiswaan"
|
|
APP_ENV=production
|
|
APP_KEY=
|
|
APP_DEBUG=false
|
|
APP_URL=https://domain-anda.com
|
|
|
|
LOG_CHANNEL=stack
|
|
LOG_LEVEL=error
|
|
|
|
DB_CONNECTION=mysql
|
|
DB_HOST=127.0.0.1
|
|
DB_PORT=3306
|
|
DB_DATABASE=database_kesiswaan
|
|
DB_USERNAME=kesiswaan
|
|
DB_PASSWORD=PASSWORD_DB_ANDA
|
|
|
|
FILESYSTEM_DISK=public
|
|
SESSION_DRIVER=file
|
|
CACHE_STORE=file
|
|
QUEUE_CONNECTION=database
|
|
```
|
|
|
|
> Jangan commit `.env` ke GitHub.
|
|
|
|
---
|
|
|
|
### 4.5 Generate APP_KEY
|
|
|
|
```bash
|
|
php artisan key:generate
|
|
```
|
|
|
|
---
|
|
|
|
### 4.6 Jalankan migration
|
|
|
|
```bash
|
|
php artisan migrate --force
|
|
```
|
|
|
|
Kalau perlu data awal admin:
|
|
|
|
```bash
|
|
php artisan db:seed --force
|
|
```
|
|
|
|
> Perhatikan seeder aktif di project. Pastikan tidak menimpa data produksi yang sudah ada.
|
|
|
|
---
|
|
|
|
### 4.7 Buat symbolic link storage
|
|
|
|
```bash
|
|
php artisan storage:link
|
|
```
|
|
|
|
Tanpa ini, file upload publik seperti dokumen dan branding tidak akan tampil.
|
|
|
|
---
|
|
|
|
### 4.8 Konfigurasi limit upload PHP (wajib untuk bulk upload dokumen lulusan)
|
|
|
|
Jika server produksi akan menggunakan fitur **Bulk Upload Dokumen Kelulusan**, pastikan limit upload PHP untuk web server tidak terlalu kecil. Jika tidak disesuaikan, request upload bisa gagal lebih dulu dengan error **413 Content Too Large** sebelum Laravel memproses file.
|
|
|
|
Untuk environment Apache + PHP 8.3, edit file:
|
|
|
|
```bash
|
|
sudo nano /etc/php/8.3/apache2/php.ini
|
|
```
|
|
|
|
Pastikan nilai berikut minimal:
|
|
|
|
```ini
|
|
upload_max_filesize = 8M
|
|
post_max_size = 64M
|
|
max_file_uploads = 50
|
|
```
|
|
|
|
Setelah diubah, reload Apache:
|
|
|
|
```bash
|
|
sudo systemctl reload apache2
|
|
```
|
|
|
|
Jika perubahan belum terbaca, lakukan restart:
|
|
|
|
```bash
|
|
sudo systemctl restart apache2
|
|
```
|
|
|
|
Catatan:
|
|
- perubahan ini adalah **konfigurasi server**, bukan source code Laravel
|
|
- `git pull` saja **tidak cukup** untuk menyelesaikan masalah upload besar / multi-file
|
|
- setting di atas dibuat agar selaras dengan fitur bulk upload dokumen lulusan yang mendukung banyak file dalam satu batch
|
|
|
|
---
|
|
|
|
### 4.9 Atur permission
|
|
|
|
Pastikan web server user bisa menulis ke folder berikut:
|
|
|
|
- `storage/`
|
|
- `bootstrap/cache/`
|
|
|
|
Contoh untuk Apache (`www-data`):
|
|
|
|
```bash
|
|
chown -R www-data:www-data /var/www/database-kesiswaan
|
|
find /var/www/database-kesiswaan -type f -exec chmod 644 {} \;
|
|
find /var/www/database-kesiswaan -type d -exec chmod 755 {} \;
|
|
chmod -R 775 /var/www/database-kesiswaan/storage
|
|
chmod -R 775 /var/www/database-kesiswaan/bootstrap/cache
|
|
```
|
|
|
|
> Sesuaikan user/group web server jika bukan `www-data`.
|
|
|
|
---
|
|
|
|
## 5. Konfigurasi Web Server
|
|
|
|
### 5.1 Apache (contoh VirtualHost)
|
|
|
|
```apache
|
|
<VirtualHost *:80>
|
|
ServerName database-kesiswaan.local
|
|
DocumentRoot /var/www/database-kesiswaan/public
|
|
|
|
<Directory /var/www/database-kesiswaan/public>
|
|
AllowOverride All
|
|
Require all granted
|
|
</Directory>
|
|
|
|
ErrorLog ${APACHE_LOG_DIR}/database-kesiswaan-error.log
|
|
CustomLog ${APACHE_LOG_DIR}/database-kesiswaan-access.log combined
|
|
</VirtualHost>
|
|
```
|
|
|
|
Lalu:
|
|
|
|
```bash
|
|
a2enmod rewrite
|
|
systemctl reload apache2
|
|
```
|
|
|
|
---
|
|
|
|
### 5.2 Nginx (contoh server block)
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name domain-anda.com;
|
|
root /var/www/database-kesiswaan/public;
|
|
index index.php index.html;
|
|
|
|
location / {
|
|
try_files $uri $uri/ /index.php?$query_string;
|
|
}
|
|
|
|
location ~ \.php$ {
|
|
include snippets/fastcgi-php.conf;
|
|
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
|
|
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
|
include fastcgi_params;
|
|
}
|
|
|
|
location ~ /\.ht {
|
|
deny all;
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Fresh Deploy dengan Data Produksi Lama
|
|
|
|
Kalau server baru bukan install kosong, tetapi pindahan dari server lama:
|
|
|
|
### 6.1 Pindahkan source code
|
|
- clone dari GitHub
|
|
|
|
### 6.2 Pindahkan `.env`
|
|
- copy `.env` lama, lalu sesuaikan domain / host DB bila perlu
|
|
|
|
### 6.3 Restore database
|
|
Gunakan dump SQL lama:
|
|
|
|
```bash
|
|
mysql -u USER_DB -p database_kesiswaan < backup.sql
|
|
```
|
|
|
|
### 6.4 Pindahkan storage publik
|
|
Yang wajib ikut:
|
|
|
|
- `storage/app/public/branding`
|
|
- `storage/app/public/student-documents`
|
|
- `storage/app/public/student-exit-letters`
|
|
- `storage/app/public/student-transfer-letters`
|
|
- file publik lain hasil upload runtime
|
|
|
|
Contoh copy:
|
|
|
|
```bash
|
|
rsync -avz /server-lama/var/www/database-kesiswaan/storage/app/public/ /var/www/database-kesiswaan/storage/app/public/
|
|
```
|
|
|
|
### 6.5 Jalankan ulang
|
|
|
|
```bash
|
|
php artisan storage:link
|
|
php artisan optimize:clear
|
|
npm run build
|
|
```
|
|
|
|
---
|
|
|
|
## 7. Update Deploy (setelah ada perubahan baru)
|
|
|
|
Kalau server sudah live dan ingin update dari GitHub:
|
|
|
|
```bash
|
|
cd /var/www/database-kesiswaan
|
|
git pull origin main
|
|
composer install --no-dev --optimize-autoloader
|
|
npm install
|
|
npm run build
|
|
php artisan migrate --force
|
|
php artisan optimize:clear
|
|
```
|
|
|
|
Kalau perlu cache ulang:
|
|
|
|
```bash
|
|
php artisan config:cache
|
|
php artisan route:cache
|
|
php artisan view:cache
|
|
```
|
|
|
|
> Jangan cache route/config terlalu cepat saat masih sering debugging. Gunakan setelah yakin stabil.
|
|
|
|
---
|
|
|
|
## 8. Backup yang Wajib Dipahami
|
|
|
|
Supaya aplikasi benar-benar bisa dipulihkan, backup yang dibutuhkan adalah:
|
|
|
|
### 8.1 Database
|
|
Contoh:
|
|
|
|
```bash
|
|
mysqldump -u USER_DB -p database_kesiswaan > backup-database-kesiswaan.sql
|
|
```
|
|
|
|
### 8.2 Storage publik
|
|
Contoh:
|
|
|
|
```bash
|
|
tar -czf backup-storage-public.tar.gz storage/app/public
|
|
```
|
|
|
|
### 8.3 File `.env`
|
|
Simpan terpisah dan aman. Jangan masuk GitHub.
|
|
|
|
---
|
|
|
|
## 9. Hal yang Tidak Boleh Masuk GitHub
|
|
|
|
Pastikan hal berikut tetap **tidak** masuk repository:
|
|
|
|
- `.env`
|
|
- `vendor/`
|
|
- `node_modules/`
|
|
- `storage/logs/*`
|
|
- `storage/framework/views/*`
|
|
- `storage/app/public/*` hasil upload runtime
|
|
- dump database
|
|
- file backup manual
|
|
- dokumen siswa produksi
|
|
- token / credential / password
|
|
|
|
---
|
|
|
|
## 10. Post-Deploy Checklist
|
|
|
|
Gunakan checklist ini setelah deploy ke server baru.
|
|
|
|
### A. Validasi dasar
|
|
- [ ] `composer install` sukses
|
|
- [ ] `npm run build` sukses
|
|
- [ ] `.env` sudah benar
|
|
- [ ] `php artisan key:generate` sudah dijalankan
|
|
- [ ] `php artisan migrate --force` sukses
|
|
- [ ] `php artisan storage:link` sukses
|
|
- [ ] permission `storage/` dan `bootstrap/cache/` benar
|
|
|
|
### B. Validasi web
|
|
- [ ] halaman login bisa dibuka
|
|
- [ ] dashboard bisa dibuka setelah login
|
|
- [ ] branding/logo tampil normal
|
|
- [ ] halaman publik pencarian siswa tampil
|
|
- [ ] halaman publik `lengkapi-data-siswa` tampil
|
|
|
|
### C. Validasi data
|
|
- [ ] data siswa muncul
|
|
- [ ] branding settings terbaca
|
|
- [ ] dokumen siswa bisa dipreview
|
|
- [ ] surat keluar/mutasi lama masih bisa diakses
|
|
- [ ] region data tersedia normal
|
|
|
|
### D. Validasi storage
|
|
- [ ] folder branding terbaca
|
|
- [ ] upload baru bisa dilakukan
|
|
- [ ] file lama tetap tersedia
|
|
|
|
### E. Validasi keamanan minimum
|
|
- [ ] `APP_DEBUG=false` di production
|
|
- [ ] `.env` tidak bisa diakses publik
|
|
- [ ] document root mengarah ke `public/`
|
|
- [ ] repo GitHub private
|
|
|
|
---
|
|
|
|
## 11. Troubleshooting Cepat
|
|
|
|
### Problem: logo / dokumen tidak muncul
|
|
Cek:
|
|
|
|
```bash
|
|
php artisan storage:link
|
|
ls -la public/storage
|
|
```
|
|
|
|
### Problem: error permission Laravel
|
|
Cek:
|
|
|
|
```bash
|
|
chown -R www-data:www-data /var/www/database-kesiswaan
|
|
chmod -R 775 storage bootstrap/cache
|
|
```
|
|
|
|
### Problem: perubahan view tidak muncul
|
|
Cek:
|
|
|
|
```bash
|
|
php artisan optimize:clear
|
|
```
|
|
|
|
### Problem: migration gagal
|
|
Cek koneksi DB di `.env` lalu jalankan:
|
|
|
|
```bash
|
|
php artisan migrate:status
|
|
```
|
|
|
|
### Problem: asset CSS/JS tidak tampil
|
|
Build ulang:
|
|
|
|
```bash
|
|
npm install
|
|
npm run build
|
|
```
|
|
|
|
---
|
|
|
|
## 12. Rekomendasi Lanjutan
|
|
|
|
Agar deploy makin nyaman ke depan, pertimbangkan langkah berikut:
|
|
|
|
- buat script `deploy.sh`
|
|
- buat script backup otomatis database + storage publik
|
|
- tambahkan `HEALTHCHECK.md` / SOP operasional
|
|
- siapkan server staging jika aplikasi makin besar
|
|
- pertimbangkan CI/CD setelah alur deploy manual sudah stabil
|
|
|
|
---
|
|
|
|
## 13. Ringkasan Singkat Perintah Deploy
|
|
|
|
### Fresh install
|
|
|
|
```bash
|
|
cd /var/www
|
|
git clone https://github.com/novysan87/database-kesiswaan.git
|
|
cd database-kesiswaan
|
|
cp .env.example .env
|
|
./deploy.sh
|
|
```
|
|
|
|
### Update deploy
|
|
|
|
```bash
|
|
cd /var/www/database-kesiswaan
|
|
git pull origin main
|
|
./deploy.sh
|
|
```
|
|
|
|
### Backup manual
|
|
|
|
```bash
|
|
cd /var/www/database-kesiswaan
|
|
./backup.sh
|
|
```
|
|
|
|
---
|
|
|
|
Kalau nanti arsitektur aplikasi berubah signifikan, update file ini juga supaya tetap relevan.
|