# Autonomous College - Deployment Guide

## Production Deployment Checklist

### Pre-Deployment

- [ ] **Environment Setup**
  - [ ] PHP 8.1+ installed
  - [ ] MySQL 8.0+ installed
  - [ ] Apache 2.4+ or Nginx 1.18+ configured
  - [ ] SSL certificate installed
  - [ ] Domain configured

- [ ] **Security Configuration**
  - [ ] Remove debug files (phpinfo.php)
  - [ ] Set APP_DEBUG=false
  - [ ] Configure secure file permissions
  - [ ] Enable HTTPS redirect
  - [ ] Configure security headers

- [ ] **Performance Optimization**
  - [ ] Enable OPcache
  - [ ] Configure Gzip compression
  - [ ] Set up CDN for static assets
  - [ ] Optimize database configuration
  - [ ] Enable Redis for sessions (optional)

### Deployment Steps

#### 1. Server Preparation
```bash
# Update system packages
sudo apt update && sudo apt upgrade -y

# Install required packages
sudo apt install php8.1 php8.1-mysql php8.1-mbstring php8.1-xml php8.1-curl php8.1-gd php8.1-zip php8.1-opcache
sudo apt install mysql-server-8.0 apache2
sudo apt install composer git
```

#### 2. Database Setup
```bash
# Secure MySQL installation
sudo mysql_secure_installation

# Create database and user
mysql -u root -p
CREATE DATABASE autonomous_college CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ac_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON autonomous_college.* TO 'ac_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

# Import database schema
mysql -u ac_user -p autonomous_college < autonomous_college.sql
```

#### 3. Application Deployment
```bash
# Clone repository
git clone https://github.com/autonomous-college/crm-system.git /var/www/autonomous-college
cd /var/www/autonomous-college

# Install dependencies
composer install --no-dev --optimize-autoloader --classmap-authoritative

# Set permissions
sudo chown -R www-data:www-data /var/www/autonomous-college
chmod -R 755 /var/www/autonomous-college
chmod -R 777 uploads/ logs/ cache/

# Copy environment file
cp environment.example .env
nano .env
```

#### 4. Web Server Configuration

##### Apache Configuration
```apache
# /etc/apache2/sites-available/autonomous-college.conf
<VirtualHost *:80>
    ServerName autonomouscollege.edu
    ServerAlias www.autonomouscollege.edu
    DocumentRoot /var/www/autonomous-college
    
    <Directory /var/www/autonomous-college>
        AllowOverride All
        Require all granted
    </Directory>
    
    # 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"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    
    # Logging
    ErrorLog ${APACHE_LOG_DIR}/autonomous-college_error.log
    CustomLog ${APACHE_LOG_DIR}/autonomous-college_access.log combined
</VirtualHost>

# HTTPS redirect
<VirtualHost *:443>
    ServerName autonomouscollege.edu
    ServerAlias www.autonomouscollege.edu
    DocumentRoot /var/www/autonomous-college
    
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/autonomouscollege.edu/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/autonomouscollege.edu/privkey.pem
    
    <Directory /var/www/autonomous-college>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
```

##### Nginx Configuration
```nginx
# /etc/nginx/sites-available/autonomous-college
server {
    listen 80;
    server_name autonomouscollege.edu www.autonomouscollege.edu;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name autonomouscollege.edu www.autonomouscollege.edu;
    root /var/www/autonomous-college;
    index index.php;

    # SSL configuration
    ssl_certificate /etc/letsencrypt/live/autonomouscollege.edu/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/autonomouscollege.edu/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Security headers
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

    # PHP processing
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Static files
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # Main location
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}
```

#### 5. PHP Configuration
```ini
# /etc/php/8.1/apache2/php.ini
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 10M
post_max_size = 10M
max_input_vars = 3000

# OPcache configuration
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

# Security
expose_php = Off
allow_url_fopen = Off
allow_url_include = Off
```

#### 6. MySQL Optimization
```sql
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
query_cache_size = 64M
query_cache_type = 1
max_connections = 200
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
```

### Post-Deployment

#### 1. Security Hardening
```bash
# Remove unnecessary files
rm phpinfo.php
rm test_*.php
rm *.md
rm composer.json
rm composer.lock

# Set secure permissions
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
chmod -R 777 uploads/ logs/ cache/
chmod 600 .env
```

#### 2. Monitoring Setup
```bash
# Install monitoring tools
sudo apt install htop iotop nethogs

# Set up log rotation
sudo nano /etc/logrotate.d/autonomous-college
```

#### 3. Backup Configuration
```bash
# Create backup script
sudo nano /usr/local/bin/backup-autonomous-college.sh
```

```bash
#!/bin/bash
# Backup script for Autonomous College
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/autonomous-college"
DB_NAME="autonomous_college"

# Create backup directory
mkdir -p $BACKUP_DIR

# Database backup
mysqldump -u ac_user -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/db_backup_$DATE.sql

# Files backup
tar -czf $BACKUP_DIR/files_backup_$DATE.tar.gz /var/www/autonomous-college

# Keep only last 7 days of backups
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete

echo "Backup completed: $DATE"
```

#### 4. Performance Monitoring
```bash
# Install monitoring tools
sudo apt install apache2-utils
sudo apt install mysql-client

# Set up monitoring scripts
sudo nano /usr/local/bin/monitor-autonomous-college.sh
```

### Maintenance

#### Daily Tasks
- [ ] Check error logs
- [ ] Monitor disk space
- [ ] Verify backups
- [ ] Check SSL certificate expiry

#### Weekly Tasks
- [ ] Update system packages
- [ ] Review security logs
- [ ] Optimize database
- [ ] Test backup restoration

#### Monthly Tasks
- [ ] Security audit
- [ ] Performance review
- [ ] Update dependencies
- [ ] Review access logs

### Troubleshooting

#### Common Issues

1. **500 Internal Server Error**
   ```bash
   # Check error logs
   tail -f /var/log/apache2/error.log
   
   # Check PHP errors
   tail -f /var/log/php8.1-fpm.log
   ```

2. **Database Connection Issues**
   ```bash
   # Test connection
   mysql -u ac_user -p autonomous_college
   
   # Check MySQL status
   sudo systemctl status mysql
   ```

3. **File Permission Issues**
   ```bash
   # Fix permissions
   sudo chown -R www-data:www-data /var/www/autonomous-college
   chmod -R 755 /var/www/autonomous-college
   ```

4. **Performance Issues**
   ```bash
   # Check system resources
   htop
   iotop
   
   # Check MySQL slow queries
   sudo tail -f /var/log/mysql/slow.log
   ```

### Rollback Procedure

```bash
# Stop services
sudo systemctl stop apache2
sudo systemctl stop mysql

# Restore from backup
tar -xzf /backups/autonomous-college/files_backup_YYYYMMDD_HHMMSS.tar.gz -C /
mysql -u ac_user -p autonomous_college < /backups/autonomous-college/db_backup_YYYYMMDD_HHMMSS.sql

# Restart services
sudo systemctl start mysql
sudo systemctl start apache2
```

### Support Contacts

- **System Administrator**: admin@autonomouscollege.edu
- **Technical Support**: tech@autonomouscollege.edu
- **Emergency Contact**: +1-XXX-XXX-XXXX

### Documentation

- **User Manual**: See USER_MANUAL.md
- **API Documentation**: See API_DOCUMENTATION.md
- **Version Information**: See VERSION_INFO.md
- **Installation Guide**: See INSTALLATION.md
