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 < 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 < 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 < /app/data/logs/museum.log 2>&1 & SERVER_PID=$! echo "==> Mock server started with PID $SERVER_PID"