Files
ai-stylegallery/prp/deployment-requirements.md
2025-11-11 21:23:00 +01:00

27 KiB

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
  • 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

# 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)

# 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

{
  "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

{
  "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

{
  "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

{
  "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

# 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

# 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)

#!/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

# 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

# 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)
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)
<VirtualHost *:80>
    ServerName your-domain.com
    DocumentRoot /var/www/ai-stylegallery/public

    <Directory /var/www/ai-stylegallery/public>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # 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
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost"
    </FilesMatch>

    # Health check
    <Location "/health">
        Require all granted
        Header set Content-Type "text/plain"
        Header set Cache-Control "no-cache, no-store, must-revalidate"
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/ai-stylegallery_error.log
    CustomLog ${APACHE_LOG_DIR}/ai-stylegallery_access.log combined
</VirtualHost>

Operational Procedures

Database Management

Backup Strategy

# 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

# 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

# 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

// 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

# 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

// 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

# 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

# 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

# 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

# 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

# /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)

# /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

# 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

# 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

# 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

# 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

# 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)

# 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

# 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

#!/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

#!/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

# 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

# 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

# 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

# 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

# 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

# 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

Training Materials

  • Admin Training: Filament admin panel usage
  • Developer Guide: Contributing to the codebase
  • Operations Manual: Day-to-day system management

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

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

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

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

// 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.