Add deployment, backup, and project documentation

This commit is contained in:
2026-04-12 06:38:44 +00:00
parent 007f107be6
commit 33a74298b1
5 changed files with 995 additions and 54 deletions
+17 -19
View File
@@ -1,43 +1,41 @@
APP_NAME=Laravel APP_NAME="Database Kesiswaan"
APP_ENV=local APP_ENV=production
APP_KEY= APP_KEY=
APP_DEBUG=true APP_DEBUG=false
APP_URL=http://localhost APP_URL=http://localhost
APP_LOCALE=en APP_LOCALE=id
APP_FALLBACK_LOCALE=en APP_FALLBACK_LOCALE=id
APP_FAKER_LOCALE=en_US APP_FAKER_LOCALE=id_ID
APP_MAINTENANCE_DRIVER=file APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database # APP_MAINTENANCE_STORE=database
# PHP_CLI_SERVER_WORKERS=4
BCRYPT_ROUNDS=12 BCRYPT_ROUNDS=12
LOG_CHANNEL=stack LOG_CHANNEL=stack
LOG_STACK=single LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug LOG_LEVEL=error
DB_CONNECTION=sqlite DB_CONNECTION=mysql
# DB_HOST=127.0.0.1 DB_HOST=127.0.0.1
# DB_PORT=3306 DB_PORT=3306
# DB_DATABASE=laravel DB_DATABASE=database_kesiswaan
# DB_USERNAME=root DB_USERNAME=kesiswaan
# DB_PASSWORD= DB_PASSWORD=changeme
SESSION_DRIVER=database SESSION_DRIVER=file
SESSION_LIFETIME=120 SESSION_LIFETIME=120
SESSION_ENCRYPT=false SESSION_ENCRYPT=false
SESSION_PATH=/ SESSION_PATH=/
SESSION_DOMAIN=null SESSION_DOMAIN=null
BROADCAST_CONNECTION=log BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local FILESYSTEM_DISK=public
QUEUE_CONNECTION=database QUEUE_CONNECTION=database
CACHE_STORE=database CACHE_STORE=file
# CACHE_PREFIX= # CACHE_PREFIX=
MEMCACHED_HOST=127.0.0.1 MEMCACHED_HOST=127.0.0.1
@@ -53,7 +51,7 @@ MAIL_HOST=127.0.0.1
MAIL_PORT=2525 MAIL_PORT=2525
MAIL_USERNAME=null MAIL_USERNAME=null
MAIL_PASSWORD=null MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_ADDRESS="admin@kesiswaan.local"
MAIL_FROM_NAME="${APP_NAME}" MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID= AWS_ACCESS_KEY_ID=
+542
View File
@@ -0,0 +1,542 @@
# 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 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.
+273 -35
View File
@@ -1,58 +1,296 @@
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p> # Database Kesiswaan
<p align="center"> Aplikasi administrasi sekolah berbasis **Laravel** untuk mengelola data siswa, dokumen siswa, data orang tua/wali, kenaikan kelas, mutasi/keluar siswa, portal publik pencarian siswa, dan portal pelengkapan biodata siswa.
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
</p>
## About Laravel ---
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: ## Tujuan Aplikasi
- [Simple, fast routing engine](https://laravel.com/docs/routing). Project ini dibuat untuk membantu operasional sekolah dalam satu panel administrasi yang lebih rapi dan terstruktur, dengan fokus pada:
- [Powerful dependency injection container](https://laravel.com/docs/container).
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
- [Robust background job processing](https://laravel.com/docs/queues).
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
Laravel is accessible, powerful, and provides tools required for large, robust applications. - pengelolaan data siswa
- master data akademik
- pengelolaan dokumen siswa
- pemantauan kelengkapan dan verifikasi dokumen
- histori akademik siswa
- promosi / kenaikan kelas
- arsip siswa keluar dan mutasi
- portal publik untuk pencarian informasi siswa
- portal publik untuk pelengkapan biodata siswa secara mandiri
## Learning Laravel ---
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. ## Fitur Utama
In addition, [Laracasts](https://laracasts.com) contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. ### Dashboard
- ringkasan jumlah siswa
- ringkasan kelengkapan dokumen
- ringkasan verifikasi dokumen
You can also watch bite-sized lessons with real-world projects on [Laravel Learn](https://laravel.com/learn), where you will be guided through building a Laravel application from scratch while learning PHP fundamentals. ### Master Data
- Tahun Angkatan
- Program Keahlian
- Kelas
- Jenis Dokumen
## Agentic Development ### Data Siswa
- CRUD data siswa
- detail siswa
- relasi ke Tahun Angkatan, Program Keahlian, dan Kelas
- histori akademik siswa
Laravel's predictable structure and conventions make it ideal for AI coding agents like Claude Code, Cursor, and GitHub Copilot. Install [Laravel Boost](https://laravel.com/docs/ai) to supercharge your AI workflow: ### Orang Tua / Wali
- nested CRUD di bawah siswa
- dukungan ayah, ibu, dan wali
### Dokumen Siswa
- upload dokumen
- edit / hapus dokumen
- preview browser
- download file
- verifikasi cepat dokumen
- catatan verifikasi
### Arsip Status Siswa
- Data Siswa Keluar
- Data Siswa Mutasi
- Data Siswa Lulus
### Promosi / Kenaikan Kelas
- rekomendasi kenaikan kelas
- penulisan histori akademik otomatis
### Portal Publik
- pencarian siswa publik
- portal pelengkapan biodata siswa
- verifikasi melalui NIS/NISN dan kode akses
### Pengaturan
- manajemen pengguna
- branding aplikasi
- reset data tertentu
---
## Teknologi yang Dipakai
- **Laravel**
- **Blade**
- **Tailwind CSS**
- **Vite**
- **MySQL / MariaDB**
- **SweetAlert2**
- **Alpine.js**
---
## Requirement Minimum
- PHP 8.2+
- Composer
- Node.js + npm
- MySQL / MariaDB
- Git
- Web server Apache atau Nginx
---
## Instalasi Lokal / Fresh Setup
### 1. Clone repository
```bash ```bash
composer require laravel/boost --dev git clone https://github.com/novysan87/database-kesiswaan.git
cd database-kesiswaan
php artisan boost:install
``` ```
Boost provides your agent 15+ tools and skills that help agents build Laravel applications while following best practices. ### 2. Copy file environment
```bash
cp .env.example .env
```
## Contributing ### 3. Edit konfigurasi `.env`
Sesuaikan terutama:
- `APP_URL`
- `DB_HOST`
- `DB_PORT`
- `DB_DATABASE`
- `DB_USERNAME`
- `DB_PASSWORD`
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). ### 4. Jalankan script deploy
```bash
./deploy.sh
```
## Code of Conduct Untuk staging:
```bash
APP_ENVIRONMENT=staging ./deploy.sh
```
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). Kalau perlu seeder:
```bash
RUN_SEED=true ./deploy.sh
```
## Security Vulnerabilities ---
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. ## Menjalankan Secara Manual
## License Kalau tidak memakai `deploy.sh`:
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). ```bash
composer install
npm install
npm run build
php artisan key:generate
php artisan migrate
php artisan storage:link
```
Untuk development:
```bash
php artisan serve
npm run dev
```
---
## Backup
Project ini menyediakan script backup manual:
```bash
./backup.sh
```
Yang dibackup:
- database MySQL
- `storage/app/public`
- file `.env`
Lokasi backup default:
- `storage/app/backups-manual/database`
- `storage/app/backups-manual/storage`
- `storage/app/backups-manual/env`
---
## Deploy ke Server Baru
Panduan lengkap ada di file:
```bash
DEPLOY.md
```
Di sana sudah dibahas:
- fresh deploy
- update deploy
- setup web server
- storage link
- backup & restore dasar
- checklist verifikasi pasca deploy
---
## Struktur Penting Project
```bash
app/ # controller, model, middleware, logic aplikasi
config/ # konfigurasi Laravel
database/ # migration, seeder, factory
public/ # document root web server
resources/views/ # Blade views
routes/ # web route & auth route
storage/app/public/ # file upload runtime (tidak masuk git)
DEPLOY.md # panduan deploy server baru
deploy.sh # script deploy
backup.sh # script backup
```
---
## Catatan Penting
### Jangan upload ke GitHub:
- `.env`
- dump database produksi
- file upload produksi
- dokumen siswa
- log runtime
- cache runtime
- credential / token / secret
### Yang masuk GitHub:
- source code
- migration
- seeder
- konfigurasi contoh
- script deploy / backup
- dokumentasi
---
## Alur Deploy yang Direkomendasikan
### Fresh server
```bash
git clone <repo>
cd database-kesiswaan
cp .env.example .env
./deploy.sh
```
### Update aplikasi
```bash
cd /var/www/database-kesiswaan
git pull origin main
./deploy.sh
```
### Backup manual
```bash
cd /var/www/database-kesiswaan
./backup.sh
```
---
## Branding
Branding aplikasi bisa diatur dari dashboard melalui menu:
- **Pengaturan > Branding Aplikasi**
Pengaturan ini dapat mencakup:
- nama aplikasi
- nama singkat / inisial
- logo utama
- favicon
- logo portal publik
---
## Catatan Operasional
- source code di GitHub adalah **source of truth untuk code**
- data produksi tetap harus dibackup terpisah
- folder `storage/app/public` harus ikut dipindahkan saat migrasi server
- `php artisan storage:link` wajib tersedia agar file publik tampil normal
---
## Status Saat Ini
Project ini sudah memiliki fondasi deploy dasar:
- repository GitHub
- `DEPLOY.md`
- `deploy.sh`
- `backup.sh`
- `.env.example` yang lebih relevan
---
## Lisensi / Kepemilikan
Project ini adalah aplikasi internal/operasional yang dikembangkan untuk kebutuhan administrasi sekolah. Gunakan dan kelola repository dengan akses yang sesuai, idealnya **private repository**.
Executable
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env bash
set -euo pipefail
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$APP_DIR"
PHP_BIN="${PHP_BIN:-php}"
BACKUP_ROOT="${BACKUP_ROOT:-$APP_DIR/storage/app/backups-manual}"
TIMESTAMP="$(date '+%Y-%m-%d-%H%M%S')"
RETENTION_DAYS="${RETENTION_DAYS:-14}"
log() {
printf '\n[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
}
abort() {
printf '\n[ERROR] %s\n' "$1" >&2
exit 1
}
[[ -f .env ]] || abort "File .env tidak ditemukan."
[[ -f artisan ]] || abort "File artisan tidak ditemukan. Jalankan dari root project Laravel."
mkdir -p "$BACKUP_ROOT/database"
mkdir -p "$BACKUP_ROOT/storage"
mkdir -p "$BACKUP_ROOT/env"
DB_CONNECTION=$(grep '^DB_CONNECTION=' .env | cut -d '=' -f2- | tr -d '"')
DB_HOST=$(grep '^DB_HOST=' .env | cut -d '=' -f2- | tr -d '"')
DB_PORT=$(grep '^DB_PORT=' .env | cut -d '=' -f2- | tr -d '"')
DB_DATABASE=$(grep '^DB_DATABASE=' .env | cut -d '=' -f2- | tr -d '"')
DB_USERNAME=$(grep '^DB_USERNAME=' .env | cut -d '=' -f2- | tr -d '"')
DB_PASSWORD=$(grep '^DB_PASSWORD=' .env | cut -d '=' -f2- | tr -d '"')
[[ -n "$DB_CONNECTION" ]] || abort "DB_CONNECTION tidak ditemukan di .env"
[[ "$DB_CONNECTION" == "mysql" ]] || abort "backup.sh saat ini hanya mendukung DB_CONNECTION=mysql"
[[ -n "$DB_DATABASE" ]] || abort "DB_DATABASE tidak ditemukan di .env"
[[ -n "$DB_USERNAME" ]] || abort "DB_USERNAME tidak ditemukan di .env"
DB_HOST="${DB_HOST:-127.0.0.1}"
DB_PORT="${DB_PORT:-3306}"
DB_FILE="$BACKUP_ROOT/database/${DB_DATABASE}-${TIMESTAMP}.sql"
STORAGE_FILE="$BACKUP_ROOT/storage/storage-public-${TIMESTAMP}.tar.gz"
ENV_FILE="$BACKUP_ROOT/env/env-${TIMESTAMP}.backup"
log "Backup database: $DB_DATABASE"
MYSQL_PWD="$DB_PASSWORD" mysqldump \
--host="$DB_HOST" \
--port="$DB_PORT" \
--user="$DB_USERNAME" \
--single-transaction \
--quick \
--skip-lock-tables \
"$DB_DATABASE" > "$DB_FILE"
log "Backup storage/app/public"
tar -czf "$STORAGE_FILE" storage/app/public
log "Backup file .env"
cp .env "$ENV_FILE"
chmod 600 "$ENV_FILE" || true
log "Hapus backup lama di atas ${RETENTION_DAYS} hari"
find "$BACKUP_ROOT" -type f -mtime +"$RETENTION_DAYS" -delete || true
log "Backup selesai"
printf '\nHasil backup:\n'
printf -- '- Database: %s\n' "$DB_FILE"
printf -- '- Storage : %s\n' "$STORAGE_FILE"
printf -- '- .env : %s\n' "$ENV_FILE"
Executable
+92
View File
@@ -0,0 +1,92 @@
#!/usr/bin/env bash
set -euo pipefail
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$APP_DIR"
PHP_BIN="${PHP_BIN:-php}"
COMPOSER_BIN="${COMPOSER_BIN:-composer}"
NPM_BIN="${NPM_BIN:-npm}"
APP_ENVIRONMENT="${APP_ENVIRONMENT:-production}"
RUN_SEED="${RUN_SEED:-false}"
INSTALL_NODE_MODULES="${INSTALL_NODE_MODULES:-true}"
COMPOSER_FLAGS_DEFAULT="--no-dev --optimize-autoloader"
COMPOSER_FLAGS="${COMPOSER_FLAGS:-$COMPOSER_FLAGS_DEFAULT}"
if [[ "$APP_ENVIRONMENT" != "production" ]]; then
COMPOSER_FLAGS="${COMPOSER_FLAGS_NON_PROD:-}"
fi
log() {
printf '\n[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
}
abort() {
printf '\n[ERROR] %s\n' "$1" >&2
exit 1
}
require_cmd() {
command -v "$1" >/dev/null 2>&1 || abort "Command not found: $1"
}
log "Memulai deploy di: $APP_DIR"
require_cmd "$PHP_BIN"
require_cmd "$COMPOSER_BIN"
require_cmd "$NPM_BIN"
[[ -f artisan ]] || abort "File artisan tidak ditemukan. Pastikan script dijalankan dari root project Laravel."
[[ -f .env ]] || abort "File .env tidak ditemukan. Copy .env.example menjadi .env terlebih dahulu."
log "Menampilkan versi tool"
$PHP_BIN -v | head -n 1
$COMPOSER_BIN --version
$NPM_BIN --version
log "Install/update dependency Composer"
if [[ -n "$COMPOSER_FLAGS" ]]; then
$COMPOSER_BIN install $COMPOSER_FLAGS
else
$COMPOSER_BIN install
fi
if [[ "$INSTALL_NODE_MODULES" == "true" ]]; then
log "Install dependency frontend"
$NPM_BIN install
fi
log "Build asset frontend"
$NPM_BIN run build
log "Pastikan APP_KEY tersedia"
$PHP_BIN artisan key:generate --force
log "Jalankan migration"
$PHP_BIN artisan migrate --force
if [[ "$RUN_SEED" == "true" ]]; then
log "Jalankan seeder"
$PHP_BIN artisan db:seed --force
fi
log "Pastikan symbolic link storage tersedia"
$PHP_BIN artisan storage:link || true
log "Bersihkan cache Laravel"
$PHP_BIN artisan optimize:clear
if [[ "$APP_ENVIRONMENT" == "production" ]]; then
log "Cache config, route, dan view untuk production"
$PHP_BIN artisan config:cache
$PHP_BIN artisan route:cache
$PHP_BIN artisan view:cache
fi
log "Deploy selesai"
printf '\nChecklist manual setelah deploy:\n'
printf -- '- Cek halaman login\n'
printf -- '- Cek dashboard setelah login\n'
printf -- '- Cek branding/logo\n'
printf -- '- Cek portal publik\n'
printf -- '- Cek file upload dan dokumen lama\n'