Common issues and solutions for ChronoVault
- Installation Issues
- SSH Connection Issues
- Backup Issues
- Restore/Rollback Issues
- Performance Issues
- Database Issues
- Frontend Issues
- Agent Issues
- Networking Issues
- Security Issues
Symptoms:
Error: No such service: postgres
Solutions:
-
Ensure Docker and Docker Compose are installed:
docker --version docker compose version
-
Check docker-compose.yml syntax:
docker compose config
-
Ensure you're in the correct directory:
cd /path/to/chronovault docker compose up -d
Symptoms:
Error: Bind for 0.0.0.0:5432 failed: port is already allocated
Solutions:
-
Find the process using the port:
sudo lsof -i :5432
-
Stop the conflicting service:
sudo systemctl stop postgresql
-
Or change the port in docker-compose.yml:
ports: - "5433:5432" # Use 5433 instead
Symptoms:
Error: no space left on device
Solutions:
-
Check disk usage:
df -h
-
Clean up Docker resources:
docker system prune -a
-
Remove old logs:
sudo journalctl --vacuum-size=100M
Symptoms:
- "Connection refused" error when testing SSH
- Agent cannot connect to target server
Solutions:
-
Verify SSH service is running:
sudo systemctl status sshd sudo systemctl start sshd
-
Check SSH port:
sudo netstat -tlnp | grep ssh -
Verify firewall rules:
sudo ufw status sudo ufw allow ssh
Symptoms:
Permission denied (publickey)
Solutions:
-
Verify SSH key permissions:
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519
-
Copy public key to server:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server -
Check SSH config:
ssh -v user@server
Symptoms:
Host key verification failed
Solutions:
-
Add server to known_hosts:
ssh-keyscan -H server >> ~/.ssh/known_hosts
-
Or disable strict checking (not recommended for production):
ssh -o StrictHostKeyChecking=no user@server
Symptoms:
Connection timed out
Solutions:
-
Check network connectivity:
ping server traceroute server
-
Verify firewall allows SSH:
sudo iptables -L -n | grep 22 -
Check if server is reachable:
telnet server 22
Symptoms:
Too many authentication failures
Solutions:
-
Specify the correct key explicitly:
ssh -i ~/.ssh/id_ed25519 user@server -
Check SSH agent:
ssh-add -l ssh-add ~/.ssh/id_ed25519
Symptoms:
Error: restic: command not found
Solutions:
-
Install Restic:
# Ubuntu/Debian sudo apt install restic # CentOS/RHEL sudo yum install restic # Manual install wget https://github.com/restic/restic/releases/download/v0.16.0/restic_0.16.0_linux_amd64.bz2 bunzip2 restic_0.16.0_linux_amd64.bz2 chmod +x restic_0.16.0_linux_amd64 sudo mv restic_0.16.0_linux_amd64 /usr/local/bin/restic
-
Or enable auto-install in Agent config:
restic: auto_install: true
Symptoms:
error: repository already initialized
Solutions:
- This is normal - Restic repository is already set up
- The Agent will skip initialization automatically
- To reinitialize (WARNING: deletes existing backups):
restic -r /var/lib/chronovault/restic init --remove
Symptoms:
permission denied
Solutions:
-
Ensure Agent runs as root:
sudo systemctl edit chronovault-agent # Ensure: User=root -
Check directory permissions:
sudo chown -R root:root /var/lib/chronovault
Symptoms:
error: write: no space left on device
Solutions:
-
Check disk space:
df -h /var/lib/chronovault
-
Clean up old backups:
restic -r /var/lib/chronovault/restic forget --keep-daily 7 --prune
-
Check for large files:
du -sh /var/lib/chronovault/restic/*
Symptoms:
- Backup takes hours to complete
- Progress doesn't update
Solutions:
-
Check network bandwidth:
speedtest-cli
-
Check disk I/O:
iostat -x 1
-
Reduce backup scope:
- Backup only essential directories
- Exclude large, unnecessary files
-
Check Agent logs:
sudo journalctl -u chronovault-agent -f
Symptoms:
error: verify integrity of repository failed
Solutions:
-
Check repository integrity:
restic -r /var/lib/chronovault/restic check
-
Try to repair:
restic -r /var/lib/chronovault/restic check --read-data
-
If corruption is severe, reinitialize:
restic -r /var/lib/chronovault/restic init --remove
Symptoms:
error: file not found in snapshot
Solutions:
-
Verify the file exists in the snapshot:
restic -r /var/lib/chronovault/restic ls <snapshot-id> /path/to/file
-
Check if the file was in the backup paths:
- Ensure the file's directory was included in backup configuration
Symptoms:
permission denied: /path/to/file
Solutions:
-
Ensure Agent has write permissions:
sudo chown -R root:root /path/to/file sudo chmod 755 /path/to/file
-
Check if file is immutable:
lsattr /path/to/file sudo chattr -i /path/to/file
Symptoms:
- Service fails to start after package rollback
- Configuration mismatch
Solutions:
-
Check service logs:
sudo journalctl -u <service-name> -n 50
-
Verify configuration files were restored:
ls -la /etc/<service>/
-
Restart the service:
sudo systemctl restart <service-name>
Symptoms:
E: Version '1.22.0-1' for 'nginx' was not found
Solutions:
-
Check available versions:
apt list nginx -a 2>/dev/null yum --showduplicates list nginx -
The exact version may not be available in repositories
-
Consider using a different snapshot with available version
Symptoms:
- Dashboard takes > 5 seconds to load
- API responses are slow
Solutions:
-
Check database performance:
-- Check slow queries SELECT query, mean_time, calls FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;
-
Add database indexes:
CREATE INDEX idx_snapshots_created_at ON snapshots(created_at); CREATE INDEX idx_snapshots_server_id ON snapshots(server_id);
-
Increase JVM memory:
export JAVA_OPTS="-Xmx1g -Xms512m"
Symptoms:
- Backend or Agent using excessive memory
- OOM errors in logs
Solutions:
-
Check memory usage:
free -h top -o %MEM
-
Limit container memory (Docker):
deploy: resources: limits: memory: 512M
-
Adjust JVM heap size:
export JAVA_OPTS="-Xmx512m"
Symptoms:
- Agent or Backend using 100% CPU
- System becomes unresponsive
Solutions:
-
Check CPU usage:
top -o %CPU
-
Identify the process:
ps aux | grep chronovault -
Reduce concurrent operations:
- Limit snapshot parallelism
- Schedule heavy tasks during off-hours
Symptoms:
Connection refused: connect
Solutions:
-
Check PostgreSQL status:
sudo systemctl status postgresql sudo systemctl start postgresql
-
Verify connection settings:
psql -h localhost -U chronovault -d chronovault
-
Check pg_hba.conf:
sudo grep -v "^#" /etc/postgresql/15/main/pg_hba.conf | grep -v "^$"
Symptoms:
FATAL: password authentication failed for user "chronovault"
Solutions:
-
Reset user password:
ALTER USER chronovault WITH PASSWORD 'new-password';
-
Update .env file with new password
-
Restart Backend service
Symptoms:
ERROR: could not extend file
Solutions:
-
Check disk space:
df -h /var/lib/postgresql
-
Clean up old data:
-- Delete old audit logs DELETE FROM audit_logs WHERE created_at < NOW() - INTERVAL '90 days'; -- Vacuum to reclaim space VACUUM FULL;
-
Add more disk space or move to larger volume
Symptoms:
Migration failed: V42__description.sql
Solutions:
-
Check Flyway status:
docker compose exec backend java -jar app.jar info -
Manually apply migration:
psql -h localhost -U chronovault -d chronovault -f V42__description.sql
-
Mark migration as applied:
INSERT INTO flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, execution_time, success) VALUES (42, '42', 'description', 'SQL', 'V42__description.sql', 12345, 'admin', 100, true);
Symptoms:
- Browser shows blank page
- No errors in console
Solutions:
- Check browser console (F12)
- Verify Backend is running:
curl http://localhost:8080/actuator/health
- Clear browser cache:
- Chrome: Ctrl+Shift+Delete
- Firefox: Ctrl+Shift+Delete
Symptoms:
GET http://localhost:8080/api/servers 404
Solutions:
-
Check API base path:
- Correct:
/api/v1/servers - Wrong:
/api/servers
- Correct:
-
Verify Backend routes:
curl http://localhost:8080/actuator/mappings
Symptoms:
WebSocket connection to 'ws://localhost:8080/ws' failed
Solutions:
-
Check WebSocket endpoint:
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" http://localhost:8080/ws
-
Verify nginx proxy config (if using):
location /ws/ { proxy_pass http://backend:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
Symptoms:
- Logged out right after login
- "Unauthorized" errors
Solutions:
-
Check JWT secret:
- Must be at least 32 characters
- Must be the same across restarts
-
Verify system clock:
date timedatectl status
Symptoms:
- Agent service fails to start
- "chronovault-agent: command not found"
Solutions:
-
Check binary exists:
ls -la /opt/chronovault/chronovault-agent
-
Check permissions:
sudo chmod +x /opt/chronovault/chronovault-agent
-
Check service status:
sudo systemctl status chronovault-agent sudo journalctl -u chronovault-agent -n 50
Symptoms:
- Server shows as "Offline" in ChronoVault
- No recent heartbeats
Solutions:
-
Check Agent logs:
sudo journalctl -u chronovault-agent -f
-
Test Backend connectivity:
curl http://your-backend:8080/actuator/health
-
Restart Agent:
sudo systemctl restart chronovault-agent
Symptoms:
Warning: Agent version mismatch
Solutions:
-
Check current version:
/opt/chronovault/chronovault-agent version
-
Upgrade Agent:
# Follow upgrade instructions in AGENT_INSTALLATION.md
Symptoms:
- Snapshot state collection fails
- "context deadline exceeded"
Solutions:
-
Increase timeout in Agent config:
scanner: timeout: 30 # Increase from 10 to 30 seconds
-
Reduce number of collectors:
scanner: enabled_collectors: - packages - services # Remove slow collectors like docker
-
Check system load:
uptime top -bn1 | head -20
Symptoms:
- Agent cannot register
- Heartbeats not received
Solutions:
-
Test connectivity:
curl -v http://backend-ip:8080/actuator/health
-
Check firewall rules:
# On Agent server sudo iptables -L -n | grep 8080 sudo ufw status
-
Verify Backend is accessible:
# From Agent server telnet backend-ip 8080
Symptoms:
Access to XMLHttpRequest blocked by CORS policy
Solutions:
-
Update CORS configuration:
chronovault: cors: allowed-origins: http://localhost:5173,http://your-domain.com
-
Or set environment variable:
CORS_ALLOWED_ORIGINS=http://localhost:5173
Symptoms:
Temporary failure in name resolution
Solutions:
-
Check DNS configuration:
cat /etc/resolv.conf
-
Test DNS resolution:
nslookup your-backend.com dig your-backend.com
-
Add DNS server:
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf
Symptoms:
Invalid JWT token
Solutions:
-
Verify JWT secret:
- Must be at least 32 characters
- Must match across all instances
-
Check token expiration:
# Decode JWT echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .
-
Generate new secret:
openssl rand -hex 32
Symptoms:
Failed to decrypt credentials
Solutions:
-
Verify master key:
- Must be at least 32 characters
- Must be the same across restarts
-
Check key in .env:
grep CHRONOVAULT_MASTER_KEY .env
-
If key is lost, encrypted credentials cannot be recovered
- Re-add servers with new SSH keys
Symptoms:
Unauthorized: Invalid API key
Solutions:
- Verify API key in Agent config matches Backend
- Check if key is expired or revoked
- Generate new API key in ChronoVault UI:
- Settings → API Keys → Generate
Symptoms:
- Unauthorized access detected
- Unusual activity on servers
Solutions:
-
Immediately rotate SSH keys:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new -
Update all servers with new key:
ssh-copy-id -i ~/.ssh/id_ed25519_new.pub user@server -
Update ChronoVault server configuration
-
Check audit logs for suspicious activity:
- Settings → Audit Logs
# Backend logs
docker compose logs backend > backend.log
# Agent logs
sudo journalctl -u chronovault-agent > agent.log
# System info
uname -a > system-info.txt
df -h >> system-info.txt
free -h >> system-info.txt- GitHub Issues: https://github.com/chronovault/chronovault/issues
- Include:
- ChronoVault version
- OS and version
- Steps to reproduce
- Error messages
- Logs (with sensitive data redacted)
- Discussions: https://github.com/chronovault/chronovault/discussions
- Slack: Join our workspace