Skip to content

Environment Variables

Full reference of every environment variable used by AppStoreCat.

VariableDefaultRequiredDescription
APP_NAMEAppStoreCatNoApplication name
APP_ENVlocalYeslocal or production
APP_KEYYesEncryption key (generate with php artisan key:generate)
APP_DEBUGtrueNoEnable debug mode (false in production)
APP_URLhttp://localhost:7460YesBackend API base URL
FRONTEND_URLhttp://localhost:7461YesFrontend URL (used for CORS)
APP_LOCALEenNoDefault application locale
VariableDefaultRequiredDescription
DB_CONNECTIONmysqlNoDatabase driver
DB_HOSTappstorecat-mysqlYesMySQL hostname
DB_PORT3306NoMySQL port
DB_DATABASEappstorecatYesDatabase name
DB_USERNAMEsailYesDatabase username
DB_PASSWORDpasswordYesDatabase password
VariableDefaultRequiredDescription
APPSTORE_API_URLhttp://host.docker.internal:7462YesApp Store scraper base URL
GPLAY_API_URLhttp://host.docker.internal:7463YesGoogle Play scraper base URL
APPSTORE_TIMEOUT30NoApp Store request timeout (seconds)
GPLAY_TIMEOUT30NoGoogle Play request timeout (seconds)
VariableDefaultDescription
APPSTORE_THROTTLE_SYNC_JOBS5Maximum iOS sync jobs per minute
GPLAY_THROTTLE_SYNC_JOBS5Maximum Android sync jobs per minute
APPSTORE_THROTTLE_CHART_JOBS24Maximum iOS chart fetch jobs per minute
GPLAY_THROTTLE_CHART_JOBS37Maximum Android chart fetch jobs per minute
VariableDefaultDescription
SYNC_IOS_TRACKED_ENABLEDtrueEnable tracked iOS app sync
SYNC_IOS_TRACKED_REFRESH_HOURS24Hours between tracked iOS syncs
SYNC_IOS_TRACKED_BATCH_SIZE5Max iOS apps dispatched per 20-minute tick
SYNC_ANDROID_TRACKED_ENABLEDtrueEnable tracked Android app sync
SYNC_ANDROID_TRACKED_REFRESH_HOURS24Hours between tracked Android syncs
SYNC_ANDROID_TRACKED_BATCH_SIZE5Max Android apps dispatched per 20-minute tick

Each source can be toggled independently per platform. When a source is off, unknown apps arriving via that path are not added to the database.

