-
Notifications
You must be signed in to change notification settings - Fork 2
Description
I've been trying to get the quickstart running and hit blockers at nearly every entry point:
- install.sh requires chmod +x and fails without Docker Desktop (why is Docker Desktop specifically required?)
- Configurator fails to start
- Dashboard shows error toasts (though migrations do seem to run behind them)
- Frontend doesn't compile due to lockfile mismatch
- Tiltfile uses bash syntax but runs with sh
- Various login issues with the dashboard
I've attached a diff with fixes I've attempted, including:
- docker-compose > docker compose (the former is deprecated)
- Bash substring syntax > POSIX-compatible cut
- Added minikube/kubectl setup as an alternative to Docker Desktop's Kubernetes
Even with these changes, tilt up fails with:
Configurator: ERR_MODULE_NOT_FOUND: Cannot find module '/app/src/lib/graphql/client'
- Dashboard: Cannot query field "settings" on type "AppExtension"
- Frontend: pnpm-lock.yaml is not up to date with package.json (next version mismatch: 14.1.3 vs 14.2.35)
This is frustrating because I had a working Saleor deployment on Fly.io for ~$25/month about 11 months ago, simple setup, payments working, custom storefront. I was hoping to revisit the project and potentially migrate to Saleor Cloud if things took off, but I can't even get the local dev environment running now.
I'd be happy to contribute fixes if there's interest, but the current state of the quickstart is a significant barrier to entry.
09:36:42 jm@pop-os saleor-platform ±|main✔|→ lsb_release -a
No LSB modules are available.
Distributor ID: Pop
Description: Pop!_OS 22.04 LTS
Release: 22.04
Codename: jammy
09:36:43 jm@pop-os saleor-platform ±|main✔|→ uname -a
Linux pop-os 6.17.4-76061704-generic #202510191616~1762410050~22.04~898873a SMP PREEMPT_DYNAMIC Thu N x86_64 x86_64 x86_64 GNU/Linux
diff --git a/Tiltfile b/Tiltfile
index b3fbf8b..214353f 100644
--- a/Tiltfile
+++ b/Tiltfile
@@ -34,7 +34,7 @@ dc_resource('mailpit', labels=['backend'])
# Apply database migrations
local_resource(
name='apply-migrations',
- cmd='cd backend/saleor-platform && docker-compose run --rm api python3 manage.py migrate',
+ cmd='cd backend/saleor-platform && docker compose run --rm api python3 manage.py migrate',
deps=['backend/saleor-platform'],
resource_deps=['create-namespace'],
labels=['backend']
@@ -43,7 +43,7 @@ local_resource(
# Populate database with initial data
local_resource(
name='populate-db',
- cmd='cd backend/saleor-platform && docker-compose run --rm api python3 manage.py populatedb --createsuperuser',
+ cmd='cd backend/saleor-platform && docker compose run --rm api python3 manage.py populatedb --createsuperuser',
deps=['backend/saleor-platform'],
resource_deps=['apply-migrations'],
labels=['backend']
@@ -63,7 +63,7 @@ local_resource(
echo "Attempt $i: Checking API status..." && \
curl -v http://localhost:8000/graphql/ 2>&1 && \
echo "API is ready. Generating schema..." && \
- docker-compose run --rm api python3 manage.py get_graphql_schema > ../../frontend/storefront/schema.graphql && \
+ docker compose run --rm api python3 manage.py get_graphql_schema > ../../frontend/storefront/schema.graphql && \
echo "Schema generated. Checking file:" && \
ls -l ../../frontend/storefront/schema.graphql && \
head -n 5 ../../frontend/storefront/schema.graphql && \
@@ -215,7 +215,7 @@ local_resource(
if [ -f service/configurator/permission_setup_status ] && [ "$(cat service/configurator/permission_setup_status)" != "failed" ]; then
echo "✅ Permission setup completed successfully on attempt $attempt!"
TOKEN=$(cat service/configurator/permission_setup_status)
- echo "Token will be applied: ${TOKEN:0:5}..."
+ echo "Token will be applied: $(echo $TOKEN | cut -c1-5)..."
exit 0
else
echo "❌ Permission setup failed on attempt $attempt."
diff --git a/install.sh b/install.sh
old mode 100644
new mode 100755
index 5eb8509..8b9f874
--- a/install.sh
+++ b/install.sh
@@ -45,90 +45,44 @@ check_docker() {
fi
}
-# Check if jq is installed
-check_jq() {
- if ! command -v jq &> /dev/null; then
- echo "❌ jq not found"
- if [ "$OS" = "Darwin" ]; then
- echo "🔄 Installing jq for Mac..."
- if ! command -v brew &> /dev/null; then
- echo "❌ Homebrew is required but not installed"
- echo "Please install Homebrew first and try again"
- exit 1
- fi
- brew install jq
- elif [ "$OS" = "Linux" ]; then
- echo "🔄 Installing jq for Linux..."
- if command -v apt-get &> /dev/null; then
- sudo apt-get update
- sudo apt-get install -y jq
- elif command -v yum &> /dev/null; then
- sudo yum install -y jq
- elif command -v dnf &> /dev/null; then
- sudo dnf install -y jq
- else
- echo "⚠️ Unable to determine package manager. Please install jq manually:"
- echo "https://stedolan.github.io/jq/download/"
- exit 1
- fi
- else
- echo "⚠️ Please install jq manually from https://stedolan.github.io/jq/download/"
- exit 1
- fi
+# Check if kubectl is installed
+check_kubectl() {
+ if ! command -v kubectl &> /dev/null; then
+ echo "❌ kubectl not found"
+ echo "🔄 Installing kubectl for Linux..."
+
+ # Download the latest release of kubectl
+ curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.24.0/bin/linux/amd64/kubectl"
+ chmod +x kubectl
+ sudo mv kubectl /usr/local/bin/
+ echo "✅ kubectl is installed"
else
- echo "✅ jq is installed"
- jq_version=$(jq --version)
- echo "📦 jq version: $jq_version"
+ echo "✅ kubectl is already installed"
fi
}
-# Check if Tilt is installed
-check_tilt() {
- if ! command -v tilt &> /dev/null; then
- echo "❌ Tilt not found"
- if [ "$OS" = "Darwin" ]; then
- echo "🔄 Installing Tilt for Mac..."
- if ! command -v brew &> /dev/null; then
- echo "❌ Homebrew is required but not installed"
- echo "📥 Installing Homebrew..."
- if [ "$ARCH" = "arm64" ]; then
- echo "Using Homebrew installation for Apple Silicon Mac"
- /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
- eval "$(/opt/homebrew/bin/brew shellenv)"
- else
- echo "Using Homebrew installation for Intel Mac"
- /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- fi
- fi
- brew install tilt
- elif [ "$OS" = "Linux" ]; then
- echo "🔄 Installing Tilt for Linux..."
- curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
- else
- echo "⚠️ Please install Tilt manually from https://docs.tilt.dev/install.html"
- exit 1
- fi
+# Check if Minikube is installed
+check_minikube() {
+ if ! command -v minikube &> /dev/null; then
+ echo "❌ Minikube not found"
+ echo "🔄 Installing Minikube for Linux..."
+
+ # Install Minikube
+ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
+ chmod +x minikube
+ sudo mv minikube /usr/local/bin/
+ echo "✅ Minikube is installed"
else
- echo "✅ Tilt is installed"
- tilt_version=$(tilt version | head -n1 | awk '{print $2}')
- echo "📦 Tilt version: $tilt_version"
+ echo "✅ Minikube is already installed"
fi
}
-# Check if Kubernetes is enabled
-check_kubernetes() {
- if ! kubectl version &> /dev/null; then
- echo "❌ Kubernetes is not enabled"
- echo "⚠️ Please enable Kubernetes in Docker Desktop:"
- echo "1. Open Docker Desktop"
- echo "2. Go to Settings -> Kubernetes"
- echo "3. Check 'Enable Kubernetes'"
- echo "4. Click 'Apply & Restart'"
- exit 1
- else
- echo "✅ Kubernetes is enabled"
- fi
+# Start Minikube
+start_minikube() {
+ echo "🔄 Starting Minikube Kubernetes cluster..."
+ minikube start --driver=docker
+ export KUBEVIRTUAL_KUBECONFIG=$HOME/.kube/config
+ echo "✅ Minikube Kubernetes cluster is running"
}
# Pull required Docker images
@@ -142,10 +96,12 @@ pull_images() {
main() {
echo "🔍 Checking requirements..."
check_docker
- check_tilt
- check_kubernetes
- check_jq
+ check_minikube
+ check_kubectl
+ echo "🔧 Starting Minikube Kubernetes cluster..."
+ start_minikube
+
echo "🔧 Setting up environment..."
pull_images
@@ -161,4 +117,4 @@ Next steps:
}
# Run main installation
-main
\ No newline at end of file
+main
Even with those changes, when I go to run tilt up
Configuration fails:
Node.js v20.19.6
ELIFECYCLE Command failed with exit code 1.
[event: pod saleor/saleor-configurator-655dcc665b-m5d8r] Back-off restarting failed container saleor-configurator in pod saleor-configurator-655dcc665b-m5d8r_saleor(b296a33b-75ba-4418-b879-a9facdf3f181)
[event: pod saleor/saleor-configurator-655dcc665b-m5d8r] Container image "saleor-configurator:tilt-eb47d84fcf02744d" already present on machine
Detected container restart. Pod: saleor-configurator-655dcc665b-m5d8r. Container: saleor-configurator.
Using schema provided by volume mount
> saleor-configurator@ bootstrap /app
> tsx src/commands/bootstrap.ts
node:internal/modules/run_main:123
triggerUncaughtException(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/src/lib/graphql/client' imported from /app/src/commands/setup.ts
at finalizeResolution (node:internal/modules/esm/resolve:283:11)
at moduleResolve (node:internal/modules/esm/resolve:952:10)
at defaultResolve (node:internal/modules/esm/resolve:1188:11)
at nextResolve (node:internal/modules/esm/hooks:864:28)
at resolveBase (file:///app/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/esm/index.mjs?1766891376263:2:3744)
at async resolveDirectory (file:///app/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/esm/index.mjs?1766891376263:2:4237)
at async resolve (file:///app/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/esm/index.mjs?1766891376263:2:5355)
at async nextResolve (node:internal/modules/esm/hooks:864:22)
at async Hooks.resolve (node:internal/modules/esm/hooks:306:24)
at async handleMessage (node:internal/modules/esm/worker:196:18) {
code: 'ERR_MODULE_NOT_FOUND',
url: 'file:///app/src/lib/graphql/client'
}
graphql endpoints are busted for the saleor-dashboard:
Cannot query field "settings" on type "AppExtension".
Frontend doesn't compile:
[deps 6/6] RUN pnpm install --frozen-lockfile --prefer-offline
→ ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-9.6.0.tgz
→ ERR_PNPM_OUTDATED_LOCKFILE Cannot install with "frozen-lockfile" because pnpm-lock.yaml is not up to date with package.json
→
→ Note that in CI environments this setting is true by default. If you still need to run install in such cases, use "pnpm install --no-frozen-lockfile"
→
→ Failure reason:
→ specifiers in the lockfile ({"@adyen/adyen-web":"5.53.3","@adyen/api-library":"15.0.0-beta","@headlessui/react":"1.7.18","@saleor/auth-sdk":"1.0.1","@stripe/react-stripe-js":"2.6.2","@stripe/stripe-js":"2.2.0","@tailwindcss/container-queries":"0.1.1","clsx":"2.1.0","editorjs-html":"3.4.3","formik":"2.4.5","libphonenumber-js":"1.10.58","lodash-es":"4.17.21","lucide-react":"0.358.0","next":"14.1.3","query-string":"8.1.0","react":"18.2.0","react-dom":"18.2.0","react-error-boundary":"4.0.13","react-spinners":"0.13.8","react-test-renderer":"18.2.0","react-toastify":"9.1.3","sharp":"0.33.2","ts-invariant":"0.10.3","url-join":"5.0.0","urql":"4.0.6","xss":"1.0.15","yup":"1.3.2","zustand":"4.4.6","@graphql-codegen/cli":"5.0.0","@graphql-codegen/client-preset":"4.1.0","@graphql-typed-document-node/core":"3.2.0","@next/env":"14.0.4","@parcel/watcher":"2.3.0","@playwright/test":"1.40.1","@tailwindcss/forms":"0.5.7","@tailwindcss/typography":"0.5.10","@types/lodash-es":"4.17.12","@types/node":"20.10.0","@types/react":"18.2.38","@types/react-dom":"18.2.17","@types/url-join":"4.0.3","@typescript-eslint/eslint-plugin":"6.14.0","@typescript-eslint/parser":"6.14.0","autoprefixer":"10.4.16","eslint":"8.56.0","eslint-config-next":"14.0.4","eslint-config-prettier":"9.1.0","eslint-plugin-import":"2.29.1","eslint-plugin-playwright":"0.18.0","graphql-tag":"2.12.6","husky":"8.0.3","lint-staged":"15.1.0","postcss":"8.4.32","prettier":"3.1.1","prettier-plugin-tailwindcss":"0.5.9","schema-dts":"1.1.2","tailwindcss":"3.4.0","typescript":"5.3.3","wonka":"6.3.4"}) don't match specs in package.json ({"@graphql-codegen/cli":"5.0.0","@graphql-codegen/client-preset":"4.1.0","@graphql-typed-document-node/core":"3.2.0","@next/env":"14.0.4","@parcel/watcher":"2.3.0","@playwright/test":"1.40.1","@tailwindcss/forms":"0.5.7","@tailwindcss/typography":"0.5.10","@types/lodash-es":"4.17.12","@types/node":"20.10.0","@types/react":"18.2.38","@types/react-dom":"18.2.17","@types/url-join":"4.0.3","@typescript-eslint/eslint-plugin":"6.14.0","@typescript-eslint/parser":"6.14.0","autoprefixer":"10.4.16","eslint":"8.56.0","eslint-config-next":"14.0.4","eslint-config-prettier":"9.1.0","eslint-plugin-import":"2.29.1","eslint-plugin-playwright":"0.18.0","graphql-tag":"2.12.6","husky":"8.0.3","lint-staged":"15.1.0","postcss":"8.4.32","prettier":"3.1.1","prettier-plugin-tailwindcss":"0.5.9","schema-dts":"1.1.2","tailwindcss":"3.4.0","typescript":"5.3.3","wonka":"6.3.4","@adyen/adyen-web":"5.53.3","@adyen/api-library":"15.0.0-beta","@headlessui/react":"1.7.18","@saleor/auth-sdk":"1.0.1","@stripe/react-stripe-js":"2.6.2","@stripe/stripe-js":"2.2.0","@tailwindcss/container-queries":"0.1.1","clsx":"2.1.0","editorjs-html":"3.4.3","formik":"2.4.5","libphonenumber-js":"1.10.58","lodash-es":"4.17.21","lucide-react":"0.358.0","next":"14.2.35","query-string":"8.1.0","react":"18.2.0","react-dom":"18.2.0","react-error-boundary":"4.0.13","react-spinners":"0.13.8","react-test-renderer":"18.2.0","react-toastify":"9.1.3","sharp":"0.33.2","ts-invariant":"0.10.3","url-join":"5.0.0","urql":"4.0.6","xss":"1.0.15","yup":"1.3.2","zustand":"4.4.6"})
ERROR IN: [deps 6/6] RUN pnpm install --frozen-lockfile --prefer-offline
Build Failed: ImageBuild: process "/bin/sh -c pnpm install --frozen-lockfile --prefer-offline" did not complete successfully: exit code: 1