Fix go.mod setup and improve mock server for better API compatibility

This commit is contained in:
Andreas Düren 2025-03-16 23:14:36 +01:00
parent 956d39fca5
commit 92f5c76955

View File

@ -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"