Commit Graph

418 Commits

Author SHA1 Message Date
45ea016aaa feat: expose terminal server on terminal.coolify.dev.pivoine.art
- Add Traefik labels to expose terminal server publicly
- Configure terminal server on terminal.coolify.dev.pivoine.art
- Update Coolify app to use public terminal hostname
- Change TERMINAL_HOST to terminal.coolify.dev.pivoine.art
- Change TERMINAL_PORT to 443 for HTTPS WebSocket connections

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:33:02 +01:00
438bbccadf feat: configure Coolify to connect to internal terminal server
- Add TERMINAL_HOST and TERMINAL_PORT environment variables to Coolify app
- Configure Coolify to use dev_coolify_terminal container on port 6002
- Add dependency on coolify_terminal service with health check
- Keep terminal server internal-only without direct Traefik routing
- Coolify app will proxy /terminal/ws to internal terminal server

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 14:29:43 +01:00
2b5d4d527d fix: use coolify-realtime image without path stripping for terminal 2025-11-17 14:21:41 +01:00
7fd0199e1a feat: strip /terminal/ws prefix before routing to soketi 2025-11-17 14:18:25 +01:00
0e5b539936 fix: remove path stripping from terminal router 2025-11-17 14:15:51 +01:00
f95a3ff143 fix: use standard soketi image for terminal on port 6002 2025-11-17 14:13:39 +01:00
710222e705 feat: add dedicated terminal service on port 6002 with path stripping 2025-11-17 14:10:29 +01:00
48fd6f87fe revert: restore working soketi configuration 2025-11-17 14:04:48 +01:00
eb10348988 fix: merge terminal into single coolify_soketi container with dual ports 2025-11-17 13:40:33 +01:00
417fbb6ff1 feat: configure Coolify to use terminal server internally 2025-11-17 13:35:23 +01:00
3050bbb859 feat: add dedicated coolify_terminal service for port 6002 2025-11-17 13:31:00 +01:00
6f1cce8c88 fix: remove unnecessary volumes and env vars from soketi 2025-11-17 13:28:09 +01:00
8e6c73f82d feat: use coolify-realtime image for port 6002 support 2025-11-17 13:27:24 +01:00
85ef8ecb36 feat: add terminal WebSocket router on port 6002 2025-11-17 13:25:48 +01:00
d812ede999 revert: restore original soketi configuration 2025-11-17 13:23:59 +01:00
fc23e22112 fix: use CMD-SHELL for soketi healthcheck with && 2025-11-17 13:21:13 +01:00
84c9d91bcf fix: remove explicit service link from soketi router 2025-11-17 13:19:34 +01:00
96004a38c2 fix: add path prefix stripping for terminal WebSocket
- Add stripprefix middleware to remove /terminal prefix
- Route /terminal/ws to /ws on terminal server (port 6002)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 13:13:21 +01:00
cd47bce06b fix: use coolify-realtime image with terminal WebSocket support
- Switch from standard soketi to coolify-realtime:1.0.10 image
- Add SSH volume mount for terminal functionality
- Update health check to verify both ports 6001 and 6002
- Add explicit service link for realtime HTTPS router

This fixes both realtime WebSocket and terminal/ws functionality.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 13:10:08 +01:00
d90f0179df feat: route Coolify terminal WebSocket to Soketi port 6002
- Move /terminal/ws routing from main Coolify container to Soketi
- Configure Traefik to route terminal WebSocket traffic to port 6002
- Add high priority (100) to ensure path matching
- Based on official Coolify docker-compose.prod.yml configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 13:04:08 +01:00
27c3218784 fix: map /terminal/ws path to port 6002
Route terminal WebSocket to port 6002 on Coolify container
as requested.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:58:35 +01:00
1af4ec5fca fix: add dedicated router for terminal WebSocket without compression
The terminal WebSocket is served by main Coolify on port 8080.
Create separate router with priority 100 for /terminal/ws path
without compression middleware which blocks WebSocket upgrades.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:56:34 +01:00
4dee03dd86 fix: use direct container URL for terminal WebSocket routing
Route to dev_coolify_soketi container via URL instead of port-only,
which allows Traefik to reach the correct container.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:49:27 +01:00
d1357206e8 fix: route terminal WebSocket to Soketi container port 6001
Terminal WebSocket should connect through the Soketi/realtime
container which handles Pusher protocol on port 6001.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:49:07 +01:00
f36c10a5b4 feat: add Traefik route for terminal WebSocket path
Route /terminal/ws to port 6002 on Coolify container
Set priority 100 to take precedence over main router

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:47:02 +01:00
41841f800e fix: remove terminal-specific routing (handled by main router)
The /terminal/ws endpoint is part of the main Coolify application
on port 8080, not a separate service. WebSocket requests should go
through the main router automatically.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:41:44 +01:00
251ea6b775 feat: add Traefik route for Coolify terminal WebSocket
- Route /terminal/ws path to port 6002 on Coolify container
- Enable WebSocket terminal functionality in Coolify UI
- Path-based routing on main domain

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:39:56 +01:00
22deecdbe8 revert: remove terminal port 6002 configuration
Port 6002 is not active in default Coolify deployment.
Terminal functionality appears to work through main port 8080
or requires additional configuration not documented.

