docs/6-TROUBLESHOOTING/connection-issues.md
Frontend can't reach API or services won't communicate.
What it looks like:
Diagnosis:
# Check if API is running
docker ps | grep api
# Should see "api" service running
# Check if API is responding
curl http://localhost:5055/health
# Should show: {"status":"ok"}
# Check if frontend is running
docker ps | grep frontend
# Should see "frontend" or React service running
Solutions:
# Start API
docker compose up api -d
# Wait 5 seconds
sleep 5
# Verify it's running
docker compose logs api | tail -20
# Check docker-compose.yml has port mapping:
# api:
# ports:
# - "5055:5055"
# If missing, add it and restart:
docker compose down
docker compose up -d
# In .env, check API_URL:
cat .env | grep API_URL
# Should match your frontend URL:
# Frontend: http://localhost:8502
# API_URL: http://localhost:5055
# If wrong, fix it:
# API_URL=http://localhost:5055
# Then restart:
docker compose restart frontend
# Verify port 5055 is accessible
netstat -tlnp | grep 5055
# Should show port listening
# If on different machine, try:
# Instead of localhost, use your IP:
API_URL=http://192.168.1.100:5055
# Restart everything
docker compose restart
# Wait 10 seconds
sleep 10
# Check all services
docker compose ps
# All should show "Up"
What it looks like:
Connection refused
ECONNREFUSED
Error: socket hang up
Diagnosis:
Solution:
# Step 1: Check if API is running
docker ps | grep api
# Step 2: Check if port is listening
lsof -i :5055
# or
netstat -tlnp | grep 5055
# Step 3: Check API logs
docker compose logs api | tail -30
# Look for errors
# Step 4: Restart API
docker compose restart api
docker compose logs api | grep -i "error"
What it looks like:
Causes:
Solutions:
# See CPU/memory usage
docker stats
# Check logs for slow operations
docker compose logs api | grep "slow\|timeout"
# In .env:
SURREAL_COMMANDS_MAX_TASKS=2
API_CLIENT_TIMEOUT=600
# Restart
docker compose restart
# Test latency
ping localhost
# Test API directly
time curl http://localhost:5055/health
# Should be < 100ms
What it looks like:
502 Bad Gateway
The server is temporarily unable to service the request
Cause: Reverse proxy can't reach API
Solutions:
# From the reverse proxy server
curl http://localhost:5055/health
# Should work
# Nginx example (correct):
location /api {
proxy_pass http://localhost:5055/api;
proxy_http_version 1.1;
}
# Common mistake (wrong):
location /api {
proxy_pass http://localhost:5055; # Missing /api
}
# In .env:
API_URL=https://yourdomain.com
# Restart
docker compose restart
What it looks like:
Cause: Transient network issue or database conflicts
Solutions:
# In .env:
SURREAL_COMMANDS_RETRY_ENABLED=true
SURREAL_COMMANDS_RETRY_MAX_ATTEMPTS=5
SURREAL_COMMANDS_RETRY_WAIT_STRATEGY=exponential_jitter
# Restart
docker compose restart
# In .env:
SURREAL_COMMANDS_MAX_TASKS=2
# Restart
docker compose restart
# Monitor connection
ping google.com
# Long-running test
ping -c 100 google.com | grep "packet loss"
# Should be 0% loss
You want to access Open Notebook from another computer
Solution:
# On the server running Open Notebook:
ifconfig | grep "inet "
# or
hostname -I
# Note the IP (e.g., 192.168.1.100)
# In .env:
API_URL=http://192.168.1.100:5055
# Restart
docker compose restart
# In browser on other machine:
http://192.168.1.100:8502
# (or your server IP)
# On server:
docker compose ps
# Should show port mapping:
# 0.0.0.0:8502->8502/tcp
# 0.0.0.0:5055->5055/tcp
# Check firewall on server
sudo ufw status
# May need to open ports:
sudo ufw allow 8502
sudo ufw allow 5055
# Check on different machine:
telnet 192.168.1.100 5055
# Should connect
What it looks like:
Cross-Origin Request Blocked
Access-Control-Allow-Origin
In browser console (F12):
CORS policy: Response to preflight request doesn't pass access control check
Cause: Frontend and API URLs don't match
Solution:
# Check browser console error for what URLs are being used
# The error shows:
# - Requesting from: http://localhost:8502
# - Trying to reach: http://localhost:5055
# Make sure API_URL matches:
API_URL=http://localhost:5055
# And protocol matches (http/https)
# Restart
docker compose restart frontend
Full diagnostic:
# 1. Services running?
docker compose ps
# All should show "Up"
# 2. Ports listening?
netstat -tlnp | grep -E "8502|5055|8000"
# 3. API responding?
curl http://localhost:5055/health
# 4. Frontend accessible?
curl http://localhost:8502 | head
# 5. Network OK?
ping google.com
# 6. No firewall?
sudo ufw status | grep -E "5055|8502|8000"
What it looks like:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
Connection error when using HTTPS endpoints
Works with HTTP but fails with HTTPS
Cause: Self-signed certificates not trusted by Python's SSL verification
Solutions:
# In .env:
ESPERANTO_SSL_CA_BUNDLE=/path/to/your/ca-bundle.pem
# For Docker, mount the certificate:
# In docker-compose.yml:
volumes:
- /path/to/your/ca-bundle.pem:/certs/ca-bundle.pem:ro
environment:
- ESPERANTO_SSL_CA_BUNDLE=/certs/ca-bundle.pem
# WARNING: Only use in trusted development environments
# In .env:
ESPERANTO_SSL_VERIFY=false
If services are on a trusted local network, HTTP is acceptable:
Change the base URL in your credential (Settings → API Keys) from https:// to http://
Example: http://localhost:1234/v1
Security Note: Disabling SSL verification exposes you to man-in-the-middle attacks. Always prefer custom CA bundle or HTTP on trusted networks.
docker compose logsdocker compose restartsudo ufw status