# Panduan Instalasi - Aplikasi Pemantauan Tugas Siswa
## Persyaratan Sistem
### Minimum Requirements
- **Server**: Apache 2.4+ atau Nginx 1.18+
- **PHP**: 8.0 atau lebih tinggi (dengan ekstensi PDO, PDO_MySQL)
- **Database**: MySQL 8.0+ atau MariaDB 10.5+
- **Memory**: 512MB RAM minimum
- **Storage**: 1GB free space
- **Browser**: Chrome 90+, Firefox 88+, Safari 14+
### Recommended Requirements
- **Server**: Apache 2.4+
- **PHP**: 8.1+ dengan ekstensi: PDO, PDO_MySQL, mbstring, openssl, fileinfo
- **Database**: MySQL 8.0+
- **Memory**: 1GB+ RAM
- **Storage**: 5GB+ free space
## Langkah Instalasi
### 1. Persiapan Environment
#### Menggunakan XAMPP (Development)
1. Download dan install XAMPP dari [https://www.apachefriends.org](https://www.apachefriends.org)
2. Start Apache dan MySQL dari XAMPP Control Panel
3. Pastikan port 80 (Apache) dan 3306 (MySQL) tersedia
#### Menggunakan Server Production
1. Pastikan Apache dan MySQL sudah terinstall
2. Pastikan PHP 8.0+ dengan ekstensi yang diperlukan
3. Konfigurasi virtual host jika diperlukan
### 2. Download Source Code
```bash
# Clone repository
git clone https://github.com/username/tugas-siswa.git
# Atau download dan extract ZIP
# Letakkan di folder htdocs (XAMPP) atau web root server
```
### 3. Setup Database
#### Buat Database Baru
```sql
-- Login ke MySQL sebagai root
mysql -u root -p
-- Buat database
CREATE DATABASE tugas_siswa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Buat user khusus (opsional tapi direkomendasikan)
CREATE USER 'tugas_user'@'localhost' IDENTIFIED BY 'password_kuat_123';
GRANT ALL PRIVILEGES ON tugas_siswa.* TO 'tugas_user'@'localhost';
FLUSH PRIVILEGES;
```
#### Import Schema Database
```bash
# Gunakan file SQL yang disediakan
mysql -u root -p tugas_siswa < database/schema.sql
# Atau gunakan setup otomatis melalui browser
# Akses: http://localhost/tugas/setup.php
```
### 4. Konfigurasi Aplikasi
#### Buat File Config
```bash
# Copy template config
cp config/config.example.php config/config.php
```
#### Edit Konfigurasi Database
```php
```
### 5. Setup Folder Permissions
#### Linux/Unix/Mac
```bash
# Set permission untuk folder uploads
chmod 755 uploads/
chmod 755 uploads/photos/
chmod 755 uploads/avatars/
# Set permission untuk folder logs (jika ada)
chmod 755 logs/
# Set ownership jika diperlukan
chown -R www-data:www-data uploads/
```
#### Windows (XAMPP)
```cmd
# Buat folder uploads jika belum ada
mkdir uploads
mkdir uploads\photos
mkdir uploads\avatars
# Set permission melalui Properties → Security (jika diperlukan)
```
### 6. Konfigurasi Apache
#### Buat .htaccess di Root
```apache
# .htaccess
RewriteEngine On
# Redirect ke folder public jika ada
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]
# Security headers
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
# Cache static files
ExpiresActive on
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
```
#### Konfigurasi Virtual Host (Opsional)
```apache
# httpd-vhosts.conf atau sites-available
ServerName tugas-siswa.local
DocumentRoot "C:/xampp/htdocs/tugas"
ErrorLog "logs/tugas-siswa.error.log"
CustomLog "logs/tugas-siswa.access.log" common
AllowOverride All
Require all granted
```
### 7. Import Data Default
#### Jalankan Seeder
```bash
# Akses melalui browser
http://localhost/tugas/install/seed.php
# Atau jalankan via command line
php install/seed.php
```
#### Data Default yang Dibuat
- Admin user: admin@sekolah.id / admin123
- Guru test: guru@sekolah.id / guru123
- Siswa test: siswa@sekolah.id / siswa123
- Sample kelas dan tugas
### 8. Testing Instalasi
#### Cek Koneksi Database
```bash
# Akses test page
http://localhost/tugas/install/test.php
```
#### Cek Fungsi Upload
```bash
# Test upload functionality
http://localhost/tugas/install/test-upload.php
```
#### Cek Session
```bash
# Test session functionality
http://localhost/tugas/install/test-session.php
```
### 9. First Login
1. Akses aplikasi: `http://localhost/tugas`
2. Login dengan akun admin:
- Email: admin@sekolah.id
- Password: admin123
3. Ganti password default
4. Setup konfigurasi awal melalui Settings
### 10. Post-Installation Setup
#### Konfigurasi Email (Opsional)
```php
// config/mail.php
define('MAIL_HOST', 'smtp.gmail.com');
define('MAIL_PORT', 587);
define('MAIL_USERNAME', 'your-email@gmail.com');
define('MAIL_PASSWORD', 'your-app-password');
define('MAIL_FROM', 'noreply@sekolah.id');
define('MAIL_FROM_NAME', 'Sistem Tugas Siswa');
```
#### Setup Backup Otomatis
```bash
# Tambah ke crontab untuk backup harian
0 2 * * * /usr/bin/php /path/to/tugas/scripts/backup.php
```
#### Setup Log Rotation
```bash
# Tambah ke logrotate.conf
/path/to/tugas/logs/*.log {
daily
missingok
rotate 30
compress
notifempty
create 644 www-data www-data
}
```
## Troubleshooting
### Error Database Connection
```
Error: SQLSTATE[HY000] [2002] Connection refused
```
**Solusi**:
- Pastikan MySQL running
- Cek username/password database
- Cek host dan port database
### Error Permission Denied
```
Warning: move_uploaded_file(): failed to open stream: Permission denied
```
**Solusi**:
- Set permission 755 untuk folder uploads
- Cek ownership folder (www-data di Linux)
### Error Session
```
Warning: session_start(): Cannot send session cache limiter
```
**Solusi**:
- Pastikan tidak ada output sebelum session_start()
- Cek konfigurasi session di php.ini
### Error .htaccess
```
Internal Server Error
```
**Solusi**:
- Pastikan mod_rewrite enabled
- Cek syntax .htaccess
- Cek AllowOverride di Apache config
## Maintenance
### Update Aplikasi
1. Backup database dan files
2. Download versi terbaru
3. Replace files (kecuali config dan uploads)
4. Jalankan script migration jika ada
5. Clear cache jika ada
### Backup Rutin
```bash
# Backup database
mysqldump -u tugas_user -p tugas_siswa > backup_$(date +%Y%m%d).sql
# Backup files
tar -czf backup_files_$(date +%Y%m%d).tar.gz uploads/ config/
```
---
*Terakhir diperbarui: 22 Juli 2025*