Need to investigate Coolify terminal enablement further.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:37:08 +01:00
46105b1f25 feat: enable Coolify terminal interface
- Add Traefik routing for terminal service on port 6002
- Accessible at terminal.coolify.dev.pivoine.art
- Enable web-based terminal access for deployments

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:35:08 +01:00
94a8df8fa1 refactor: simplify Coolify realtime subdomain
Change from coolify-realtime.coolify.dev.pivoine.art
to realtime.coolify.dev.pivoine.art for cleaner URLs

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 12:28:36 +01:00
102484d88c fix: remove unused Coolify mail env vars, use database config
Coolify stores SMTP settings in the database (instance_settings table)
rather than reading from environment variables.

SMTP settings configured directly in database:
- smtp_enabled: true
- smtp_host: net_mailpit
- smtp_port: 1025
- smtp_from_address: hi@pivoine.art
- smtp_from_name: Coolify

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 11:48:32 +01:00
ab1d350af3 feat: enable email notifications in Coolify
- Add MAIL_MAILER=smtp to use SMTP transport
- Configure MAIL_HOST and MAIL_PORT to use Mailpit relay
- Set MAIL_FROM_ADDRESS and MAIL_FROM_NAME for sender info
- No encryption/auth needed for internal Mailpit relay

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 11:40:55 +01:00
26fa1be36c feat: enable email notifications in Gitea
- Add ENABLE_NOTIFY_MAIL: true to enable email notifications
- Set DEFAULT_EMAIL_NOTIFICATIONS: enabled as default for users
- Uses existing Mailpit mail relay configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 08:01:21 +01:00
8622f9dfa0 fix: remove drop_params from individual model configs
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 18:53:44 +01:00
0146d1f043 fix: remove invalid supports_prompt_caching parameter
Removed supports_prompt_caching parameter that was causing 400 errors.
Prompt caching is automatically enabled by Anthropic when the client
sends cache_control blocks in messages - no config needed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 16:09:17 +01:00
d26310afb7 feat: enable prompt caching for all Claude models
Added supports_prompt_caching: true to all Claude models:
- claude-sonnet-4
- claude-sonnet-4.5
- claude-3-5-sonnet
- claude-3-opus
- claude-3-haiku

This enables Anthropic's prompt caching feature across all models,
significantly reducing latency and costs for repeated requests
with the same system prompts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 16:07:29 +01:00
2014a82efb feat: enable Redis caching for LiteLLM
Configure LiteLLM to use existing Redis from core stack for caching:
- Enabled cache with Redis backend
- Set TTL to 1 hour for cached responses
- Uses core_redis container on default port

This will improve performance by caching API responses.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 16:05:14 +01:00
5cec1415ad fix: disable LiteLLM cache to avoid Redis requirement
Disabled cache setting that requires Redis configuration.
Prompt caching at the Anthropic API level is still enabled
via supports_prompt_caching setting.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 16:04:39 +01:00
8a18ae753d perf: optimize LiteLLM for better performance
Reduce database logging overhead and enable prompt caching:

- Disabled verbose logging (set_verbose: false)
- Disabled spend tracking logs to reduce DB writes
- Disabled tag tracking and daily spend logs
- Removed success/failure callbacks
- Enabled prompt caching for claude-sonnet-4.5
- Set log level to ERROR only
- Removed --detailed_debug flag from command

This should significantly improve response times by eliminating
unnecessary database writes for every request.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 16:03:19 +01:00
ffbcecc09d feat: replace Basic Auth with Authelia
Replace HTTP Basic Auth with Authelia ForwardAuth for consistent
authentication across infrastructure:

