Resolved multiple critical discovery system issues: ## Discovery System Fixes - Fixed console commands not being discovered on first run - Implemented fallback discovery for empty caches - Added context-aware caching with separate cache keys - Fixed object serialization preventing __PHP_Incomplete_Class ## Cache System Improvements - Smart caching that only caches meaningful results - Separate caches for different execution contexts (console, web, test) - Proper array serialization/deserialization for cache compatibility - Cache hit logging for debugging and monitoring ## Object Serialization Fixes - Fixed DiscoveredAttribute serialization with proper string conversion - Sanitized additional data to prevent object reference issues - Added fallback for corrupted cache entries ## Performance & Reliability - All 69 console commands properly discovered and cached - 534 total discovery items successfully cached and restored - No more __PHP_Incomplete_Class cache corruption - Improved error handling and graceful fallbacks ## Testing & Quality - Fixed code style issues across discovery components - Enhanced logging for better debugging capabilities - Improved cache validation and error recovery Ready for production deployment with stable discovery system. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
164 lines
4.0 KiB
Plaintext
164 lines
4.0 KiB
Plaintext
# Production Environment Configuration Template
|
|
# Copy to .env.production and update with real values
|
|
|
|
# Project Configuration
|
|
COMPOSE_PROJECT_NAME=michaelschiemer
|
|
DOMAIN_NAME=michaelschiemer.de
|
|
|
|
# Environment
|
|
APP_ENV=production
|
|
APP_DEBUG=false
|
|
APP_TIMEZONE=Europe/Berlin
|
|
APP_LOCALE=de
|
|
|
|
# SSL/HTTPS Configuration
|
|
APP_SSL_ENABLED=true
|
|
SSL_CERT_PATH=/etc/letsencrypt/live/michaelschiemer.de
|
|
FORCE_HTTPS=true
|
|
|
|
# Database Configuration (Production)
|
|
DB_DRIVER=mysql
|
|
DB_HOST=db
|
|
DB_PORT=3306
|
|
DB_DATABASE=*** REQUIRED ***
|
|
DB_USERNAME=*** REQUIRED ***
|
|
DB_PASSWORD=*** REQUIRED ***
|
|
DB_ROOT_PASSWORD=*** REQUIRED ***
|
|
DB_CHARSET=utf8mb4
|
|
DB_COLLATION=utf8mb4_unicode_ci
|
|
|
|
# Redis Configuration
|
|
REDIS_HOST=redis
|
|
REDIS_PORT=6379
|
|
REDIS_PASSWORD=*** REQUIRED ***
|
|
REDIS_DATABASE=0
|
|
REDIS_PREFIX=michaelschiemer_prod_
|
|
|
|
# Session Configuration (Production Security)
|
|
SESSION_DRIVER=redis
|
|
SESSION_LIFETIME=120
|
|
SESSION_ENCRYPT=true
|
|
SESSION_SECURE_COOKIE=true
|
|
SESSION_HTTP_ONLY=true
|
|
SESSION_SAME_SITE=strict
|
|
|
|
# Session Fingerprinting (Production Security)
|
|
SESSION_FINGERPRINT_STRICT=true
|
|
SESSION_FINGERPRINT_USER_AGENT=true
|
|
SESSION_FINGERPRINT_ACCEPT_LANGUAGE=true
|
|
SESSION_FINGERPRINT_IP_PREFIX=true
|
|
SESSION_FINGERPRINT_THRESHOLD=0.8
|
|
|
|
# Cache Configuration
|
|
CACHE_DRIVER=redis
|
|
CACHE_TTL=3600
|
|
CACHE_PREFIX=michaelschiemer_cache_prod_
|
|
|
|
# Queue Configuration
|
|
QUEUE_DRIVER=redis
|
|
QUEUE_CONNECTION=redis
|
|
QUEUE_PREFIX=michaelschiemer_queue_prod_
|
|
WORKER_QUEUE=production
|
|
WORKER_TIMEOUT=300
|
|
WORKER_MEMORY_LIMIT=512
|
|
WORKER_SLEEP=1
|
|
WORKER_TRIES=5
|
|
WORKER_BATCH_SIZE=10
|
|
|
|
# Mail Configuration (Production)
|
|
MAIL_DRIVER=*** REQUIRED ***
|
|
MAIL_HOST=*** REQUIRED ***
|
|
MAIL_PORT=*** REQUIRED ***
|
|
MAIL_USERNAME=*** REQUIRED ***
|
|
MAIL_PASSWORD=*** REQUIRED ***
|
|
MAIL_ENCRYPTION=tls
|
|
MAIL_FROM_ADDRESS=kontakt@michaelschiemer.de
|
|
MAIL_FROM_NAME="Michael Schiemer"
|
|
|
|
# Logging Configuration (Production)
|
|
LOG_CHANNEL=stack
|
|
LOG_LEVEL=warning
|
|
LOG_STACK_CHANNELS=single,syslog
|
|
LOG_ROTATE_DAYS=30
|
|
LOG_MAX_FILES=10
|
|
|
|
# External APIs (Production)
|
|
SHOPIFY_WEBHOOK_SECRET=*** REQUIRED ***
|
|
RAPIDMAIL_USERNAME=*** REQUIRED ***
|
|
RAPIDMAIL_PASSWORD=*** REQUIRED ***
|
|
RAPIDMAIL_TEST_MODE=false
|
|
|
|
# Analytics Configuration (Production)
|
|
ANALYTICS_ENABLED=true
|
|
ANALYTICS_TRACK_PAGE_VIEWS=true
|
|
ANALYTICS_TRACK_API_CALLS=true
|
|
ANALYTICS_TRACK_USER_ACTIONS=true
|
|
ANALYTICS_TRACK_ERRORS=true
|
|
ANALYTICS_TRACK_PERFORMANCE=true
|
|
|
|
# Monitoring & Health Checks
|
|
PROMETHEUS_ENABLED=true
|
|
PROMETHEUS_PORT=9090
|
|
GRAFANA_ADMIN_PASSWORD=*** REQUIRED ***
|
|
|
|
# Security Configuration
|
|
APP_KEY=*** REQUIRED - Generate with: openssl rand -base64 32 ***
|
|
CSRF_TOKEN_LIFETIME=7200
|
|
RATE_LIMIT_PER_MINUTE=60
|
|
MAX_LOGIN_ATTEMPTS=5
|
|
LOGIN_LOCKOUT_DURATION=900
|
|
|
|
# Performance Configuration (Production)
|
|
PHP_MEMORY_LIMIT=512M
|
|
PHP_MAX_EXECUTION_TIME=30
|
|
PHP_OPCACHE_ENABLE=1
|
|
PHP_OPCACHE_MEMORY_CONSUMPTION=256
|
|
PHP_OPCACHE_MAX_ACCELERATED_FILES=20000
|
|
PHP_OPCACHE_REVALIDATE_FREQ=0
|
|
PHP_OPCACHE_VALIDATE_TIMESTAMPS=0
|
|
PHP_REALPATH_CACHE_SIZE=4M
|
|
PHP_REALPATH_CACHE_TTL=3600
|
|
|
|
# Nginx Configuration (Production)
|
|
NGINX_WORKER_PROCESSES=4
|
|
NGINX_WORKER_CONNECTIONS=2048
|
|
NGINX_KEEPALIVE_TIMEOUT=65
|
|
NGINX_CLIENT_MAX_BODY_SIZE=50m
|
|
|
|
# Database Performance (Production)
|
|
MYSQL_INNODB_BUFFER_POOL_SIZE=1G
|
|
MYSQL_INNODB_LOG_FILE_SIZE=256M
|
|
MYSQL_MAX_CONNECTIONS=100
|
|
MYSQL_QUERY_CACHE_SIZE=0
|
|
|
|
# Backup Configuration
|
|
BACKUP_ENABLED=true
|
|
BACKUP_SCHEDULE=0 2 * * *
|
|
BACKUP_RETENTION_DAYS=30
|
|
BACKUP_S3_BUCKET=*** REQUIRED IF USING S3 ***
|
|
BACKUP_S3_ACCESS_KEY=*** REQUIRED IF USING S3 ***
|
|
BACKUP_S3_SECRET_KEY=*** REQUIRED IF USING S3 ***
|
|
|
|
# SSL/TLS Configuration
|
|
SSL_PROTOCOLS=TLSv1.2 TLSv1.3
|
|
SSL_CIPHERS=ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
|
|
SSL_PREFER_SERVER_CIPHERS=off
|
|
SSL_SESSION_CACHE_SIZE=10m
|
|
SSL_SESSION_TIMEOUT=10m
|
|
|
|
# Container User IDs (Production)
|
|
UID=33
|
|
GID=33
|
|
|
|
# Restart Policy
|
|
RESTART_POLICY=always
|
|
|
|
# Resource Limits (Production)
|
|
PHP_MEMORY_LIMIT_DOCKER=2G
|
|
PHP_CPU_LIMIT=2.0
|
|
NGINX_MEMORY_LIMIT_DOCKER=256M
|
|
NGINX_CPU_LIMIT=0.5
|
|
DB_MEMORY_LIMIT_DOCKER=2G
|
|
DB_CPU_LIMIT=2.0
|
|
REDIS_MEMORY_LIMIT_DOCKER=1G
|
|
REDIS_CPU_LIMIT=0.5 |