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>
606 lines
12 KiB
Markdown
606 lines
12 KiB
Markdown
# Troubleshooting Guide
|
|
|
|
This guide helps you diagnose and fix common deployment issues for the Custom PHP Framework.
|
|
|
|
## Project Information
|
|
- **Domain**: michaelschiemer.de
|
|
- **Email**: kontakt@michaelschiemer.de
|
|
- **PHP Version**: 8.4
|
|
|
|
## Quick Diagnostics
|
|
|
|
### System Status Check
|
|
|
|
```bash
|
|
# Check overall deployment status
|
|
make status ENV=staging
|
|
|
|
# Run health checks
|
|
make health ENV=production
|
|
|
|
# Check prerequisites
|
|
make check-prerequisites
|
|
|
|
# Validate configuration
|
|
make validate-config ENV=production
|
|
```
|
|
|
|
### Log Investigation
|
|
|
|
```bash
|
|
# View application logs
|
|
make logs ENV=staging
|
|
|
|
# Infrastructure logs
|
|
tail -f deployment/infrastructure/logs/ansible.log
|
|
|
|
# Docker container logs
|
|
docker-compose logs --tail=100 -f php
|
|
docker-compose logs --tail=100 -f nginx
|
|
docker-compose logs --tail=100 -f db
|
|
```
|
|
|
|
## Common Issues and Solutions
|
|
|
|
### 1. Setup and Prerequisites
|
|
|
|
#### Issue: Dependencies Not Installed
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
command not found: docker
|
|
command not found: ansible-playbook
|
|
```
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Run setup script
|
|
./setup.sh
|
|
|
|
# Or install manually
|
|
sudo apt-get install docker.io docker-compose ansible # Ubuntu/Debian
|
|
brew install docker ansible # macOS
|
|
```
|
|
|
|
#### Issue: Docker Permission Denied
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
Got permission denied while trying to connect to the Docker daemon socket
|
|
```
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Add user to docker group
|
|
sudo usermod -aG docker $USER
|
|
|
|
# Log out and back in, or start new shell
|
|
newgrp docker
|
|
|
|
# Test Docker access
|
|
docker ps
|
|
```
|
|
|
|
#### Issue: SSH Key Authentication
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
Permission denied (publickey)
|
|
```
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Generate SSH keys if not exists
|
|
ssh-keygen -t ed25519 -C "deployment@michaelschiemer.de"
|
|
|
|
# Add public key to target server
|
|
ssh-copy-id user@your-server.com
|
|
|
|
# Or manually copy key
|
|
cat ~/.ssh/id_ed25519.pub
|
|
# Copy output to server's ~/.ssh/authorized_keys
|
|
```
|
|
|
|
### 2. Configuration Issues
|
|
|
|
#### Issue: Environment File Not Found
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
ERROR: Environment file not found: .env.production
|
|
```
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Create from template
|
|
cp applications/environments/.env.production.template applications/environments/.env.production
|
|
|
|
# Or initialize all configs
|
|
make init-config
|
|
|
|
# Edit the configuration
|
|
make edit-config ENV=production
|
|
```
|
|
|
|
#### Issue: Template Values Not Replaced
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
ERROR: Environment file contains unfilled templates
|
|
```
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Find unfilled templates
|
|
grep "*** REQUIRED" applications/environments/.env.production
|
|
|
|
# Replace with actual values
|
|
nano applications/environments/.env.production
|
|
|
|
# Generate secure passwords
|
|
openssl rand -base64 32 | tr -d "=+/" | cut -c1-25
|
|
```
|
|
|
|
#### Issue: SSL Certificate Problems
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
SSL certificate error
|
|
nginx: [emerg] cannot load certificate
|
|
```
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# For Let's Encrypt issues
|
|
# Check domain DNS points to server
|
|
dig +short michaelschiemer.de
|
|
|
|
# Verify SSL email is correct
|
|
grep SSL_EMAIL applications/environments/.env.production
|
|
|
|
# For self-signed certificates (development)
|
|
# Regenerate certificates
|
|
./scripts/generate_ssl_certificates.sh
|
|
|
|
# Check certificate validity
|
|
openssl x509 -in /path/to/cert.pem -text -noout
|
|
```
|
|
|
|
### 3. Deployment Failures
|
|
|
|
#### Issue: Ansible Connection Failed
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
UNREACHABLE! => {"msg": "Failed to connect to the host via ssh"}
|
|
```
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Test SSH connection manually
|
|
ssh user@your-server.com
|
|
|
|
# Check Ansible inventory
|
|
cat deployment/infrastructure/inventories/production/hosts.yml
|
|
|
|
# Test Ansible connectivity
|
|
ansible all -i deployment/infrastructure/inventories/production/hosts.yml -m ping
|
|
|
|
# Common fixes:
|
|
# 1. Update server IP address in inventory
|
|
# 2. Ensure SSH key is added to server
|
|
# 3. Check firewall allows SSH (port 22)
|
|
# 4. Verify username in inventory file
|
|
```
|
|
|
|
#### Issue: Docker Compose Build Failed
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
ERROR: Failed to build custom-php-framework
|
|
```
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Check Docker Compose syntax
|
|
docker-compose config
|
|
|
|
# Rebuild without cache
|
|
docker-compose build --no-cache
|
|
|
|
# Check for disk space
|
|
df -h
|
|
|
|
# Clear Docker build cache
|
|
docker system prune -a
|
|
|
|
# Check specific service logs
|
|
docker-compose logs php
|
|
```
|
|
|
|
#### Issue: Database Connection Failed
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
SQLSTATE[HY000] [2002] Connection refused
|
|
```
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Check database container status
|
|
docker-compose ps db
|
|
|
|
# Check database logs
|
|
docker-compose logs db
|
|
|
|
# Test database connection
|
|
docker-compose exec php php console.php db:ping
|
|
|
|
# Verify database credentials in .env file
|
|
grep DB_ applications/environments/.env.production
|
|
|
|
# Reset database container
|
|
docker-compose down
|
|
docker volume rm michaelschiemer_db_data # WARNING: This removes all data
|
|
docker-compose up -d db
|
|
```
|
|
|
|
### 4. Application Issues
|
|
|
|
#### Issue: 502 Bad Gateway
|
|
|
|
**Symptoms:**
|
|
- Nginx shows 502 error
|
|
- Application not responding
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Check if PHP-FPM container is running
|
|
docker-compose ps php
|
|
|
|
# Check PHP-FPM logs
|
|
docker-compose logs php
|
|
|
|
# Restart PHP container
|
|
docker-compose restart php
|
|
|
|
# Check nginx upstream configuration
|
|
docker-compose exec nginx nginx -t
|
|
|
|
# Verify PHP-FPM is listening on correct port
|
|
docker-compose exec php netstat -ln | grep 9000
|
|
```
|
|
|
|
#### Issue: 404 Not Found
|
|
|
|
**Symptoms:**
|
|
- All routes return 404
|
|
- Static files not found
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Check nginx configuration
|
|
docker-compose exec nginx nginx -t
|
|
|
|
# Check document root
|
|
docker-compose exec php ls -la /var/www/html/public/
|
|
|
|
# Verify file permissions
|
|
docker-compose exec php chmod -R 755 /var/www/html/public
|
|
docker-compose exec php chown -R www-data:www-data /var/www/html
|
|
|
|
# Check nginx routing
|
|
docker-compose logs nginx | grep 404
|
|
```
|
|
|
|
#### Issue: PHP Fatal Errors
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
PHP Fatal error: Class not found
|
|
```
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Check composer autoloader
|
|
docker-compose exec php composer dump-autoload -o
|
|
|
|
# Verify dependencies installed
|
|
docker-compose exec php composer install --no-dev --optimize-autoloader
|
|
|
|
# Check PHP configuration
|
|
docker-compose exec php php -i | grep -E "(memory_limit|max_execution_time)"
|
|
|
|
# Check application logs
|
|
docker-compose logs php | grep "FATAL"
|
|
```
|
|
|
|
### 5. Performance Issues
|
|
|
|
#### Issue: Slow Response Times
|
|
|
|
**Symptoms:**
|
|
- Pages load slowly
|
|
- Timeouts occur
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Check resource usage
|
|
docker stats
|
|
|
|
# Monitor PHP-FPM processes
|
|
docker-compose exec php ps aux | grep php-fpm
|
|
|
|
# Check database queries
|
|
docker-compose logs db | grep "Query_time"
|
|
|
|
# Optimize PHP-FPM configuration
|
|
# Edit: deployment/applications/dockerfiles/php-fpm/php-fpm.conf
|
|
|
|
# Enable OPcache
|
|
docker-compose exec php php -m | grep OPcache
|
|
```
|
|
|
|
#### Issue: High Memory Usage
|
|
|
|
**Symptoms:**
|
|
```bash
|
|
Fatal error: Allowed memory size exhausted
|
|
```
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Increase PHP memory limit
|
|
# Edit .env file: PHP_MEMORY_LIMIT=1024M
|
|
|
|
# Check memory usage
|
|
docker-compose exec php php -r "echo ini_get('memory_limit');"
|
|
|
|
# Monitor memory usage
|
|
docker stats --no-stream
|
|
|
|
# Restart containers with new limits
|
|
docker-compose down && docker-compose up -d
|
|
```
|
|
|
|
### 6. SSL and Security Issues
|
|
|
|
#### Issue: SSL Certificate Not Trusted
|
|
|
|
**Symptoms:**
|
|
- Browser shows security warning
|
|
- SSL certificate invalid
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Check certificate status
|
|
curl -I https://michaelschiemer.de
|
|
|
|
# Verify certificate chain
|
|
openssl s_client -connect michaelschiemer.de:443 -servername michaelschiemer.de
|
|
|
|
# For Let's Encrypt renewal issues
|
|
docker-compose exec nginx certbot renew --dry-run
|
|
|
|
# Check certificate expiration
|
|
echo | openssl s_client -connect michaelschiemer.de:443 2>/dev/null | openssl x509 -noout -dates
|
|
```
|
|
|
|
#### Issue: Firewall Blocking Connections
|
|
|
|
**Symptoms:**
|
|
- Connection timeout
|
|
- Cannot reach server
|
|
|
|
**Solutions:**
|
|
```bash
|
|
# Check firewall status on server
|
|
sudo ufw status
|
|
|
|
# Allow HTTP/HTTPS traffic
|
|
sudo ufw allow 80/tcp
|
|
sudo ufw allow 443/tcp
|
|
sudo ufw allow 22/tcp # SSH
|
|
|
|
# Check if ports are listening
|
|
netstat -tlnp | grep :80
|
|
netstat -tlnp | grep :443
|
|
```
|
|
|
|
## Advanced Troubleshooting
|
|
|
|
### Debug Mode
|
|
|
|
Enable debug mode for detailed error information:
|
|
|
|
```bash
|
|
# Enable debug in .env file (non-production only)
|
|
APP_DEBUG=true
|
|
|
|
# Redeploy with debug enabled
|
|
./deploy.sh staging --force
|
|
|
|
# Check detailed logs
|
|
make logs ENV=staging | grep ERROR
|
|
```
|
|
|
|
### Verbose Deployment
|
|
|
|
Run deployment with verbose output:
|
|
|
|
```bash
|
|
# Verbose deployment
|
|
./deploy.sh staging --verbose
|
|
|
|
# Dry run with verbose output
|
|
./deploy.sh production --dry-run --verbose
|
|
|
|
# Ansible verbose mode
|
|
cd deployment/infrastructure
|
|
ansible-playbook -i inventories/staging/hosts.yml site.yml -vvv
|
|
```
|
|
|
|
### Database Debugging
|
|
|
|
```bash
|
|
# Check database status
|
|
make health ENV=staging
|
|
|
|
# Access database directly
|
|
docker-compose exec db mysql -u root -p
|
|
|
|
# Check database structure
|
|
docker-compose exec php php console.php db:status
|
|
|
|
# Run migrations
|
|
docker-compose exec php php console.php db:migrate
|
|
|
|
# Rollback migrations
|
|
docker-compose exec php php console.php db:rollback
|
|
```
|
|
|
|
### Container Debugging
|
|
|
|
```bash
|
|
# Enter container for debugging
|
|
docker-compose exec php /bin/bash
|
|
docker-compose exec nginx /bin/sh
|
|
|
|
# Check container resource usage
|
|
docker stats --no-stream
|
|
|
|
# Inspect container configuration
|
|
docker-compose config
|
|
|
|
# Check container networking
|
|
docker network ls
|
|
docker network inspect michaelschiemer_default
|
|
```
|
|
|
|
## Recovery Procedures
|
|
|
|
### Emergency Procedures
|
|
|
|
```bash
|
|
# Emergency stop all services
|
|
make emergency-stop ENV=production
|
|
|
|
# Emergency restart
|
|
make emergency-restart ENV=production
|
|
|
|
# Rollback deployment (with caution)
|
|
make rollback ENV=production
|
|
```
|
|
|
|
### Backup and Restore
|
|
|
|
```bash
|
|
# Create backup before troubleshooting
|
|
make backup ENV=production
|
|
|
|
# Restore from backup if needed
|
|
make restore ENV=production
|
|
|
|
# List available backups
|
|
ls -la ../storage/backups/
|
|
```
|
|
|
|
### Service Recovery
|
|
|
|
```bash
|
|
# Restart specific service
|
|
docker-compose restart nginx
|
|
docker-compose restart php
|
|
docker-compose restart db
|
|
|
|
# Rebuild and restart
|
|
docker-compose down
|
|
docker-compose up -d --build
|
|
|
|
# Full reset (removes data - use with caution)
|
|
docker-compose down -v
|
|
docker-compose up -d
|
|
```
|
|
|
|
## Getting Help
|
|
|
|
### Check Documentation
|
|
|
|
1. Review [Quick Start Guide](QUICKSTART.md)
|
|
2. Check [Environment Configuration](ENVIRONMENTS.md)
|
|
3. Examine deployment logs
|
|
|
|
### Collect Information
|
|
|
|
Before asking for help, collect:
|
|
- Error messages from logs
|
|
- Environment configuration (sanitized)
|
|
- System information (`docker --version`, `ansible --version`)
|
|
- Deployment command used
|
|
- Environment being deployed to
|
|
|
|
### Common Commands for Support
|
|
|
|
```bash
|
|
# System information
|
|
make version
|
|
make info
|
|
|
|
# Configuration status
|
|
make validate-config ENV=production
|
|
|
|
# Health checks
|
|
make health ENV=staging
|
|
|
|
# Recent logs
|
|
make logs ENV=production | tail -100
|
|
```
|
|
|
|
### Emergency Contacts
|
|
|
|
For critical production issues:
|
|
- Check system logs immediately
|
|
- Create backup if possible
|
|
- Document the issue and steps taken
|
|
- Consider rollback if service is down
|
|
|
|
## Prevention
|
|
|
|
### Best Practices
|
|
|
|
1. **Always test with dry-run first**
|
|
```bash
|
|
./deploy.sh production --dry-run
|
|
```
|
|
|
|
2. **Use staging environment**
|
|
```bash
|
|
make deploy-staging
|
|
# Test thoroughly before production
|
|
```
|
|
|
|
3. **Regular backups**
|
|
```bash
|
|
make backup ENV=production
|
|
```
|
|
|
|
4. **Monitor health**
|
|
```bash
|
|
make health ENV=production
|
|
```
|
|
|
|
5. **Keep configuration secure**
|
|
```bash
|
|
chmod 600 applications/environments/.env.*
|
|
```
|
|
|
|
### Monitoring Setup
|
|
|
|
Consider implementing:
|
|
- Automated health checks
|
|
- Log monitoring and alerting
|
|
- Performance monitoring
|
|
- SSL certificate expiration alerts
|
|
- Database backup verification
|
|
|
|
This troubleshooting guide should help you resolve most common deployment issues. Remember to always test changes in a staging environment before applying them to production! |