- Detect if system service (DSM/Web Station) uses port 80
- Automatically switch nginx to port 8080 if port 80 is occupied
- Avoid touching system services, only manage Docker containers
- Prevents conflicts with Synology NAS built-in services
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add port 80 usage detection with netstat and docker ps
- Stop and remove containers using port 80 before deployment
- Ensures clean port 80 for nginx service
- Prevents 'bind: address already in use' errors
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add -O flag to force legacy SCP protocol instead of SFTP
- Bypasses 'subsystem request failed on channel 0' error
- Works with Synology NAS without SFTP subsystem configuration
- Prevents Exit code 255 from connection failures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create archive in /tmp/deploy-build to avoid path conflicts
- Add --exclude='*.tar.gz' to prevent self-archiving
- Add --warning=no-file-changed to ignore harmless warnings
- Prevents Exit code 1 from tar file change detection
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Use atomic swap strategy: tmp → backup → deploy
- Automatic backup with timestamp for rollback
- Clean up old backups (keep 5 latest)
- Safer file deployment preventing partial updates
- Based on 2024 GitOps best practices
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Use docker-compose down to clear old service definitions
- Use docker system prune -f to remove cached metadata
- Verify new compose file is deployed correctly
- Force rebuild with --build flag
- This ensures new nginx-only config is used instead of cached old stack
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Stop and remove old containers with docker-compose down
- Prevents conflicts with cached old configurations
- Ensures clean deployment of new nginx-only setup
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Synology NAS doesn't have 'groups' command
- Use 'id' command instead which is available on all Unix systems
- This fixes the deployment pipeline error
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace sudo rsync with cp command
- Add error suppression for permission denied files
- Continue deployment even if some files can't be overwritten
- Avoid password prompt issues with sudo
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Extract files to /tmp first to avoid permission issues
- Use sudo rsync --delete for clean deployment
- Remove temporary files after deployment
- Handles root-owned files in target directory
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Exclude .git directory from tar archive
- Clean target directory before extraction
- Prevent file exists and permission denied errors
- Ensure clean deployment without conflicts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Test rsync availability on remote host
- Use tar + SSH pipe as alternative deployment method
- Avoids rsync server permission denied errors
- More reliable for Synology NAS deployment
Resolves: Permission denied on rsync server command execution
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Test directory access and permissions
- Check user identity and current directory
- Create target directory if not exists
- Add verbose SSH logging (-vvv) to rsync
- Troubleshoot permission denied error step by step
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Explicitly specify admin@HOST in rsync command
- Ensure proper user authentication for file transfer
- Fixes Permission denied error during rsync step
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add SSH key verification step with ssh-add -l
- Properly configure known_hosts with ssh-keyscan
- Add SSH connection test before rsync
- Remove StrictHostKeyChecking=no from rsync and remote commands
- Follow webfactory/ssh-agent best practices
Resolves SSH key authentication failures during deployment
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace Docker Hub CI/CD with direct NAS deployment
- Use rsync for reliable file synchronization
- Add SSH-based remote docker-compose execution
- Configure for Synology NAS volume path structure
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add GitHub Actions CI/CD pipeline
- Configure Nginx reverse proxy for robeing services
- Setup docker-compose for full stack deployment
- Include health checks for all services
- Support for PostgreSQL and Redis data persistence
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>