6.3 KiB
Deployment Guide - Production
⚠️ PENTING: Vendor Folder
Vendor folder TIDAK di-commit ke git repository!
Setiap kali deploy atau pull code baru, WAJIB jalankan:
composer install --no-dev --optimize-autoloader
🚀 Quick Deployment Steps
1. First Time Deployment
# 1. Clone repository
cd /www/wwwroot/api.btekno.cloud
git clone https://git.btekno.cloud/kangmin/api-btekno.git api
# 2. Masuk ke folder project
cd api
# 3. WAJIB: Install dependencies
composer install --no-dev --optimize-autoloader
# 4. Setup environment
cp .env.example .env
nano .env # Edit dengan konfigurasi production
# 5. Apply migrations (dari folder project root)
cd /www/wwwroot/api.btekno.cloud/api
mysql -u sql_retribusi -p sql_retribusi < ./migrations/001_create_audit_logs.sql
mysql -u sql_retribusi -p sql_retribusi < ./migrations/002_create_hourly_summary.sql
mysql -u sql_retribusi -p sql_retribusi < ./migrations/003_create_realtime_events.sql
# Atau menggunakan path absolut:
mysql -u sql_retribusi -p sql_retribusi < /www/wwwroot/api.btekno.cloud/api/migrations/001_create_audit_logs.sql
mysql -u sql_retribusi -p sql_retribusi < /www/wwwroot/api.btekno.cloud/api/migrations/002_create_hourly_summary.sql
mysql -u sql_retribusi -p sql_retribusi < /www/wwwroot/api.btekno.cloud/api/migrations/003_create_realtime_events.sql
# 6. Set permissions
chown -R www:www /www/wwwroot/api.btekno.cloud/api
chmod -R 755 /www/wwwroot/api.btekno.cloud/api
2. Update Deployment (Setelah Pull Code)
# 1. Pull latest code
cd /www/wwwroot/api.btekno.cloud/api
git pull origin main
# 2. WAJIB: Update dependencies (jika ada perubahan composer.json)
composer install --no-dev --optimize-autoloader
# 3. Regenerate autoloader
composer dump-autoload --optimize
# 4. Clear cache (jika ada)
# Tidak ada cache untuk project ini, skip
3. Setup aaPanel
-
Create Website:
- Domain:
api.btekno.cloud - DocumentRoot:
/www/wwwroot/api.btekno.cloud/api/public - PHP Version: 8.2 atau 8.3
- Domain:
-
PHP Settings:
- Enable
extension=pdo_mysql - Enable
extension=mbstring - Memory limit: 256M (minimum)
- Enable
-
Nginx Configuration (PENTING untuk fix 404):
Masuk ke: Website -> api.btekno.cloud -> Settings -> Configuration
Ganti isi configuration dengan:
server { listen 80; listen 443 ssl http2; server_name api.btekno.cloud; # Document Root - HARUS ke folder public/ root /www/wwwroot/api.btekno.cloud/api/public; index index.php index.html; # Logs access_log /www/wwwlogs/api.btekno.cloud.log; error_log /www/wwwlogs/api.btekno.cloud.error.log; # Disable access to hidden files location ~ /\. { deny all; access_log off; log_not_found off; } # Main location block - routing untuk Slim Framework location / { try_files $uri $uri/ /index.php?$query_string; } # PHP-FPM configuration location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/tmp/php-cgi-83.sock; # Sesuaikan dengan PHP version (83, 82, dll) fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; # Disable buffering for SSE fastcgi_buffering off; } # Disable PHP execution in uploads location ~* /uploads/.*\.php$ { deny all; } }Cek PHP socket path:
# Cek PHP version yang digunakan php -v # Cek socket path (biasanya di /tmp/php-cgi-XX.sock) ls -la /tmp/php-cgi-*.sockSetelah edit, klik Save dan Reload nginx.
Atau copy file
nginx.conf.exampledan sesuaikan path PHP socket.
🔧 Environment Configuration
Edit .env file:
APP_ENV=production
APP_DEBUG=false
# Database
DB_HOST=localhost
DB_NAME=sql_retribusi
DB_USER=sql_retribusi
DB_PASS=your_secure_password
# JWT
JWT_SECRET=generate-random-secure-string-here
JWT_TTL_SECONDS=3600
JWT_ISSUER=api-btekno
# API Key
RETRIBUSI_API_KEY=generate-secure-api-key-here
Generate secure keys:
# JWT Secret (min 32 characters)
openssl rand -base64 32
# API Key
openssl rand -hex 32
📋 Cron Jobs Setup
Setup di aaPanel → Cron:
# Daily summary (run at 1 AM every day)
0 1 * * * cd /www/wwwroot/api.btekno.cloud/api && /www/server/php/83/bin/php bin/daily_summary.php
# Hourly summary (run at 1 AM every day)
0 1 * * * cd /www/wwwroot/api.btekno.cloud/api && /www/server/php/83/bin/php bin/hourly_summary.php
Note: Ganti /www/server/php/83/bin/php dengan path PHP yang sesuai di server Anda.
✅ Verification
Setelah deployment, test endpoint:
# Health check
curl https://api.btekno.cloud/health
# Should return:
# {"status":"ok","time":1735123456}
🐛 Common Issues
Error: vendor/autoload.php not found
Cause: Vendor folder belum di-install
Solution:
cd /www/wwwroot/api.btekno.cloud/api
composer install --no-dev --optimize-autoloader
Error: Database connection failed
Cause: Database config salah di .env
Solution:
- Cek
DB_HOST,DB_NAME,DB_USER,DB_PASSdi.env - Test koneksi:
mysql -u sql_retribusi -p sql_retribusi
Error: JWT secret not set
Cause: JWT_SECRET kosong di .env
Solution: Generate dan set JWT_SECRET di .env
Error: Permission denied
Cause: File permission salah
Solution:
chown -R www:www /www/wwwroot/api.btekno.cloud/api
chmod -R 755 /www/wwwroot/api.btekno.cloud/api
📊 Monitoring
- Check logs:
/www/wwwroot/api.btekno.cloud/api/logs/(jika ada) - Check PHP error log di aaPanel
- Monitor database size dan performance
- Monitor realtime_events table (cleanup old data jika perlu)
🔄 Rollback
Jika ada masalah setelah update:
# 1. Rollback ke commit sebelumnya
cd /www/wwwroot/api.btekno.cloud/api
git log --oneline # Lihat commit history
git checkout <previous-commit-hash>
# 2. Reinstall dependencies
composer install --no-dev --optimize-autoloader
# 3. Test endpoint
curl https://api.btekno.cloud/health