✅ BullMQ job queue system installed and configured ✅ Zod validation schemas for all collections ✅ Spintax validator with integrity checks ✅ Work log helper for centralized logging ✅ Transaction wrapper for safe database operations ✅ Batch operation utilities with rate limiting ✅ Circuit breaker for WordPress/Directus resilience ✅ Dry-run mode for preview generation ✅ Version management system ✅ Environment configuration This establishes the bulletproof infrastructure for Spark Alpha.
1 line
27 KiB
JSON
1 line
27 KiB
JSON
[{"uuid":"o4g44o00oso00o0c04k8kks0","name":"fastapi\/full-stack-fastapi-template:main-xoccooocgoc4c84gwkwcscw4","additional_networks_count":0,"additional_servers":[],"additional_servers_count":0,"base_directory":"\/backend","build_command":null,"build_pack":"dockerfile","compose_parsing_version":"5","config_hash":"2c1daba40a7eaf272faf480df4aba342","custom_docker_run_options":null,"custom_healthcheck_found":false,"custom_labels":"dHJhZWZpay5lbmFibGU9dHJ1ZQp0cmFlZmlrLmh0dHAubWlkZGxld2FyZXMuZ3ppcC5jb21wcmVzcz10cnVlCnRyYWVmaWsuaHR0cC5taWRkbGV3YXJlcy5yZWRpcmVjdC10by1odHRwcy5yZWRpcmVjdHNjaGVtZS5zY2hlbWU9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLW80ZzQ0bzAwb3NvMDBvMGMwNGs4a2tzMC5lbnRyeVBvaW50cz1odHRwCnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHAtMC1vNGc0NG8wMG9zbzAwbzBjMDRrOGtrczAubWlkZGxld2FyZXM9cmVkaXJlY3QtdG8taHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLW80ZzQ0bzAwb3NvMDBvMGMwNGs4a2tzMC5ydWxlPUhvc3QoYGNvcmUuanVtcHN0YXJ0c2NhbGluZy5jb21gKSAmJiBQYXRoUHJlZml4KGAvYCkKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cC0wLW80ZzQ0bzAwb3NvMDBvMGMwNGs4a2tzMC5zZXJ2aWNlPWh0dHAtMC1vNGc0NG8wMG9zbzAwbzBjMDRrOGtrczAKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1vNGc0NG8wMG9zbzAwbzBjMDRrOGtrczAuZW50cnlQb2ludHM9aHR0cHMKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1vNGc0NG8wMG9zbzAwbzBjMDRrOGtrczAubWlkZGxld2FyZXM9Z3ppcAp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLW80ZzQ0bzAwb3NvMDBvMGMwNGs4a2tzMC5ydWxlPUhvc3QoYGNvcmUuanVtcHN0YXJ0c2NhbGluZy5jb21gKSAmJiBQYXRoUHJlZml4KGAvYCkKdHJhZWZpay5odHRwLnJvdXRlcnMuaHR0cHMtMC1vNGc0NG8wMG9zbzAwbzBjMDRrOGtrczAuc2VydmljZT1odHRwcy0wLW80ZzQ0bzAwb3NvMDBvMGMwNGs4a2tzMAp0cmFlZmlrLmh0dHAucm91dGVycy5odHRwcy0wLW80ZzQ0bzAwb3NvMDBvMGMwNGs4a2tzMC50bHMuY2VydHJlc29sdmVyPWxldHNlbmNyeXB0CnRyYWVmaWsuaHR0cC5yb3V0ZXJzLmh0dHBzLTAtbzRnNDRvMDBvc28wMG8wYzA0azhra3MwLnRscz10cnVlCnRyYWVmaWsuaHR0cC5zZXJ2aWNlcy5odHRwLTAtbzRnNDRvMDBvc28wMG8wYzA0azhra3MwLmxvYWRiYWxhbmNlci5zZXJ2ZXIucG9ydD0zMDAwCnRyYWVmaWsuaHR0cC5zZXJ2aWNlcy5odHRwcy0wLW80ZzQ0bzAwb3NvMDBvMGMwNGs4a2tzMC5sb2FkYmFsYW5jZXIuc2VydmVyLnBvcnQ9MzAwMApjYWRkeV8wLmVuY29kZT16c3RkIGd6aXAKY2FkZHlfMC5oYW5kbGVfcGF0aC4wX3JldmVyc2VfcHJveHk9e3t1cHN0cmVhbXMgMzAwMH19CmNhZGR5XzAuaGFuZGxlX3BhdGg9LyoKY2FkZHlfMC5oZWFkZXI9LVNlcnZlcgpjYWRkeV8wLnRyeV9maWxlcz17cGF0aH0gL2luZGV4Lmh0bWwgL2luZGV4LnBocApjYWRkeV8wPWh0dHBzOi8vY29yZS5qdW1wc3RhcnRzY2FsaW5nLmNvbQpjYWRkeV9pbmdyZXNzX25ldHdvcms9Y29vbGlmeQ==","custom_network_aliases":null,"custom_nginx_configuration":"","deleted_at":null,"description":"","destination":{"id":0,"name":"coolify","uuid":"u448csk40w8kkos8o0o48kos","network":"coolify","server_id":0,"created_at":"2025-11-23T19:46:10.000000Z","updated_at":"2025-11-23T19:46:10.000000Z","server":{"id":0,"uuid":"ys0sckwok0o4g4skgc804wk8","name":"localhost","description":"This is the server where Coolify is running on. Don't delete this!","ip":"host.docker.internal","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","redirect_enabled":true,"last_saved_settings":"7f6c943bffb399129a3e1e1780efd4a3","last_applied_settings":"7f6c943bffb399129a3e1e1780efd4a3","force_stop":false},"created_at":"2025-11-23T19:46:10.000000Z","updated_at":"2025-12-13T13:52:16.000000Z","unreachable_notification_sent":false,"unreachable_count":0,"high_disk_usage_notification_sent":false,"log_drain_notification_sent":false,"swarm_cluster":null,"validation_logs":null,"sentinel_updated_at":"2025-12-13 13:52:16","deleted_at":null,"ip_previous":"host.docker.internal","hetzner_server_id":null,"cloud_provider_token_id":null,"hetzner_server_status":null,"is_validating":false,"is_coolify_host":true,"settings":{"id":1,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":0,"created_at":"2025-11-23T19:46:10.000000Z","updated_at":"2025-11-27T18:48:21.000000Z","wildcard_domain":null,"is_cloudflare_tunnel":false,"is_logdrain_newrelic_enabled":false,"logdrain_newrelic_license_key":null,"logdrain_newrelic_base_uri":null,"is_logdrain_highlight_enabled":false,"logdrain_highlight_project_id":null,"is_logdrain_axiom_enabled":false,"logdrain_axiom_dataset_name":null,"logdrain_axiom_api_key":null,"is_swarm_worker":false,"is_logdrain_custom_enabled":false,"logdrain_custom_config":null,"logdrain_custom_config_parser":null,"concurrent_builds":4,"dynamic_timeout":3600,"force_disabled":false,"is_metrics_enabled":true,"generate_exact_labels":false,"force_docker_cleanup":true,"docker_cleanup_frequency":"0 0 * * *","docker_cleanup_threshold":80,"server_timezone":"UTC","delete_unused_volumes":false,"delete_unused_networks":false,"is_sentinel_enabled":true,"sentinel_token":"eyJpdiI6ImRVUDJCT2wvYzBZa2EvYWR3Q0NHWUE9PSIsInZhbHVlIjoicm1pSUdsVXJJZUJEK0xNQldUSm5HT1FiUkl3cC9WRTJSd3ljL3owa1Exbnk5SXAzb1hyUW51OWxiajhqVjlwRlM0bCswVEltNkZNc0VEbVQyOHNCZUE9PSIsIm1hYyI6Ijc2NjMzZWE3NjI2NjdkODk1MDcyMzI1OTk3ZWU4M2I2YTk3NTBhYTBjMGVmM2Q0ODA4NDQ3Mjk4ZDgzM2UwMDIiLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/host.docker.internal:8000","server_disk_usage_notification_threshold":80,"is_sentinel_debug_enabled":false,"server_disk_usage_check_frequency":"0 23 * * *","is_terminal_enabled":true}}},"destination_id":0,"destination_type":"App\\Models\\StandaloneDocker","docker_compose":null,"docker_compose_custom_build_command":null,"docker_compose_custom_start_command":null,"docker_compose_domains":"[]","docker_compose_location":"\/docker-compose.yaml","docker_compose_raw":null,"docker_registry_image_name":null,"docker_registry_image_tag":null,"dockerfile":null,"dockerfile_location":"\/Dockerfile","dockerfile_target_build":null,"environment_id":17,"fqdn":"https:\/\/core.jumpstartscaling.com","git_branch":"master","git_commit_sha":"HEAD","git_full_url":null,"git_repository":"fastapi\/full-stack-fastapi-template","health_check_enabled":false,"health_check_host":"localhost","health_check_interval":5,"health_check_method":"GET","health_check_path":"\/","health_check_port":null,"health_check_response_text":null,"health_check_retries":10,"health_check_return_code":200,"health_check_scheme":"http","health_check_start_period":5,"health_check_timeout":5,"http_basic_auth_password":null,"http_basic_auth_username":null,"install_command":null,"is_http_basic_auth_enabled":false,"laravel_through_key":16,"last_online_at":"2025-12-13 13:52:17","last_restart_at":"2025-12-13T13:51:27.000000Z","last_restart_type":"crash","limits_cpu_shares":1024,"limits_cpus":"0","limits_cpuset":null,"limits_memory":"0","limits_memory_reservation":"0","limits_memory_swap":"0","limits_memory_swappiness":60,"manual_webhook_secret_bitbucket":null,"manual_webhook_secret_gitea":null,"manual_webhook_secret_github":null,"manual_webhook_secret_gitlab":null,"ports_exposes":"3000","ports_mappings":null,"post_deployment_command":null,"post_deployment_command_container":null,"pre_deployment_command":null,"pre_deployment_command_container":null,"preview_url_template":"{{pr_id}}.{{domain}}","private_key_id":null,"publish_directory":"\/","redirect":"both","repository_project_id":null,"restart_count":7030,"server_status":true,"source_id":0,"source_type":"App\\Models\\GithubApp","start_command":"fastapi run app\/main.py --port 8000 --host 0.0.0.0","static_image":"nginx:alpine","status":"exited:unhealthy","swarm_placement_constraints":null,"swarm_replicas":1,"watch_paths":null,"created_at":"2025-12-08T13:07:26.000000Z","updated_at":"2025-12-13T13:52:17.000000Z"},{"uuid":"i8cswkos04c4s08404ok0ws4","name":"Jumpstart App","additional_networks_count":0,"additional_servers":[],"additional_servers_count":0,"base_directory":"\/","build_command":null,"build_pack":"dockercompose","compose_parsing_version":"5","config_hash":"ea57fafac1499340c202de91e1712ebd","custom_docker_run_options":null,"custom_healthcheck_found":false,"custom_labels":"","custom_network_aliases":null,"custom_nginx_configuration":"","deleted_at":null,"description":"","destination":{"id":0,"name":"coolify","uuid":"u448csk40w8kkos8o0o48kos","network":"coolify","server_id":0,"created_at":"2025-11-23T19:46:10.000000Z","updated_at":"2025-11-23T19:46:10.000000Z","server":{"id":0,"uuid":"ys0sckwok0o4g4skgc804wk8","name":"localhost","description":"This is the server where Coolify is running on. Don't delete this!","ip":"host.docker.internal","port":22,"user":"root","team_id":0,"private_key_id":0,"proxy":{"type":"TRAEFIK","status":"running","redirect_enabled":true,"last_saved_settings":"7f6c943bffb399129a3e1e1780efd4a3","last_applied_settings":"7f6c943bffb399129a3e1e1780efd4a3","force_stop":false},"created_at":"2025-11-23T19:46:10.000000Z","updated_at":"2025-12-13T13:52:16.000000Z","unreachable_notification_sent":false,"unreachable_count":0,"high_disk_usage_notification_sent":false,"log_drain_notification_sent":false,"swarm_cluster":null,"validation_logs":null,"sentinel_updated_at":"2025-12-13 13:52:16","deleted_at":null,"ip_previous":"host.docker.internal","hetzner_server_id":null,"cloud_provider_token_id":null,"hetzner_server_status":null,"is_validating":false,"is_coolify_host":true,"settings":{"id":1,"is_swarm_manager":false,"is_jump_server":false,"is_build_server":false,"is_reachable":true,"is_usable":true,"server_id":0,"created_at":"2025-11-23T19:46:10.000000Z","updated_at":"2025-11-27T18:48:21.000000Z","wildcard_domain":null,"is_cloudflare_tunnel":false,"is_logdrain_newrelic_enabled":false,"logdrain_newrelic_license_key":null,"logdrain_newrelic_base_uri":null,"is_logdrain_highlight_enabled":false,"logdrain_highlight_project_id":null,"is_logdrain_axiom_enabled":false,"logdrain_axiom_dataset_name":null,"logdrain_axiom_api_key":null,"is_swarm_worker":false,"is_logdrain_custom_enabled":false,"logdrain_custom_config":null,"logdrain_custom_config_parser":null,"concurrent_builds":4,"dynamic_timeout":3600,"force_disabled":false,"is_metrics_enabled":true,"generate_exact_labels":false,"force_docker_cleanup":true,"docker_cleanup_frequency":"0 0 * * *","docker_cleanup_threshold":80,"server_timezone":"UTC","delete_unused_volumes":false,"delete_unused_networks":false,"is_sentinel_enabled":true,"sentinel_token":"eyJpdiI6ImRVUDJCT2wvYzBZa2EvYWR3Q0NHWUE9PSIsInZhbHVlIjoicm1pSUdsVXJJZUJEK0xNQldUSm5HT1FiUkl3cC9WRTJSd3ljL3owa1Exbnk5SXAzb1hyUW51OWxiajhqVjlwRlM0bCswVEltNkZNc0VEbVQyOHNCZUE9PSIsIm1hYyI6Ijc2NjMzZWE3NjI2NjdkODk1MDcyMzI1OTk3ZWU4M2I2YTk3NTBhYTBjMGVmM2Q0ODA4NDQ3Mjk4ZDgzM2UwMDIiLCJ0YWciOiIifQ==","sentinel_metrics_refresh_rate_seconds":10,"sentinel_metrics_history_days":7,"sentinel_push_interval_seconds":60,"sentinel_custom_url":"http:\/\/host.docker.internal:8000","server_disk_usage_notification_threshold":80,"is_sentinel_debug_enabled":false,"server_disk_usage_check_frequency":"0 23 * * *","is_terminal_enabled":true}}},"destination_id":0,"destination_type":"App\\Models\\StandaloneDocker","docker_compose":"services:\n directus:\n build:\n context: .\n dockerfile: directus.Dockerfile\n volumes:\n - 'i8cswkos04c4s08404ok0ws4_directus-uploads:\/directus\/uploads'\n - 'i8cswkos04c4s08404ok0ws4_directus-extensions:\/directus\/extensions'\n - 'i8cswkos04c4s08404ok0ws4_directus-templates:\/directus\/templates'\n environment:\n SERVICE_URL_DIRECTUS_8055: ''\n KEY: $SERVICE_BASE64_64_KEY\n SECRET: $SERVICE_BASE64_64_SECRET\n ADMIN_EMAIL: '${ADMIN_EMAIL:-admin@example.com}'\n ADMIN_PASSWORD: $SERVICE_PASSWORD_ADMIN\n DB_CLIENT: postgres\n DB_HOST: postgresql\n DB_PORT: '5432'\n DB_DATABASE: '${POSTGRESQL_DATABASE:-directus}'\n DB_USER: $SERVICE_USER_POSTGRESQL\n DB_PASSWORD: $SERVICE_PASSWORD_POSTGRESQL\n CACHE_ENABLED: 'false'\n CACHE_STORE: memory\n WEBSOCKETS_ENABLED: 'true'\n COOLIFY_BRANCH: '\"main\"'\n COOLIFY_RESOURCE_UUID: i8cswkos04c4s08404ok0ws4\n COOLIFY_CONTAINER_NAME: directus-i8cswkos04c4s08404ok0ws4-133142873227\n SERVICE_URL_DIRECTUS: 'https:\/\/spark.jumpstartscaling.com'\n SERVICE_FQDN_DIRECTUS: spark.jumpstartscaling.com\n SERVICE_URL_FRONTEND: 'https:\/\/launch.jumpstartscaling.com'\n SERVICE_FQDN_FRONTEND: launch.jumpstartscaling.com\n COOLIFY_URL: 'https:\/\/spark.jumpstartscaling.com'\n COOLIFY_FQDN: spark.jumpstartscaling.com\n SERVICE_NAME_DIRECTUS: directus\n SERVICE_NAME_POSTGRESQL: postgresql\n SERVICE_NAME_REDIS: redis\n SERVICE_NAME_FRONTEND: frontend\n labels:\n - traefik.enable=true\n - traefik.http.routers.directus.rule=Host(`spark.jumpstartscaling.com`)\n - traefik.http.routers.directus.entrypoints=https\n - traefik.http.routers.directus.tls.certresolver=letsencrypt\n - traefik.http.services.directus.loadbalancer.server.port=8055\n - traefik.docker.network=coolify\n - traefik.http.services.directus.loadbalancer.server.scheme=http\n - coolify.managed=true\n - coolify.version=4.0.0-beta.444\n - coolify.applicationId=13\n - coolify.type=application\n - coolify.name=directus-i8cswkos04c4s08404ok0ws4-133142873227\n - coolify.resourceName=jumpstart-app\n - coolify.projectName=blog-network-live\n - coolify.serviceName=jumpstart-app\n - coolify.environmentName=production\n - coolify.pullRequestId=0\n - traefik.enable=true\n - traefik.http.middlewares.gzip.compress=true\n - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https\n - traefik.http.routers.http-0-i8cswkos04c4s08404ok0ws4-directus.entryPoints=http\n - traefik.http.routers.http-0-i8cswkos04c4s08404ok0ws4-directus.middlewares=redirect-to-https\n - 'traefik.http.routers.http-0-i8cswkos04c4s08404ok0ws4-directus.rule=Host(`spark.jumpstartscaling.com`) && PathPrefix(`\/`)'\n - traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-directus.entryPoints=https\n - traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-directus.middlewares=gzip\n - 'traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-directus.rule=Host(`spark.jumpstartscaling.com`) && PathPrefix(`\/`)'\n - traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-directus.tls.certresolver=letsencrypt\n - traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-directus.tls=true\n - 'caddy_0.encode=zstd gzip'\n - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}'\n - 'caddy_0.handle_path=\/*'\n - caddy_0.header=-Server\n - 'caddy_0.try_files={path} \/index.html \/index.php'\n - 'caddy_0=https:\/\/spark.jumpstartscaling.com'\n - caddy_ingress_network=i8cswkos04c4s08404ok0ws4\n healthcheck:\n test:\n - CMD\n - wget\n - '-q'\n - '--spider'\n - 'http:\/\/127.0.0.1:8055\/admin\/login'\n interval: 5s\n timeout: 20s\n retries: 10\n depends_on:\n postgresql:\n condition: service_healthy\n networks:\n coolify: null\n default: null\n i8cswkos04c4s08404ok0ws4: null\n container_name: directus-i8cswkos04c4s08404ok0ws4-133142873227\n restart: unless-stopped\n env_file:\n - .env\n postgresql:\n image: 'postgis\/postgis:16-3.4-alpine'\n platform: linux\/amd64\n volumes:\n - 'i8cswkos04c4s08404ok0ws4_directus-postgresql-data:\/var\/lib\/postgresql\/data'\n environment:\n POSTGRES_USER: '${SERVICE_USER_POSTGRESQL}'\n POSTGRES_PASSWORD: '${SERVICE_PASSWORD_POSTGRESQL}'\n POSTGRES_DB: '${POSTGRESQL_DATABASE:-directus}'\n SERVICE_USER_POSTGRESQL: '${SERVICE_USER_POSTGRESQL}'\n SERVICE_PASSWORD_POSTGRESQL: '${SERVICE_PASSWORD_POSTGRESQL}'\n COOLIFY_BRANCH: '\"main\"'\n COOLIFY_RESOURCE_UUID: i8cswkos04c4s08404ok0ws4\n COOLIFY_CONTAINER_NAME: postgresql-i8cswkos04c4s08404ok0ws4-133142913163\n SERVICE_URL_DIRECTUS: 'https:\/\/spark.jumpstartscaling.com'\n SERVICE_FQDN_DIRECTUS: spark.jumpstartscaling.com\n SERVICE_URL_FRONTEND: 'https:\/\/launch.jumpstartscaling.com'\n SERVICE_FQDN_FRONTEND: launch.jumpstartscaling.com\n SERVICE_NAME_DIRECTUS: directus\n SERVICE_NAME_POSTGRESQL: postgresql\n SERVICE_NAME_REDIS: redis\n SERVICE_NAME_FRONTEND: frontend\n healthcheck:\n test:\n - CMD-SHELL\n - 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'\n interval: 5s\n timeout: 20s\n retries: 10\n container_name: postgresql-i8cswkos04c4s08404ok0ws4-133142913163\n restart: unless-stopped\n labels:\n - coolify.managed=true\n - coolify.version=4.0.0-beta.444\n - coolify.applicationId=13\n - coolify.type=application\n - coolify.name=postgresql-i8cswkos04c4s08404ok0ws4-133142913163\n - coolify.resourceName=jumpstart-app\n - coolify.projectName=blog-network-live\n - coolify.serviceName=jumpstart-app\n - coolify.environmentName=production\n - coolify.pullRequestId=0\n networks:\n i8cswkos04c4s08404ok0ws4: null\n env_file:\n - .env\n redis:\n image: 'redis:7-alpine'\n command: 'redis-server --appendonly yes'\n volumes:\n - 'i8cswkos04c4s08404ok0ws4_directus-redis-data:\/data'\n healthcheck:\n test:\n - CMD\n - redis-cli\n - ping\n interval: 5s\n timeout: 20s\n retries: 10\n container_name: redis-i8cswkos04c4s08404ok0ws4-133142923395\n restart: unless-stopped\n labels:\n - coolify.managed=true\n - coolify.version=4.0.0-beta.444\n - coolify.applicationId=13\n - coolify.type=application\n - coolify.name=redis-i8cswkos04c4s08404ok0ws4-133142923395\n - coolify.resourceName=jumpstart-app\n - coolify.projectName=blog-network-live\n - coolify.serviceName=jumpstart-app\n - coolify.environmentName=production\n - coolify.pullRequestId=0\n networks:\n i8cswkos04c4s08404ok0ws4: null\n environment:\n COOLIFY_BRANCH: '\"main\"'\n COOLIFY_RESOURCE_UUID: i8cswkos04c4s08404ok0ws4\n COOLIFY_CONTAINER_NAME: redis-i8cswkos04c4s08404ok0ws4-133142923395\n SERVICE_URL_DIRECTUS: 'https:\/\/spark.jumpstartscaling.com'\n SERVICE_FQDN_DIRECTUS: spark.jumpstartscaling.com\n SERVICE_URL_FRONTEND: 'https:\/\/launch.jumpstartscaling.com'\n SERVICE_FQDN_FRONTEND: launch.jumpstartscaling.com\n SERVICE_NAME_DIRECTUS: directus\n SERVICE_NAME_POSTGRESQL: postgresql\n SERVICE_NAME_REDIS: redis\n SERVICE_NAME_FRONTEND: frontend\n env_file:\n - .env\n frontend:\n build:\n context: .\/frontend\n dockerfile: Dockerfile\n environment:\n PUBLIC_DIRECTUS_URL: 'https:\/\/spark.jumpstartscaling.com'\n DIRECTUS_ADMIN_TOKEN: '${DIRECTUS_ADMIN_TOKEN:-}'\n PUBLIC_PLATFORM_DOMAIN: launch.jumpstartscaling.com\n COOLIFY_BRANCH: '\"main\"'\n COOLIFY_RESOURCE_UUID: i8cswkos04c4s08404ok0ws4\n COOLIFY_CONTAINER_NAME: frontend-i8cswkos04c4s08404ok0ws4-133142929682\n SERVICE_URL_DIRECTUS: 'https:\/\/spark.jumpstartscaling.com'\n SERVICE_FQDN_DIRECTUS: spark.jumpstartscaling.com\n SERVICE_URL_FRONTEND: 'https:\/\/launch.jumpstartscaling.com'\n SERVICE_FQDN_FRONTEND: launch.jumpstartscaling.com\n COOLIFY_URL: 'https:\/\/launch.jumpstartscaling.com'\n COOLIFY_FQDN: launch.jumpstartscaling.com\n SERVICE_NAME_DIRECTUS: directus\n SERVICE_NAME_POSTGRESQL: postgresql\n SERVICE_NAME_REDIS: redis\n SERVICE_NAME_FRONTEND: frontend\n labels:\n - traefik.enable=true\n - traefik.http.routers.frontend.rule=Host(`launch.jumpstartscaling.com`)\n - traefik.http.routers.frontend.entrypoints=https\n - traefik.http.routers.frontend.tls.certresolver=letsencrypt\n - traefik.http.services.frontend.loadbalancer.server.port=4321\n - traefik.docker.network=coolify\n - coolify.managed=true\n - coolify.version=4.0.0-beta.444\n - coolify.applicationId=13\n - coolify.type=application\n - coolify.name=frontend-i8cswkos04c4s08404ok0ws4-133142929682\n - coolify.resourceName=jumpstart-app\n - coolify.projectName=blog-network-live\n - coolify.serviceName=jumpstart-app\n - coolify.environmentName=production\n - coolify.pullRequestId=0\n - traefik.enable=true\n - traefik.http.middlewares.gzip.compress=true\n - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https\n - traefik.http.routers.http-0-i8cswkos04c4s08404ok0ws4-frontend.entryPoints=http\n - traefik.http.routers.http-0-i8cswkos04c4s08404ok0ws4-frontend.middlewares=redirect-to-https\n - 'traefik.http.routers.http-0-i8cswkos04c4s08404ok0ws4-frontend.rule=Host(`launch.jumpstartscaling.com`) && PathPrefix(`\/`)'\n - traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-frontend.entryPoints=https\n - traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-frontend.middlewares=gzip\n - 'traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-frontend.rule=Host(`launch.jumpstartscaling.com`) && PathPrefix(`\/`)'\n - traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-frontend.tls.certresolver=letsencrypt\n - traefik.http.routers.https-0-i8cswkos04c4s08404ok0ws4-frontend.tls=true\n - 'caddy_0.encode=zstd gzip'\n - 'caddy_0.handle_path.0_reverse_proxy={{upstreams}}'\n - 'caddy_0.handle_path=\/*'\n - caddy_0.header=-Server\n - 'caddy_0.try_files={path} \/index.html \/index.php'\n - 'caddy_0=https:\/\/launch.jumpstartscaling.com'\n - caddy_ingress_network=i8cswkos04c4s08404ok0ws4\n depends_on:\n - directus\n networks:\n coolify: null\n default: null\n i8cswkos04c4s08404ok0ws4: null\n container_name: frontend-i8cswkos04c4s08404ok0ws4-133142929682\n restart: unless-stopped\n env_file:\n - .env\nvolumes:\n i8cswkos04c4s08404ok0ws4_directus-uploads:\n name: i8cswkos04c4s08404ok0ws4_directus-uploads\n i8cswkos04c4s08404ok0ws4_directus-extensions:\n name: i8cswkos04c4s08404ok0ws4_directus-extensions\n i8cswkos04c4s08404ok0ws4_directus-templates:\n name: i8cswkos04c4s08404ok0ws4_directus-templates\n i8cswkos04c4s08404ok0ws4_directus-postgresql-data:\n name: i8cswkos04c4s08404ok0ws4_directus-postgresql-data\n i8cswkos04c4s08404ok0ws4_directus-redis-data:\n name: i8cswkos04c4s08404ok0ws4_directus-redis-data\nnetworks:\n coolify:\n external: true\n i8cswkos04c4s08404ok0ws4:\n name: i8cswkos04c4s08404ok0ws4\n external: true\n","docker_compose_custom_build_command":null,"docker_compose_custom_start_command":null,"docker_compose_domains":"{\"directus\":{\"domain\":\"https:\\\/\\\/spark.jumpstartscaling.com\"},\"frontend\":{\"domain\":\"https:\\\/\\\/launch.jumpstartscaling.com\"}}","docker_compose_location":"\/docker-compose.yaml","docker_compose_raw":"services:\n directus:\n build:\n context: .\n dockerfile: directus.Dockerfile\n volumes:\n - 'directus-uploads:\/directus\/uploads'\n - 'directus-extensions:\/directus\/extensions'\n - 'directus-templates:\/directus\/templates'\n environment:\n - SERVICE_URL_DIRECTUS_8055\n - KEY=$SERVICE_BASE64_64_KEY\n - SECRET=$SERVICE_BASE64_64_SECRET\n - 'ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}'\n - ADMIN_PASSWORD=$SERVICE_PASSWORD_ADMIN\n - DB_CLIENT=postgres\n - DB_HOST=postgresql\n - DB_PORT=5432\n - 'DB_DATABASE=${POSTGRESQL_DATABASE:-directus}'\n - DB_USER=$SERVICE_USER_POSTGRESQL\n - DB_PASSWORD=$SERVICE_PASSWORD_POSTGRESQL\n - CACHE_ENABLED=false\n - CACHE_STORE=memory\n - WEBSOCKETS_ENABLED=true\n labels:\n - traefik.enable=true\n - traefik.http.routers.directus.rule=Host(`spark.jumpstartscaling.com`)\n - traefik.http.routers.directus.entrypoints=https\n - traefik.http.routers.directus.tls.certresolver=letsencrypt\n - traefik.http.services.directus.loadbalancer.server.port=8055\n - traefik.docker.network=coolify\n - traefik.http.services.directus.loadbalancer.server.scheme=http\n healthcheck:\n test:\n - CMD\n - wget\n - '-q'\n - '--spider'\n - 'http:\/\/127.0.0.1:8055\/admin\/login'\n interval: 5s\n timeout: 20s\n retries: 10\n depends_on:\n postgresql:\n condition: service_healthy\n networks:\n - coolify\n - default\n postgresql:\n image: 'postgis\/postgis:16-3.4-alpine'\n platform: linux\/amd64\n volumes:\n - 'directus-postgresql-data:\/var\/lib\/postgresql\/data'\n environment:\n - 'POSTGRES_USER=${SERVICE_USER_POSTGRESQL}'\n - 'POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}'\n - 'POSTGRES_DB=${POSTGRESQL_DATABASE:-directus}'\n healthcheck:\n test:\n - CMD-SHELL\n - 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'\n interval: 5s\n timeout: 20s\n retries: 10\n redis:\n image: 'redis:7-alpine'\n command: 'redis-server --appendonly yes'\n volumes:\n - 'directus-redis-data:\/data'\n healthcheck:\n test:\n - CMD\n - redis-cli\n - ping\n interval: 5s\n timeout: 20s\n retries: 10\n frontend:\n build:\n context: .\/frontend\n dockerfile: Dockerfile\n environment:\n - 'PUBLIC_DIRECTUS_URL=https:\/\/spark.jumpstartscaling.com'\n - 'DIRECTUS_ADMIN_TOKEN=${DIRECTUS_ADMIN_TOKEN:-}'\n - PUBLIC_PLATFORM_DOMAIN=launch.jumpstartscaling.com\n labels:\n - traefik.enable=true\n - traefik.http.routers.frontend.rule=Host(`launch.jumpstartscaling.com`)\n - traefik.http.routers.frontend.entrypoints=https\n - traefik.http.routers.frontend.tls.certresolver=letsencrypt\n - traefik.http.services.frontend.loadbalancer.server.port=4321\n - traefik.docker.network=coolify\n depends_on:\n - directus\n networks:\n - coolify\n - default\nvolumes:\n directus-uploads: null\n directus-extensions: null\n directus-templates: null\n directus-postgresql-data: null\n directus-redis-data: null\nnetworks:\n coolify:\n external: true\n","docker_registry_image_name":null,"docker_registry_image_tag":null,"dockerfile":null,"dockerfile_location":"\/Dockerfile","dockerfile_target_build":null,"environment_id":23,"fqdn":null,"git_branch":"main","git_commit_sha":"HEAD","git_full_url":null,"git_repository":"jumpstartscaling\/net","health_check_enabled":false,"health_check_host":"localhost","health_check_interval":5,"health_check_method":"GET","health_check_path":"\/","health_check_port":null,"health_check_response_text":null,"health_check_retries":10,"health_check_return_code":200,"health_check_scheme":"http","health_check_start_period":5,"health_check_timeout":5,"http_basic_auth_password":null,"http_basic_auth_username":null,"install_command":null,"is_http_basic_auth_enabled":false,"laravel_through_key":19,"last_online_at":"2025-12-13 13:52:17","last_restart_at":null,"last_restart_type":null,"limits_cpu_shares":1024,"limits_cpus":"0","limits_cpuset":null,"limits_memory":"0","limits_memory_reservation":"0","limits_memory_swap":"0","limits_memory_swappiness":60,"manual_webhook_secret_bitbucket":null,"manual_webhook_secret_gitea":null,"manual_webhook_secret_github":null,"manual_webhook_secret_gitlab":null,"ports_exposes":"3000","ports_mappings":null,"post_deployment_command":null,"post_deployment_command_container":null,"pre_deployment_command":null,"pre_deployment_command_container":null,"preview_url_template":"{{pr_id}}.{{domain}}","private_key_id":null,"publish_directory":"\/","redirect":"both","repository_project_id":null,"restart_count":0,"server_status":true,"source_id":0,"source_type":"App\\Models\\GithubApp","start_command":null,"static_image":"nginx:alpine","status":"running:healthy","swarm_placement_constraints":null,"swarm_replicas":1,"watch_paths":null,"created_at":"2025-12-13T01:03:18.000000Z","updated_at":"2025-12-13T13:52:17.000000Z"}] |