Files
godoxy/cmd
yusing 3adefe4202 fix: add startup timeout guard to prevent indefinite hangs
Add a 10-second timeout mechanism during application initialization. If initialization
fails to complete within the timeout window, the application logs a fatal error and exits.
This prevents the proxy from becoming unresponsive during startup due to blocking operations
in parallel initialization tasks (DNS providers, icon cache, system info poller, middleware
loading, Docker client, API server, debug server, config watcher).

The timeout guard uses a background goroutine that listens for either a completion signal
(via closing the done channel) or the timeout expiration, providing a safety net for
long-running or blocked initialization scenarios.
2026-01-25 17:28:15 +08:00
..

cmd

Main entry point package for GoDoxy, a lightweight reverse proxy with WebUI for Docker containers.

Overview

This package contains the main.go entry point that initializes and starts the GoDoxy server. It coordinates the initialization of all core components including configuration loading, API server, authentication, and monitoring services.

Architecture

graph TD
    A[main] --> B[Init Profiling]
    A --> C[Init Logger]
    A --> D[Parallel Init]
    D --> D1[DNS Providers]
    D --> D2[Icon Cache]
    D --> D3[System Info Poller]
    D --> D4[Middleware Compose Files]
    A --> E[JWT Secret Setup]
    A --> F[Create Directories]
    A --> G[Load Config]
    A --> H[Start Proxy Servers]
    A --> I[Init Auth]
    A --> J[Start API Server]
    A --> K[Debug Server]
    A --> L[Uptime Poller]
    A --> M[Watch Changes]
    A --> N[Wait Exit]

Main Function Flow

The main() function performs the following initialization steps:

  1. Profiling Setup: Initializes pprof endpoints for performance monitoring
  2. Logger Initialization: Configures zerolog with memory logging
  3. Parallel Initialization: Starts DNS providers, icon cache, system info poller, and middleware
  4. JWT Secret: Ensures API JWT secret is set (generates random if not provided)
  5. Directory Preparation: Creates required directories for logs, certificates, etc.
  6. Configuration Loading: Loads YAML configuration and reports any errors
  7. Proxy Servers: Starts HTTP/HTTPS proxy servers based on configuration
  8. Authentication: Initializes authentication system with access control
  9. API Server: Starts the REST API server with all configured routes
  10. Debug Server: Starts the debug page server (development mode)
  11. Monitoring: Starts uptime and system info polling
  12. Change Watcher: Starts watching for Docker container and configuration changes
  13. Graceful Shutdown: Waits for exit signal with configured timeout

Configuration

The main configuration is loaded from config/config.yml. Required directories include:

  • logs/ - Log files
  • config/ - Configuration directory
  • certs/ - SSL certificates
  • proxy/ - Proxy-related files

Environment Variables

  • API_JWT_SECRET - Secret key for JWT authentication (optional, auto-generated if not set)

Dependencies

  • internal/api - REST API handlers
  • internal/auth - Authentication and ACL
  • internal/config - Configuration management
  • internal/dnsproviders - DNS provider integration
  • internal/homepage - WebUI dashboard
  • internal/logging - Logging infrastructure
  • internal/metrics - System metrics collection
  • internal/route - HTTP routing and middleware
  • github.com/yusing/goutils/task - Task lifecycle management