{
  "manifest_version": "1.0.0",
  "template": {
    "id": "f96fc835-6f98-4678-baca-56dc44f4b3be",
    "slug": "qdrant-1",
    "name": "Qdrant [Updated Sep '26]",
    "description": "Qdrant [Sep '26] (Open-Source Vector Database for AI & Search) Self Host",
    "url": "https://railway.com/deploy/qdrant-1",
    "upstream": {
      "repo_url": "https://github.com/shruti060701/qdrant-railway"
    }
  },
  "services": [
    {
      "name": "qdrant-railway",
      "source": {
        "repo": "https://github.com/shruti060701/qdrant-railway"
      },
      "needs_volume": true,
      "volume_mount_path": "/qdrant/storage",
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "PORT",
      "service": "qdrant-railway",
      "description": "Port Railway routes external traffic to. This is nginx's port, not Qdrant's own 6333, since nginx sits in front to redirect the bare domain root to `/dashboard` (see Dockerfile/nginx-redirect.conf). Must be an explicit Railway variable, this project has confirmed the hard way (Metabase, Postiz, Vaultwarden, 9Router, WordPress) that a Dockerfile-only default alone doesn't reliably get picked up by Railway's edge routing.",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "QDRANT__SERVICE__HOST",
      "service": "qdrant-railway",
      "description": "Binds Qdrant's own server to all network interfaces. Note this single setting covers both the REST and gRPC ports together, confirmed via Qdrant's config source, they can't be bound separately.",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0"
    },
    {
      "key": "QDRANT__SERVICE__API_KEY",
      "service": "qdrant-railway",
      "description": "**Critical, confirmed via Qdrant's own config source: without this set, every REST/gRPC request succeeds with zero authentication.** Never mark this optional or leave it blank on a service with a public domain.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "QDRANT__SERVICE__GRPC_PORT",
      "service": "qdrant-railway",
      "description": "gRPC API port, used by client libraries that support it. Unchanged, still directly reachable.",
      "secret": false,
      "strategy": "default",
      "default": "6334"
    },
    {
      "key": "QDRANT__SERVICE__HTTP_PORT",
      "service": "qdrant-railway",
      "description": "Qdrant's own REST API port. Unchanged from a bare Qdrant install, still directly reachable on Railway's private network.",
      "secret": false,
      "strategy": "default",
      "default": "6333"
    },
    {
      "key": "QDRANT__STORAGE__STORAGE_PATH",
      "service": "qdrant-railway",
      "description": "Directory where collections and vectors are stored. Must match the Railway volume mount path exactly.",
      "secret": false,
      "strategy": "default",
      "default": "/qdrant/storage"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "qdrant-1"
      }
    },
    "cli": "railway deploy --template qdrant-1",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "f96fc835-6f98-4678-baca-56dc44f4b3be",
            "serializedConfig": {
              "buckets": {},
              "services": {
                "79e31885-4a5d-4fb2-b449-401ade3b3a00": {
                  "icon": "https://baserow-backend-production20240528124524339000000001.s3.amazonaws.com/user_files/Vec9NwWHVhPfcIA13JVAB9rhAgwzvzit_157f6775a84e1fae8b4c803a487bdbcfc529c18533a28f5cb894faf6560b0576.png",
                  "name": "qdrant-railway",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/healthz",
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/shruti060701/qdrant-railway",
                    "rootDirectory": null
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Port Railway routes external traffic to. This is nginx's port, not Qdrant's own 6333, since nginx sits in front to redirect the bare domain root to `/dashboard` (see Dockerfile/nginx-redirect.conf). Must be an explicit Railway variable, this project has confirmed the hard way (Metabase, Postiz, Vaultwarden, 9Router, WordPress) that a Dockerfile-only default alone doesn't reliably get picked up by Railway's edge routing.",
                      "defaultValue": "8080"
                    },
                    "QDRANT__SERVICE__HOST": {
                      "isOptional": false,
                      "description": "Binds Qdrant's own server to all network interfaces. Note this single setting covers both the REST and gRPC ports together, confirmed via Qdrant's config source, they can't be bound separately.",
                      "defaultValue": "0.0.0.0"
                    },
                    "QDRANT__SERVICE__API_KEY": {
                      "isOptional": false,
                      "description": "**Critical, confirmed via Qdrant's own config source: without this set, every REST/gRPC request succeeds with zero authentication.** Never mark this optional or leave it blank on a service with a public domain.",
                      "defaultValue": "{{QDRANT__SERVICE__API_KEY}}"
                    },
                    "QDRANT__SERVICE__GRPC_PORT": {
                      "isOptional": false,
                      "description": "gRPC API port, used by client libraries that support it. Unchanged, still directly reachable.",
                      "defaultValue": "6334"
                    },
                    "QDRANT__SERVICE__HTTP_PORT": {
                      "isOptional": false,
                      "description": "Qdrant's own REST API port. Unchanged from a bare Qdrant install, still directly reachable on Railway's private network.",
                      "defaultValue": "6333"
                    },
                    "QDRANT__STORAGE__STORAGE_PATH": {
                      "isOptional": false,
                      "description": "Directory where collections and vectors are stored. Must match the Railway volume mount path exactly.",
                      "defaultValue": "/qdrant/storage"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  },
                  "volumeMounts": {
                    "79e31885-4a5d-4fb2-b449-401ade3b3a00": {
                      "mountPath": "/qdrant/storage"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "qdrant-railway",
      "method": "GET",
      "path": "/healthz",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 1,
    "needs_volume": true
  },
  "generated_at": "2026-09-23T04:14:45.320Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-22T09:57:48.146Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_7e3ae6667bce40bc9414",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "healthcheck",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 88,
    "typical_build_seconds": 41,
    "typical_start_seconds": 10,
    "slowest_service": "qdrant-railway"
  }
}
