13 KiB
Troubleshooting Guide
This guide helps you diagnose and resolve common issues with ComposeSync.
Quick Diagnostics
Service Status Check
# Check if ComposeSync is running
sudo systemctl status composesync
# Check recent logs
sudo journalctl -u composesync -n 20
# Check configuration
sudo cat /opt/composesync/config.toml
Basic Health Check
# Check service status
if systemctl is-active --quiet composesync; then
echo "✓ ComposeSync is running"
else
echo "✗ ComposeSync is not running"
fi
# Check for recent errors
error_count=$(journalctl -u composesync --since "1 hour ago" | grep -c "ERROR")
echo "Errors in last hour: $error_count"
# Check disk usage
usage=$(df -h /opt/composesync/ | tail -1 | awk '{print $5}' | sed 's/%//')
echo "Disk usage: ${usage}%"
Common Issues
Service Won't Start
Symptoms:
systemctl status composesyncshows failed status- Service won't start with
systemctl start composesync
Diagnosis:
# Check service status
sudo systemctl status composesync
# View detailed logs
sudo journalctl -u composesync -n 50
# Check configuration syntax
sudo systemctl restart composesync
sudo journalctl -u composesync -n 10
Common Causes:
-
Configuration Error
# Check TOML syntax sudo cat /opt/composesync/config.toml # Test configuration sudo systemctl restart composesync sudo journalctl -u composesync -n 20 | grep "ERROR" -
Missing Dependencies
# Check if required tools are installed which wget which git which docker which docker-compose # Install missing tools sudo apt update sudo apt install wget git docker.io docker-compose-plugin -
Permission Issues
# Check file permissions ls -la /opt/composesync/ # Fix permissions sudo chown -R $USER:docker /opt/composesync/ sudo chmod +x /opt/composesync/update-agent.sh sudo chmod +x /opt/composesync/config-parser.sh
Solutions:
- Fix configuration syntax errors
- Install missing dependencies
- Correct file permissions
- Check systemd service file
Configuration Issues
Symptoms:
- Service starts but doesn't process stacks
- Stacks are skipped with errors
- Configuration not loaded properly
Diagnosis:
# Check configuration file
sudo cat /opt/composesync/config.toml
# Check for configuration errors
sudo journalctl -u composesync | grep "Configuration"
# Test configuration loading
sudo systemctl restart composesync
sudo journalctl -u composesync -n 20
Common Issues:
-
TOML Syntax Error
# Incorrect TOML syntax [global] UPDATE_INTERVAL_SECONDS = 3600 KEEP_VERSIONS = 10 [immich] URL = "https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml" PATH = "/opt/composesync/stacks/immich" TOOL = "wget"Fix: Ensure proper TOML syntax with correct indentation and quotes.
-
Missing Required Fields
# Missing required fields [immich] URL = "https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml" # Missing PATH and TOOLFix: Add all required fields (URL, PATH, TOOL).
-
Invalid Paths
[immich] URL = "https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml" PATH = "/invalid/path" # Path doesn't exist TOOL = "wget"Fix: Create the directory or use a valid path.
Solutions:
- Validate TOML syntax
- Ensure all required fields are present
- Create missing directories
- Check file permissions
Download Failures
Symptoms:
- Stacks are skipped with download errors
- Network connectivity issues
- Invalid URLs
Diagnosis:
# Check network connectivity
ping -c 3 github.com
# Test URL manually
wget -O /tmp/test.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
# Check for download errors
sudo journalctl -u composesync | grep "Failed to download"
Common Issues:
-
Network Connectivity
# Test basic connectivity ping -c 3 8.8.8.8 # Test DNS resolution nslookup github.com # Check proxy settings echo $http_proxy echo $https_proxy -
Invalid URLs
# Incorrect URL format [immich] URL = "https://invalid-url.com/docker-compose.yml" PATH = "/opt/composesync/stacks/immich" TOOL = "wget" -
Authentication Required
# Private repository without authentication [private-app] URL = "https://github.com/user/private-repo.git" PATH = "/opt/composesync/stacks/private" TOOL = "git"
Solutions:
- Check network connectivity
- Verify URLs are correct and accessible
- Configure authentication for private repositories
- Check firewall settings
Docker Compose Failures
Symptoms:
- Updates fail with Docker Compose errors
- Services don't start after updates
- Rollback occurs frequently
Diagnosis:
# Check Docker Compose syntax
cd /opt/composesync/stacks/immich
docker compose config
# Check service status
docker compose ps
# View service logs
docker compose logs
Common Issues:
-
Invalid Compose File
# Test compose file syntax docker compose -f /opt/composesync/stacks/immich/docker-compose.yml config # Check for syntax errors docker compose -f /opt/composesync/stacks/immich/docker-compose.yml config 2>&1 | grep "ERROR" -
Port Conflicts
# Check for port conflicts netstat -tulpn | grep :80 netstat -tulpn | grep :443 # Check which services are using ports sudo lsof -i :80 sudo lsof -i :443 -
Resource Issues
# Check available disk space df -h # Check available memory free -h # Check Docker disk usage docker system df
Solutions:
- Fix compose file syntax errors
- Resolve port conflicts
- Free up disk space and memory
- Check Docker daemon status
Permission Issues
Symptoms:
- Cannot write to stack directories
- Cannot access Docker socket
- Permission denied errors
Diagnosis:
# Check file permissions
ls -la /opt/composesync/
# Check user groups
groups $USER
# Check Docker socket permissions
ls -la /var/run/docker.sock
# Test Docker access
docker ps
Common Issues:
-
User Not in Docker Group
# Check if user is in docker group groups $USER | grep docker # Add user to docker group sudo usermod -aG docker $USER # Log out and back in, or run: newgrp docker -
Incorrect File Ownership
# Check ownership ls -la /opt/composesync/stacks/ # Fix ownership sudo chown -R $USER:docker /opt/composesync/stacks/ -
Docker Socket Permissions
# Check socket permissions ls -la /var/run/docker.sock # Fix socket permissions sudo chmod 666 /var/run/docker.sock
Solutions:
- Add user to docker group
- Fix file ownership and permissions
- Restart Docker daemon if needed
- Check systemd service user configuration
Lock File Issues
Symptoms:
- Service appears stuck
- Updates not running
- Lock file errors
Diagnosis:
# Check for lock files
ls -la /opt/composesync/.lock
# Check lock file age
stat /opt/composesync/.lock
# Check for stale locks
find /opt/composesync -name "*.lock" -mmin +5
Solutions:
# Remove stale lock file
sudo rm /opt/composesync/.lock
# Restart service
sudo systemctl restart composesync
# Check if service starts properly
sudo systemctl status composesync
Backup Issues
Symptoms:
- No backup files created
- Backup cleanup not working
- Disk space issues
Diagnosis:
# Check backup files
find /opt/composesync/stacks -name "*.bak"
# Check backup retention settings
grep "KEEP_VERSIONS" /opt/composesync/config.toml
# Check disk usage
df -h /opt/composesync/
Common Issues:
-
No Backups Created
# Check if backups are being created ls -la /opt/composesync/stacks/immich/compose-*.bak # Check backup creation logs sudo journalctl -u composesync | grep "backup" -
Backup Cleanup Not Working
# Check backup retention grep "KEEP_VERSIONS" /opt/composesync/config.toml # Count backup files find /opt/composesync/stacks -name "*.bak" | wc -l # Manual cleanup find /opt/composesync/stacks -name "*.bak" -mtime +30 -delete
Solutions:
- Check backup creation logs
- Verify backup retention settings
- Manually clean old backups
- Check disk space availability
Webhook Issues
Symptoms:
- Webhook notifications not sent
- Webhook delivery failures
- Missing notifications
Diagnosis:
# Check webhook configuration
grep "NOTIFICATION_WEBHOOK_URL" /opt/composesync/config.toml
# Test webhook manually
curl -X POST -H "Content-Type: application/json" \
-d '{"event": "test", "message": "Test notification"}' \
https://your-webhook-url.com/endpoint
# Check webhook logs
sudo journalctl -u composesync | grep "webhook"
Common Issues:
-
Invalid Webhook URL
# Incorrect webhook URL [global] NOTIFICATION_WEBHOOK_URL = "https://invalid-webhook.com/endpoint" -
Network Issues
# Test webhook connectivity curl -I https://your-webhook-url.com/endpoint # Check DNS resolution nslookup your-webhook-url.com -
Authentication Issues
# Test webhook with authentication curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{"event": "test"}' \ https://your-webhook-url.com/endpoint
Solutions:
- Verify webhook URL is correct
- Check network connectivity
- Configure authentication if required
- Test webhook endpoint manually
Advanced Troubleshooting
Debug Mode
Enable debug logging for detailed troubleshooting:
# Edit service file to enable debug
sudo systemctl edit composesync
# Add debug environment variable
[Service]
Environment=DEBUG=true
Manual Testing
Test components manually:
# Test configuration parser
sudo -u composesync /opt/composesync/config-parser.sh
# Test update script manually
sudo -u composesync /opt/composesync/update-agent.sh
# Test Docker Compose commands
cd /opt/composesync/stacks/immich
docker compose config
docker compose ps
System Information
Gather system information for troubleshooting:
# System information
uname -a
lsb_release -a
# Docker information
docker version
docker info
# Disk usage
df -h
du -sh /opt/composesync/
# Memory usage
free -h
# Network connectivity
ping -c 3 github.com
curl -I https://github.com
Recovery Procedures
Manual Rollback
If automatic rollback fails:
# List available backups
ls -la /opt/composesync/stacks/immich/compose-*.bak
# Restore from backup
sudo cp /opt/composesync/stacks/immich/compose-20240115102001.yml.bak \
/opt/composesync/stacks/immich/docker-compose.yml
# Apply rollback
cd /opt/composesync/stacks/immich
docker compose up -d
Service Recovery
If the service is completely broken:
# Stop service
sudo systemctl stop composesync
# Backup configuration
sudo cp /opt/composesync/config.toml /opt/composesync/config.toml.backup
# Reinstall service
sudo ./install.sh
# Restore configuration
sudo cp /opt/composesync/config.toml.backup /opt/composesync/config.toml
# Start service
sudo systemctl start composesync
Complete Reset
As a last resort:
# Stop service
sudo systemctl stop composesync
sudo systemctl disable composesync
# Backup important data
sudo cp -r /opt/composesync/stacks /tmp/composesync-backup
# Remove installation
sudo rm -rf /opt/composesync
sudo rm /etc/systemd/system/composesync.service
# Reinstall
sudo ./install.sh
# Restore stacks
sudo cp -r /tmp/composesync-backup/* /opt/composesync/stacks/
# Start service
sudo systemctl start composesync
Getting Help
Log Collection
Collect logs for troubleshooting:
# Create log archive
sudo journalctl -u composesync > /tmp/composesync-logs.txt
sudo cat /opt/composesync/config.toml > /tmp/composesync-config.txt
sudo systemctl status composesync > /tmp/composesync-status.txt
# Archive logs
tar -czf composesync-debug.tar.gz /tmp/composesync-*.txt
Information to Include
When seeking help, include:
-
System Information:
- OS version and distribution
- Docker version
- ComposeSync version
-
Configuration:
- Relevant parts of config.toml (remove sensitive data)
- Service status output
-
Logs:
- Recent error logs
- Service status logs
- Configuration loading logs
-
Steps to Reproduce:
- What you were trying to do
- What happened
- What you expected to happen
Common Solutions Summary
| Issue | Quick Fix | Detailed Fix |
|---|---|---|
| Service won't start | Check config syntax | Validate TOML, check permissions |
| Download failures | Test URL manually | Check network, verify URLs |
| Docker failures | Check compose syntax | Fix compose file, resolve conflicts |
| Permission issues | Add user to docker group | Fix ownership, check socket permissions |
| Lock file stuck | Remove .lock file | Restart service, check for processes |
| No backups | Check retention settings | Verify backup creation, check disk space |
| Webhook failures | Test URL manually | Check network, verify authentication |