2a9e57ad0d
This change proposed using Cloudflare API for persistent tunnels. Superseded by temporary tunnel approach using 'cloudflared tunnel --url' which requires no API tokens, account IDs, or DNS configuration.
1.9 KiB
1.9 KiB
1. Infrastructure Setup
- 1.1 Add cloudflared service to docker-compose.traefik.yml
- 1.2 Create cloudflared config directory and base config
- 1.3 Add Cloudflare env vars (API token, account ID, zone ID) to .env.example
- 1.4 Mount shared config volume between API and cloudflared containers
2. Backend - Cloudflare Tunnel Service
- 2.1 Create
src/services/cloudflare_tunnel.pywith tunnel CRUD operations - 2.2 Implement
create_tunnel(instance_name, container_name, port)function - 2.3 Implement
delete_tunnel(tunnel_id)function - 2.4 Implement
update_cloudflared_config()to rewrite config.yml - 2.5 Add Cloudflare API token validation on startup
3. Backend - Instance Lifecycle Updates
- 3.1 Update ToolInstance model: add
tunnel_idandpublic_urlfields - 3.2 Create Alembic migration for new fields
- 3.3 Update
start_instanceto create tunnel and store public_url - 3.4 Update
stop_instanceto delete tunnel and DNS record - 3.5 Update
delete_instanceto ensure tunnel cleanup - 3.6 Update
get_user_sessionsto includepublic_url
4. Backend - Cleanup
- 4.1 Remove
instance_proxy.pyrouter - 4.2 Remove proxy route registration from
main.py - 4.3 Remove
default_portfrom ToolType (no longer needed) - 4.4 Clean up any proxy-related code
5. Frontend Updates
- 5.1 Update Session interface to include
public_url - 5.2 Update InstanceList "Open" button to use
public_url - 5.3 Update SessionsPage "Open" button to use
public_url - 5.4 Remove proxy URL construction logic
6. Testing and Deployment
- 6.1 Test tunnel creation with code-server instance
- 6.2 Test tunnel deletion on instance stop
- 6.3 Verify HTTPS and WebSocket support
- 6.4 Run quality gates (ruff, mypy, typecheck, lint, build)
- 6.5 Deploy and test end-to-end