VariableDefaultDescription
DISCOVER_IOS_ON_UNKNOWNtrueEnable iOS discovery from unknown sources
DISCOVER_IOS_ON_SEARCHtrueEnable iOS discovery from store search
DISCOVER_IOS_ON_TRENDINGtrueEnable iOS discovery from trending charts
DISCOVER_IOS_ON_PUBLISHER_APPStrueEnable iOS discovery from publisher app lists
DISCOVER_IOS_ON_REGISTERtrueEnable iOS discovery from the user register flow
DISCOVER_IOS_ON_IMPORTtrueEnable iOS discovery from publisher import
DISCOVER_IOS_ON_SIMILARtrueEnable iOS discovery via similar apps
DISCOVER_IOS_ON_CATEGORYtrueEnable iOS discovery from category listings
DISCOVER_IOS_ON_DIRECT_VISITfalseEnable iOS discovery from direct visits by external ID (when off, unknown app URLs return 404)
DISCOVER_ANDROID_ON_UNKNOWNtrueEnable Android discovery from unknown sources
DISCOVER_ANDROID_ON_SEARCHtrueEnable Android discovery from store search
DISCOVER_ANDROID_ON_TRENDINGtrueEnable Android discovery from trending charts
DISCOVER_ANDROID_ON_PUBLISHER_APPStrueEnable Android discovery from publisher app lists
DISCOVER_ANDROID_ON_REGISTERtrueEnable Android discovery from the user register flow
DISCOVER_ANDROID_ON_IMPORTtrueEnable Android discovery from publisher import
DISCOVER_ANDROID_ON_SIMILARtrueEnable Android discovery via similar apps
DISCOVER_ANDROID_ON_CATEGORYtrueEnable Android discovery from category listings
DISCOVER_ANDROID_ON_DIRECT_VISITfalseEnable Android discovery from direct visits by external ID (when off, unknown app URLs return 404)
VariableDefaultDescription
CHART_IOS_DAILY_SYNC_ENABLEDtrueEnable daily iOS chart sync
CHART_ANDROID_DAILY_SYNC_ENABLEDtrueEnable daily Android chart sync
VariableDefaultDescription
QUEUE_CONNECTIONredisQueue driver (development: redis, production: database)
CACHE_STOREredisCache driver (development: redis, production: file)
REDIS_HOSTappstorecat-redisRedis hostname
REDIS_PORT6379Redis port
REDIS_PASSWORDnullRedis password
VariableDefaultRequiredDescription
SESSION_DRIVERdatabaseNoSession storage driver
SESSION_LIFETIME120NoSession lifetime (minutes)
SESSION_DOMAINnullProductionCookie domain (e.g. .appstore.cat). Required when frontend and backend are on different subdomains under the same registered domain.
SESSION_SECURE_COOKIEfalseProductionSet to true when serving over HTTPS
SESSION_SAME_SITElaxNolax, strict, or none. Use none only with SESSION_SECURE_COOKIE=true for cross-site SPA.
SANCTUM_STATEFUL_DOMAINSProductionComma-separated list of frontend domains permitted to use cookie auth (e.g. appstore.cat,www.appstore.cat). Without this, SPA login silently fails.
SANCTUM_TOKEN_PREFIXNoOptional prefix prepended to all generated API tokens (helps with secret scanning)
BCRYPT_ROUNDS12NoPassword hashing cost
VariableDefaultDescription
LOG_CHANNELstackLog channel (development: stack, production: stderr for container-friendly logs)
LOG_STACKsingleChannels included in stack (comma-separated: single,daily,slack)
LOG_LEVELdebugMinimum log level (production: warning or error)
LOG_DAILY_DAYS14Retention (days) for the daily channel
LOG_DEPRECATIONS_CHANNELnullChannel for deprecation warnings (e.g. daily)

These are read by the production supervisord config inside the server container. Override at docker compose level via environment.

VariableDefaultDescription
SUPERVISOR_QUEUE_NUMPROCS2Number of queue:work worker processes
SUPERVISOR_QUEUE_TIMEOUT120Per-job timeout (seconds)
SUPERVISOR_QUEUE_TRIES3Max retry attempts before failed_jobs
SUPERVISOR_QUEUE_BACKOFF60Backoff (seconds) between retries
SUPERVISOR_QUEUESdefault,sync-tracked-ios,sync-tracked-android,sync-on-demand-ios,sync-on-demand-android,charts-ios,charts-androidComma-separated queue priority order
SCHEDULER_ENABLEDtrueRun Laravel scheduler inside the server container (set false if you run it externally)

Set in the root .env. Read by Vite during the web container build.

VariableDefaultDescription
BACKEND_URLhttp://appstorecat-server:80Where the SPA proxies API requests to (Docker-internal)
GA_MEASUREMENT_IDGoogle Analytics 4 ID. Leave empty to disable. Safe to expose (client-side ID).

Read by @appstorecat/mcp (the MCP server is a separate Node.js process spawned by Claude Code; these are NOT set in the Laravel .env).

VariableDefaultRequiredDescription
APPSTORECAT_API_TOKENYesSanctum bearer token. Created from the web UI: Settings → API Tokens → Create.
APPSTORECAT_API_URLhttp://localhost:7460/api/v1NoAPI base URL. Use https://server.appstore.cat/api/v1 for the hosted demo.
VariableDefaultDescription
L5_SWAGGER_GENERATE_ALWAYStrueAuto-generate API documentation (false in production)

These are set in the root .env file (not server/.env):

VariableDefaultService
BACKEND_PORT7460Backend API
FRONTEND_PORT7461Frontend
APPSTORE_API_PORT7462App Store scraper
GPLAY_API_PORT7463Google Play scraper
FORWARD_DB_PORT7464MySQL (host-side mapping for container port 3306)
FORWARD_REDIS_PORT7465Redis (host-side mapping for container port 6379)