# Deployment Requirements Specification ## Overview Complete deployment guide for AI StyleGallery, including system requirements, dependency management, environment configuration, and operational procedures for production deployment. ## System Requirements ### Server Requirements #### Minimum Specifications - **Operating System**: Linux (Ubuntu 20.04+, CentOS 8+, Debian 11+) - **Web Server**: Apache 2.4+ or Nginx 1.20+ - **Database**: SQLite 3.8+ (default) or MySQL 8.0+/PostgreSQL 13+ - **PHP Version**: 8.3+ with extensions - **Memory**: 2GB RAM minimum, 4GB recommended - **Storage**: 10GB minimum, 50GB recommended - **Network**: Stable internet connection for AI services #### Recommended Production Setup - **Operating System**: Ubuntu 22.04 LTS - **Web Server**: Nginx 1.24+ with PHP-FPM - **Database**: PostgreSQL 15+ for production workloads - **Redis**: 7.0+ for caching and sessions - **SSL/TLS**: Let's Encrypt or commercial certificate ### PHP Requirements #### Required Extensions ```bash # Core extensions php8.3-cli php8.3-common php8.3-fpm php8.3-mysql # or php8.3-pgsql for PostgreSQL php8.3-sqlite3 php8.3-redis php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-bcmath php8.3-intl # Development extensions (recommended) php8.3-xdebug # For development only ``` #### PHP Configuration (`php.ini`) ```ini # Performance settings memory_limit = 256M max_execution_time = 300 max_input_time = 300 upload_max_filesize = 10M post_max_size = 12M # Error handling display_errors = Off display_startup_errors = Off error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT log_errors = On error_log = /var/log/php/error.log # Security expose_php = Off allow_url_fopen = Off allow_url_include = Off # Session security session.cookie_httponly = 1 session.cookie_secure = 1 session.use_strict_mode = 1 # OPcache (recommended for production) opcache.enable = 1 opcache.memory_consumption = 128 opcache.max_accelerated_files = 10000 opcache.validate_timestamps = 1 ``` ## Dependency Management ### PHP Dependencies (Composer) #### Production Dependencies ```json { "require": { "php": "^8.3", "laravel/framework": "^12.0", "laravel/tinker": "^2.10", "filament/filament": "^3.3", "laravel/sanctum": "^4.0", "predis/predis": "^2.0", "nesbot/carbon": "^3.0", "ramsey/uuid": "^4.0", "guzzlehttp/guzzle": "^7.0" } } ``` #### Development Dependencies ```json { "require-dev": { "phpunit/phpunit": "^12.0", "laravel/pint": "^1.0", "laravel/sail": "^1.0", "spatie/laravel-ignition": "^2.0", "fakerphp/faker": "^1.23", "laravel/dusk": "^8.0" } } ``` ### Node.js Dependencies (npm/yarn) #### Production Dependencies ```json { "dependencies": { "axios": "^1.11.0", "vue": "^3.5.0", "@inertiajs/vue3": "^1.3.0", "tailwindcss": "^3.4.0", "autoprefixer": "^10.4.0", "postcss": "^8.5.0", "@fortawesome/fontawesome-svg-core": "^7.0.0", "@fortawesome/free-solid-svg-icons": "^7.0.0", "@fortawesome/vue-fontawesome": "^3.1.0", "vanilla-lazyload": "^19.1.0" } } ``` #### Development Dependencies ```json { "devDependencies": { "@vitejs/plugin-vue": "^5.2.0", "laravel-vite-plugin": "^1.0.0", "vite": "^5.4.0", "@tailwindcss/forms": "^0.5.0", "laravel-echo": "^2.1.0", "pusher-js": "^8.4.0" } } ``` ## Environment Configuration ### Environment Variables (`.env`) #### Required Variables ```bash # Application APP_NAME="AI StyleGallery" APP_ENV=production APP_KEY=base64:your-generated-app-key APP_DEBUG=false APP_URL=https://your-domain.com # Database (SQLite default) DB_CONNECTION=sqlite DB_DATABASE=/path/to/storage/database.sqlite # Alternative Database (MySQL/PostgreSQL) # DB_CONNECTION=mysql # DB_HOST=127.0.0.1 # DB_PORT=3306 # DB_DATABASE=ai_stylegallery # DB_USERNAME=your-db-user # DB_PASSWORD=your-db-password # Redis (recommended for production) REDIS_CLIENT=phpredis REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 # Mail Configuration MAIL_MAILER=smtp MAIL_HOST=smtp.your-provider.com MAIL_PORT=587 MAIL_USERNAME=your-email@domain.com MAIL_PASSWORD=your-app-password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=noreply@your-domain.com MAIL_FROM_NAME="${APP_NAME}" # Broadcasting (for real-time features) BROADCAST_CONNECTION=pusher PUSHER_APP_ID=your-pusher-id PUSHER_APP_KEY=your-pusher-key PUSHER_APP_SECRET=your-pusher-secret PUSHER_HOST=api.pusherapp.com PUSHER_PORT=443 PUSHER_SCHEME=https PUSHER_APP_CLUSTER=your-cluster # Queue (for background processing) QUEUE_CONNECTION=database # Filesystem FILESYSTEM_DISK=local # Sanctum (API authentication) SANCTUM_STATEFUL_DOMAINS=your-domain.com ``` #### AI Provider Configuration ```bash # ComfyUI Configuration COMFYUI_API_URL=https://your-comfyui-server.com COMFYUI_API_KEY=your-comfyui-api-key COMFYUI_TIMEOUT=180 COMFYUI_MAX_RETRIES=3 # RunwareAI Configuration RUNWAREAI_API_URL=https://api.runwareai.com RUNWAREAI_API_TOKEN=your-runwareai-token RUNWAREAI_TIMEOUT=60 RUNWAREAI_RATE_LIMIT_DELAY=1000 # Additional providers can be added here ``` ## Installation and Setup ### Automated Deployment Script #### Deploy Script (`deploy.sh`) ```bash #!/bin/bash set -e # Exit on any error echo "๐Ÿš€ Starting AI StyleGallery deployment..." # Variables APP_DIR="/var/www/ai-stylegallery" BACKUP_DIR="/var/backups/ai-stylegallery" TIMESTAMP=$(date +%Y%m%d_%H%M%S) # Create backup echo "๐Ÿ“ฆ Creating backup..." mkdir -p "$BACKUP_DIR" tar -czf "$BACKUP_DIR/backup_$TIMESTAMP.tar.gz" -C "$(dirname "$APP_DIR")" "$(basename "$APP_DIR")" # Navigate to app directory cd "$APP_DIR" # Backup current .env cp .env ".env.backup.$TIMESTAMP" # Pull latest changes echo "๐Ÿ“ฅ Pulling latest changes..." git pull origin main # Install PHP dependencies echo "๐Ÿ“ฆ Installing PHP dependencies..." composer install --no-dev --optimize-autoloader # Install Node.js dependencies echo "๐Ÿ“ฆ Installing Node.js dependencies..." npm ci # Build assets echo "๐Ÿ”จ Building frontend assets..." npm run build # Run database migrations echo "๐Ÿ—„๏ธ Running database migrations..." php artisan migrate --force # Clear caches echo "๐Ÿงน Clearing caches..." php artisan config:clear php artisan route:clear php artisan view:clear php artisan event:clear # Optimize application echo "โšก Optimizing application..." php artisan optimize # Set proper permissions echo "๐Ÿ” Setting permissions..." chown -R www-data:www-data storage bootstrap/cache chmod -R 755 storage bootstrap/cache chmod -R 644 storage/logs/*.log # Restart web server echo "๐Ÿ”„ Restarting web server..." sudo systemctl reload nginx sudo systemctl restart php8.3-fpm # Run health check echo "๐Ÿฅ Running health check..." sleep 10 curl -f https://your-domain.com/api/health || exit 1 echo "โœ… Deployment completed successfully!" echo "๐Ÿ“‹ Backup saved as: $BACKUP_DIR/backup_$TIMESTAMP.tar.gz" ``` ### Manual Installation Steps #### 1. System Preparation ```bash # Update system packages sudo apt update && sudo apt upgrade -y # Install required software sudo apt install -y nginx php8.3 php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-sqlite3 php8.3-redis php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-bcmath php8.3-intl # Install Composer curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer # Install Node.js and npm curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs # Install Redis sudo apt install -y redis-server # Start and enable Redis sudo systemctl start redis-server sudo systemctl enable redis-server ``` #### 2. Application Setup ```bash # Create application directory sudo mkdir -p /var/www/ai-stylegallery sudo chown www-data:www-data /var/www/ai-stylegallery # Clone repository (or upload files) git clone https://github.com/your-repo/ai-stylegallery.git /var/www/ai-stylegallery cd /var/www/ai-stylegallery # Install PHP dependencies composer install --no-dev # Install Node.js dependencies npm install # Copy environment file cp .env.example .env # Generate application key php artisan key:generate # Configure database touch database/database.sqlite php artisan migrate # Build frontend assets npm run build # Set permissions sudo chown -R www-data:www-data storage bootstrap/cache chmod -R 755 storage bootstrap/cache ``` #### 3. Web Server Configuration ##### Nginx Configuration (`/etc/nginx/sites-available/ai-stylegallery`) ```nginx server { listen 80; server_name your-domain.com; root /var/www/ai-stylegallery/public; # Security headers add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; # Handle static assets location / { try_files $uri $uri/ /index.php?$query_string; } # PHP processing location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 300; } # Static assets caching location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 1y; add_header Cache-Control "public, immutable"; try_files $uri @proxy; } # Deny access to sensitive files location ~ /\.ht { deny all; } # API routes (optional, for better handling) location /api/ { try_files $uri $uri/ /index.php?$query_string; } # Health check endpoint location /health { access_log off; return 200 "healthy\n"; add_header Content-Type text/plain; } } server { listen 443 ssl http2; server_name your-domain.com; # SSL configuration... # Same directives as above... } ``` ##### Apache Configuration (Alternative) ```apache ServerName your-domain.com DocumentRoot /var/www/ai-stylegallery/public Options -Indexes +FollowSymLinks AllowOverride All Require all granted # Security headers Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set X-XSS-Protection "1; mode=block" Header always set Referrer-Policy "strict-origin-when-cross-origin" # Handle PHP files SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost" # Health check Require all granted Header set Content-Type "text/plain" Header set Cache-Control "no-cache, no-store, must-revalidate" ErrorLog ${APACHE_LOG_DIR}/ai-stylegallery_error.log CustomLog ${APACHE_LOG_DIR}/ai-stylegallery_access.log combined ``` ## Operational Procedures ### Database Management #### Backup Strategy ```bash # Daily database backup #!/bin/bash BACKUP_DIR="/var/backups/ai-stylegallery" mkdir -p "$BACKUP_DIR" # SQLite backup (default) cp /var/www/ai-stylegallery/database/database.sqlite "$BACKUP_DIR/db_$(date +%Y%m%d_%H%M%S).sqlite" # MySQL backup (if using MySQL) # mysqldump -h localhost -u username -p password ai_stylegallery > "$BACKUP_DIR/db_$(date +%Y%m%d_%H%M%S).sql" # Compress and cleanup old backups find "$BACKUP_DIR" -name "db_*" -type f -mtime +7 -delete ``` #### Migration Management ```bash # Run migrations php artisan migrate # Rollback if needed php artisan migrate:rollback # Check migration status php artisan migrate:status # Seed database (for initial data) php artisan db:seed ``` ### File Storage Management #### Storage Structure ``` /var/www/ai-stylegallery/ โ”œโ”€โ”€ storage/ โ”‚ โ”œโ”€โ”€ app/ โ”‚ โ”‚ โ”œโ”€โ”€ public/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ uploads/ # User uploaded images โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ style_previews/ # AI style preview images โ”‚ โ”‚ โ””โ”€โ”€ .gitignore โ”‚ โ”œโ”€โ”€ framework/ โ”‚ โ”‚ โ”œโ”€โ”€ cache/ โ”‚ โ”‚ โ”œโ”€โ”€ sessions/ โ”‚ โ”‚ โ””โ”€โ”€ views/ โ”‚ โ”œโ”€โ”€ logs/ # Application logs โ”‚ โ””โ”€โ”€ .gitignore ``` #### Storage Permissions ```bash # Set proper ownership sudo chown -R www-data:www-data /var/www/ai-stylegallery/storage # Set proper permissions sudo chmod -R 755 /var/www/ai-stylegallery/storage sudo chmod -R 644 /var/www/ai-stylegallery/storage/logs/*.log # Create symbolic link (if needed) php artisan storage:link ``` ### Log Management #### Log Configuration ```php // config/logging.php 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'daily'], ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), 'days' => 14, ], ], ``` #### Log Rotation ```bash # Logrotate configuration (/etc/logrotate.d/ai-stylegallery) /var/www/ai-stylegallery/storage/logs/*.log { daily rotate 30 compress delaycompress missingok notifempty create 644 www-data www-data postrotate systemctl reload nginx endscript } ``` ### Monitoring and Health Checks #### Health Check Endpoint ```php // routes/web.php Route::get('/health', function () { try { // Database check DB::connection()->getPdo(); // Storage check Storage::disk('public')->exists('test'); // Cache check Cache::store('redis')->put('health', 'ok', 10); return response()->json([ 'status' => 'healthy', 'timestamp' => now()->toISOString(), 'version' => config('app.version'), ]); } catch (Exception $e) { return response()->json([ 'status' => 'unhealthy', 'error' => $e->getMessage(), 'timestamp' => now()->toISOString(), ], 503); } }); ``` #### Monitoring Setup ```bash # Install monitoring tools sudo apt install -y htop iotop nethogs # Set up log monitoring sudo apt install -y logwatch # Configure process monitoring sudo apt install -y monit # Monit configuration for AI StyleGallery # /etc/monit/conf.d/ai-stylegallery check process php-fpm with pidfile /var/run/php/php8.3-fpm.pid start program = "/etc/init.d/php8.3-fpm start" stop program = "/etc/init.d/php8.3-fpm stop" if cpu > 60% for 2 cycles then alert if memory usage > 80% for 5 cycles then alert check process nginx with pidfile /var/run/nginx.pid start program = "/etc/init.d/nginx start" stop program = "/etc/init.d/nginx stop" if cpu > 60% for 2 cycles then alert if memory usage > 80% for 5 cycles then alert ``` ## Security Hardening ### Firewall Configuration ```bash # UFW (Uncomplicated Firewall) sudo ufw allow 'OpenSSH' sudo ufw allow 'Nginx Full' sudo ufw --force enable # Advanced firewall rules sudo ufw allow from your-admin-ip to any port 22 sudo ufw allow from your-office-ip-range to any port 80 sudo ufw allow from your-office-ip-range to any port 443 ``` ### SSL/TLS Setup ```bash # Install Certbot for Let's Encrypt sudo apt install -y certbot python3-certbot-nginx # Generate SSL certificate sudo certbot --nginx -d your-domain.com -d www.your-domain.com # Auto-renewal (add to crontab) sudo crontab -e # Add: 0 12 * * * /usr/bin/certbot renew --quiet ``` ### Security Updates ```bash # Automated security updates sudo apt install -y unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades # Manual security updates sudo apt update && sudo apt upgrade -y sudo apt autoremove -y sudo apt autoclean ``` ## Performance Optimization ### PHP-FPM Optimization ```ini # /etc/php/8.3/fpm/pool.d/www.conf pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 # Process manager settings pm.process_idle_timeout = 10s pm.max_requests = 1000 # Memory optimization php_admin_value[memory_limit] = 256M php_admin_flag[opcache.enable] = 1 ``` ### MySQL Optimization (if using MySQL) ```ini # /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 query_cache_size = 0 query_cache_type = 0 innodb_flush_method = O_DIRECT # Connection settings max_connections = 100 wait_timeout = 28800 interactive_timeout = 28800 ``` ### Nginx Optimization ```nginx # Performance optimizations worker_processes auto; worker_rlimit_nofile 1024; events { worker_connections 1024; use epoll; multi_accept on; } http { # Caching proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; # Gzip compression gzip on; gzip_vary on; gzip_min_length 1024; gzip_proxied expired no-cache no-store private must-revalidate auth; gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json; # Rate limiting limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; limit_req_zone $binary_remote_addr zone=upload:10m rate=2r/s; } ``` ## Troubleshooting ### Common Issues #### Application Not Loading ```bash # Check PHP-FPM status sudo systemctl status php8.3-fpm # Check Nginx status sudo systemctl status nginx # Check application logs tail -f /var/www/ai-stylegallery/storage/logs/laravel.log # Test PHP processing php -f /var/www/ai-stylegallery/public/index.php ``` #### Database Connection Issues ```bash # Test database connection php artisan tinker --execute="DB::connection()->getPdo(); echo 'Database connected';" # Check database file permissions (SQLite) ls -la /var/www/ai-stylegallery/database/database.sqlite # Check database configuration php artisan config:cache php artisan config:clear ``` #### File Upload Issues ```bash # Check storage permissions ls -la /var/www/ai-stylegallery/storage/app/public/ # Check PHP upload settings php -i | grep upload # Test file upload php -r "move_uploaded_file('/tmp/test.txt', '/var/www/ai-stylegallery/storage/app/public/uploads/test.txt');" ``` #### AI Service Connection Issues ```bash # Test ComfyUI connection curl -X GET "https://your-comfyui-server.com/queue" # Test RunwareAI connection curl -X POST "https://api.runwareai.com" \ -H "Authorization: Bearer your-token" \ -H "Content-Type: application/json" \ -d '{"taskType": "authentication", "apiKey": "your-token"}' # Check API provider configuration php artisan tinker --execute="App\Models\ApiProvider::all()" ``` ### Debug Mode #### Enable Debug Mode (Development Only) ```bash # Edit .env file APP_DEBUG=true LOG_LEVEL=debug # Clear config cache php artisan config:clear # Check detailed error logs tail -f /var/www/ai-stylegallery/storage/logs/laravel.log ``` #### Performance Profiling ```bash # Enable query logging php artisan tinker --execute="DB::enableQueryLog();" # Profile application performance php artisan tinker --execute="dump(app()->getLoadedProviders());" # Memory usage php -r "echo 'Memory usage: ' . memory_get_peak_usage(true) / 1024 / 1024 . 'MB';" ``` ## Backup and Recovery ### Complete System Backup ```bash #!/bin/bash # Full system backup script BACKUP_DIR="/var/backups/ai-stylegallery" APP_DIR="/var/www/ai-stylegallery" TIMESTAMP=$(date +%Y%m%d_%H%M%S) # Create backup directory mkdir -p "$BACKUP_DIR" # Backup application files tar -czf "$BACKUP_DIR/app_$TIMESTAMP.tar.gz" -C "$(dirname "$APP_DIR")" "$(basename "$APP_DIR")" # Backup database cp "$APP_DIR/database/database.sqlite" "$BACKUP_DIR/db_$TIMESTAMP.sqlite" # Backup Nginx configuration cp /etc/nginx/sites-available/ai-stylegallery "$BACKUP_DIR/nginx_config_$TIMESTAMP" # Backup SSL certificates cp -r /etc/letsencrypt/live/your-domain.com "$BACKUP_DIR/ssl_$TIMESTAMP" # Cleanup old backups (keep 7 days) find "$BACKUP_DIR" -type f -mtime +7 -delete echo "Backup completed: $BACKUP_DIR/backup_$TIMESTAMP" ``` ### Recovery Procedure ```bash #!/bin/bash # Recovery script BACKUP_DIR="/var/backups/ai-stylegallery" APP_DIR="/var/www/ai-stylegallery" # Stop services sudo systemctl stop nginx php8.3-fpm # Restore application files LATEST_BACKUP=$(ls -t "$BACKUP_DIR/app_"*.tar.gz | head -1) sudo tar -xzf "$LATEST_BACKUP" -C "$(dirname "$APP_DIR")" # Restore database LATEST_DB=$(ls -t "$BACKUP_DIR/db_"*.sqlite | head -1) cp "$LATEST_DB" "$APP_DIR/database/database.sqlite" # Restore Nginx configuration LATEST_NGINX=$(ls -t "$BACKUP_DIR/nginx_config_"* | head -1) sudo cp "$LATEST_NGINX" /etc/nginx/sites-available/ai-stylegallery # Set permissions sudo chown -R www-data:www-data "$APP_DIR" sudo chmod -R 755 "$APP_DIR/storage" "$APP_DIR/bootstrap/cache" # Start services sudo systemctl start php8.3-fpm nginx # Test recovery curl -f https://your-domain.com/health || exit 1 echo "Recovery completed successfully!" ``` ## Scaling Considerations ### Horizontal Scaling #### Load Balancer Setup ```nginx # Load balancer configuration upstream ai-stylegallery_backend { server 192.168.1.10:80; server 192.168.1.11:80; server 192.168.1.12:80; # Health checks keepalive 32; } server { listen 80; server_name your-domain.com; location / { proxy_pass http://ai-stylegallery_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Health check proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } } ``` #### Shared Storage ```bash # NFS shared storage for uploads sudo apt install -y nfs-kernel-server sudo mkdir -p /var/nfs/ai-stylegallery sudo chown www-data:www-data /var/nfs/ai-stylegallery # Mount on web servers sudo mount -t nfs storage-server:/var/nfs/ai-stylegallery /var/www/ai-stylegallery/storage/app/public ``` ### Database Scaling #### Read Replicas ```bash # MySQL read replica setup CHANGE MASTER TO MASTER_HOST='master-db-server', MASTER_USER='replica_user', MASTER_PASSWORD='replica_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; ``` #### Redis Cluster ```bash # Redis cluster setup for horizontal scaling redis-cli --cluster create \ 192.168.1.10:6379 \ 192.168.1.11:6379 \ 192.168.1.12:6379 \ --cluster-replicas 0 ``` ## Maintenance Procedures ### Regular Maintenance Tasks #### Daily Tasks - Monitor system resources (CPU, memory, disk) - Check application logs for errors - Verify AI service connectivity - Test backup restoration #### Weekly Tasks - Review and rotate application logs - Check for security updates - Monitor storage usage and cleanup - Test full application functionality #### Monthly Tasks - Full system backup and verification - Security audit and penetration testing - Performance analysis and optimization - Dependency updates and testing ### Emergency Procedures #### Service Outage Response ```bash # Quick health check curl -f https://your-domain.com/health # Check service status sudo systemctl status nginx php8.3-fpm # View recent logs sudo tail -f /var/log/nginx/error.log sudo tail -f /var/www/ai-stylegallery/storage/logs/laravel.log # Restart services if needed sudo systemctl restart nginx php8.3-fpm ``` #### Data Recovery ```bash # From backup cd /var/backups/ai-stylegallery LATEST_BACKUP=$(ls -t *.tar.gz | head -1) sudo tar -xzf "$LATEST_BACKUP" -C /var/www/ai-stylegallery --strip-components=1 # Restore database LATEST_DB=$(ls -t db_*.sqlite | head -1) cp "$LATEST_DB" /var/www/ai-stylegallery/database/database.sqlite ``` ## Support and Documentation ### Documentation Locations - **API Documentation**: `/prp/api-specification.md` - **Component Documentation**: `/prp/frontend-components.md` - **Deployment Guide**: This document - **User Manual**: Application help system ### Support Contacts - **Technical Support**: dev-team@your-domain.com - **System Administrator**: admin@your-domain.com - **Security Issues**: security@your-domain.com ### Training Materials - **Admin Training**: Filament admin panel usage - **Developer Guide**: Contributing to the codebase - **Operations Manual**: Day-to-day system management ## Compliance and Legal ### Data Protection - **GDPR Compliance**: User data handling procedures - **Data Retention**: Configurable data retention policies - **Privacy Policy**: User data collection and usage transparency ### Security Compliance - **SSL/TLS**: HTTPS encryption for all communications - **Data Encryption**: Sensitive data encryption at rest - **Access Logging**: Comprehensive audit trails ### Licensing - **Application License**: Open source or commercial license - **Third-party Libraries**: Compliance with library licenses - **AI Service Terms**: Compliance with AI provider terms of service ## Future Deployment Enhancements ### Containerization (Docker) #### Dockerfile ```dockerfile FROM php:8.3-fpm # Install system dependencies RUN apt-get update && apt-get install -y \ git curl libpng-dev libonig-dev libxml2-dev libzip-dev zip unzip \ && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip # Install Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Copy application code WORKDIR /var/www/ai-stylegallery COPY . . # Install dependencies RUN composer install --no-dev --optimize-autoloader # Set permissions RUN chown -R www-data:www-data storage bootstrap/cache ``` #### Docker Compose ```yaml version: '3.8' services: web: build: . ports: - "80:80" volumes: - ./storage/app/public:/var/www/ai-stylegallery/storage/app/public depends_on: - redis - db redis: image: redis:7-alpine db: image: postgres:15-alpine environment: POSTGRES_DB: ai_stylegallery POSTGRES_USER: laravel POSTGRES_PASSWORD: password ``` ### CI/CD Pipeline #### GitHub Actions Workflow ```yaml name: Deploy to Production on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.3' - name: Install Dependencies run: composer install --no-dev - name: Run Tests run: php artisan test - name: Deploy to Server uses: appleboy/ssh-action@master with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: | cd /var/www/ai-stylegallery ./deploy.sh ``` ### Monitoring and Alerting #### Prometheus Metrics ```php // Prometheus metrics endpoint Route::get('/metrics', function () { $metrics = [ 'app_requests_total' => \DB::table('access_logs')->count(), 'app_users_total' => \App\Models\User::count(), 'app_images_total' => \App\Models\Image::count(), 'app_processing_time' => \Cache::get('avg_processing_time', 0), ]; return response(implode("\n", array_map( fn($key, $value) => "{$key} {$value}", array_keys($metrics), array_values($metrics) )), 200, ['Content-Type' => 'text/plain']); }); ``` #### Grafana Dashboard - Application performance metrics - AI service response times - User activity and engagement - System resource utilization - Error rates and alerting This comprehensive deployment guide provides all necessary information for successfully deploying and maintaining the AI StyleGallery application in production environments.