- Asciinema Admin (admin.asciinema.dev.pivoine.art): Removed Basic Auth,
  added Authelia protection
- FaceFusion (facefusion.ai.pivoine.art): Removed Basic Auth, added
  Authelia protection

Updated Authelia access control to include both services with one_factor
policy.

All services now use Authelia for authentication, eliminating the need
to manage separate Basic Auth credentials.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 21:54:27 +01:00
39c28d49a4 feat: remove Authelia from services with own auth
Remove Authelia ForwardAuth middleware from services that have their own
authentication systems to avoid double login:

- Umami: Analytics service with built-in user authentication
- Asciinema: Terminal recording platform with email-based auth
- Gitea: Git service with user accounts
- n8n: Workflow automation with user management
- Coolify: Deployment platform with authentication

Services still protected by Authelia (single auth layer):
- Mailpit: SMTP testing (no auth)
- Traefik Dashboard: Proxy admin interface
- Netdata: System monitoring (no auth)
- Scrapy: Web scraping (protected by basic auth + Authelia)
- Restic: Backup system (no auth)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 21:32:55 +01:00
f572da050e fix: update Traefik dashboard domain to proxy.pivoine.art
Changed access control rule from traefik.pivoine.art to proxy.pivoine.art
to match the actual Traefik dashboard hostname configured in arty.yml.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:59:31 +01:00
875afe2434 fix: remove authRequestHeaders to allow Cookie header forwarding
Removed explicit authRequestHeaders configuration. By default, Traefik
forwards all headers including Cookie to the ForwardAuth endpoint.
Explicitly setting authRequestHeaders was preventing the session
cookie from being forwarded to Authelia.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:56:55 +01:00
9b59d0e3ba fix: add explicit session configuration parameters
Added back session expiration, inactivity, remember_me, and same_site
settings at both global and cookie level to ensure proper session
handling across subdomains.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:52:42 +01:00
2b6ea5ee16 fix: change Mailpit to one_factor authentication
Changed from two_factor to one_factor policy for initial testing.
Users can access with just username/password without needing
to set up TOTP or WebAuthn second factor.

Can be changed back to two_factor once 2FA is configured.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:49:14 +01:00
dffc9a36cf revert: switch back to /api/authz/forward-auth endpoint
Reverting to the modern /api/authz/forward-auth endpoint as requested.
The legacy /api/verify endpoint had the same behavior.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:48:19 +01:00
4902acc06d test: switch to legacy /api/verify endpoint for automatic redirects
Try using the deprecated /api/verify endpoint instead of /api/authz/forward-auth
to see if it returns HTTP 302 redirects that browsers automatically follow
instead of HTTP 401 with Location headers.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:44:15 +01:00
c625b898cb fix: simplify Authelia config to match official blog example
Removed custom server.endpoints.authz.forward-auth configuration
and simplified session setup to match the official Authelia + Traefik
blog post example.

Key changes:
- Removed server.endpoints configuration (use defaults)
- Added session.name at top level
- Simplified session.cookies to only domain and authelia_url
- Removed custom expiration/inactivity settings

This should enable proper 302 redirects for browsers instead of
401 responses with Location headers.

Reference: https://www.authelia.com/blog/authelia--traefik-setup-guide/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:39:06 +01:00
be0fddf796 fix: remove HeaderAuthorization from forward-auth endpoint
Only use CookieSession strategy for forward-auth endpoint to ensure
browsers receive proper 302 redirects to the login page instead of
HTTP Basic auth prompts.

When HeaderAuthorization is in the strategies list, it sends
www-authenticate headers that trigger browser Basic auth dialogs.
For browser-based authentication, we only want CookieSession which
handles redirects properly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:35:18 +01:00
bec2add16b fix: configure CookieSession strategy for forward-auth endpoint
Added server.endpoints.authz.forward-auth configuration to explicitly
use CookieSession authentication strategy. This ensures browsers
receive HTTP 302 redirects instead of HTTP 401 responses when
accessing protected services while unauthenticated.

Without this configuration, the forward-auth endpoint was returning
401 with Location headers, which browsers don't automatically follow.
With CookieSession strategy, GET requests from browsers will now
receive 302 redirects that automatically redirect to the Authelia
login page.

Authentication strategy order:
1. CookieSession - for browser users (returns 302 redirects)
2. HeaderAuthorization - for API clients (returns 401 with headers)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15 20:29:46 +01:00