{
  "manifest_version": "1.0.0",
  "template": {
    "id": "2c40c036-83c6-4dff-99df-783c631339bb",
    "slug": "teleport",
    "name": "Teleport",
    "description": "The easiest and most secure way to access and protect infrastructure.",
    "url": "https://railway.com/deploy/teleport",
    "upstream": {
      "repo_url": "https://github.com/6ixfalls/railway-teleport"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "Proxy",
      "source": {
        "repo": "https://github.com/6ixfalls/railway-teleport"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "HAProxy",
      "source": {
        "repo": "https://github.com/6ixfalls/railway-teleport"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "Bootstrap",
      "source": {
        "repo": "https://github.com/6ixfalls/railway-teleport"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "Postgres",
      "source": {
        "image": "ghcr.io/6ixfalls/teleport-postgres:16"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "tcp_ports": [
        5432
      ],
      "http": false
    },
    {
      "name": "Auth",
      "source": {
        "repo": "https://github.com/6ixfalls/railway-teleport"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "AUTH_SERVER",
      "service": "Proxy",
      "description": "Auth server private networking URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PROXY_TOKEN",
      "service": "Proxy",
      "description": "Token to join the cluster",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CLUSTER_NAME",
      "service": "Proxy",
      "description": "Provide a value for CLUSTER_NAME.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVICE_TYPE",
      "service": "Proxy",
      "description": "Service to deploy",
      "secret": false,
      "strategy": "default",
      "default": "proxy"
    },
    {
      "key": "PROXY_HOST",
      "service": "HAProxy",
      "description": "Proxy private networking URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PROXY_PORT",
      "service": "HAProxy",
      "description": "Proxy application port",
      "secret": false,
      "strategy": "default",
      "default": "3080"
    },
    {
      "key": "README",
      "service": "Bootstrap",
      "description": "To register for your Teleport instance, use the URL provided in the deployment logs for the Bootstrap service. You will be asked to setup a password and MFA. Delete this bootstrap service once you register with your Teleport cluster. You may also edit the username of the user to create here under the predefined variables section as ADMIN_USER, the default is \"railway\". Type \"okay\" as the value to continue.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "ADMIN_USER",
      "service": "Bootstrap",
      "description": "User to create",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "PROXY_TOKEN",
      "service": "Bootstrap",
      "description": "Proxy token to join the cluster",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CLUSTER_NAME",
      "service": "Bootstrap",
      "description": "Cluster name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_URL",
      "service": "Bootstrap",
      "description": "Database URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATA",
      "service": "Postgres",
      "description": "Location where the database will be initialized",
      "secret": false,
      "strategy": "default",
      "default": "/var/lib/postgresql/data/pgdata"
    },
    {
      "key": "PGHOST",
      "service": "Postgres",
      "description": "Railway TCP Proxy Domain",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPORT",
      "service": "Postgres",
      "description": "Required variable for Data panel",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGUSER",
      "service": "Postgres",
      "description": "Required variable for Data panel",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGDATABASE",
      "service": "Postgres",
      "description": "Required variable for the data panel.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPASSWORD",
      "service": "Postgres",
      "description": "Required variable for Data panel",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "POSTGRES_DB",
      "service": "Postgres",
      "description": "Default database created when image is started.",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "DATABASE_URL",
      "service": "Postgres",
      "description": "URL to connect to Postgres database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PGPRIVATEHOST",
      "service": "Postgres",
      "description": "Railway Private Domain",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "POSTGRES_USER",
      "service": "Postgres",
      "description": "User to connect to Postgres DB",
      "secret": false,
      "strategy": "default",
      "default": "postgres"
    },
    {
      "key": "SSL_CERT_DAYS",
      "service": "Postgres",
      "description": "SSL certificate expiry in days.",
      "secret": false,
      "strategy": "default",
      "default": "820"
    },
    {
      "key": "POSTGRES_PASSWORD",
      "service": "Postgres",
      "description": "Password to connect to DB",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "DATABASE_PRIVATE_URL",
      "service": "Postgres",
      "description": "URL to connect to Postgres database",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PROXY_TOKEN",
      "service": "Auth",
      "description": "Token to join proxy services",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CLUSTER_NAME",
      "service": "Auth",
      "description": "Cluster name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DATABASE_URL",
      "service": "Auth",
      "description": "Database URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVICE_TYPE",
      "service": "Auth",
      "description": "Service to deploy",
      "secret": false,
      "strategy": "default",
      "default": "auth"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "teleport"
      }
    },
    "cli": "railway deploy --template teleport",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "2c40c036-83c6-4dff-99df-783c631339bb",
            "serializedConfig": {
              "services": {
                "0e04f35b-2047-4770-a370-631a23f285aa": {
                  "icon": "https://goteleport.com/static/favicon.svg",
                  "name": "Proxy",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/6ixfalls/railway-teleport",
                    "rootDirectory": null
                  },
                  "variables": {
                    "AUTH_SERVER": {
                      "isOptional": false,
                      "description": "Auth server private networking URL",
                      "defaultValue": "${{Auth.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PROXY_TOKEN": {
                      "isOptional": false,
                      "description": "Token to join the cluster",
                      "defaultValue": "${{Auth.PROXY_TOKEN}}"
                    },
                    "CLUSTER_NAME": {
                      "isOptional": false,
                      "description": "",
                      "defaultValue": "${{Auth.CLUSTER_NAME}}"
                    },
                    "SERVICE_TYPE": {
                      "isOptional": false,
                      "description": "Service to deploy",
                      "defaultValue": "proxy"
                    }
                  },
                  "networking": {}
                },
                "2a23d64d-38de-49e3-a769-9448d815bb95": {
                  "icon": "https://cdn.haproxy.com/assets/our_logos/haproxy-icon.svg",
                  "name": "HAProxy",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/6ixfalls/railway-teleport",
                    "rootDirectory": "/haproxy"
                  },
                  "variables": {
                    "PROXY_HOST": {
                      "isOptional": false,
                      "description": "Proxy private networking URL",
                      "defaultValue": "${{Proxy.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PROXY_PORT": {
                      "isOptional": false,
                      "description": "Proxy application port",
                      "defaultValue": "3080"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                },
                "d3d06220-0d69-43f5-a425-a16d2ecf2873": {
                  "icon": "https://goteleport.com/static/favicon.svg",
                  "name": "Bootstrap",
                  "deploy": {
                    "startCommand": "",
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/6ixfalls/railway-teleport",
                    "rootDirectory": "/bootstrap"
                  },
                  "variables": {
                    "README": {
                      "isOptional": false,
                      "description": "To register for your Teleport instance, use the URL provided in the deployment logs for the Bootstrap service. You will be asked to setup a password and MFA. Delete this bootstrap service once you register with your Teleport cluster. You may also edit the username of the user to create here under the predefined variables section as ADMIN_USER, the default is \"railway\". Type \"okay\" as the value to continue.",
                      "defaultValue": "{{README}}"
                    },
                    "ADMIN_USER": {
                      "isOptional": false,
                      "description": "User to create",
                      "defaultValue": "railway"
                    },
                    "PROXY_TOKEN": {
                      "isOptional": false,
                      "description": "Proxy token to join the cluster",
                      "defaultValue": "${{Auth.PROXY_TOKEN}}"
                    },
                    "CLUSTER_NAME": {
                      "isOptional": false,
                      "description": "Cluster name",
                      "defaultValue": "${{Auth.CLUSTER_NAME}}"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "Database URL",
                      "defaultValue": "${{Postgres.DATABASE_PRIVATE_URL}}"
                    }
                  }
                },
                "d7a1edfa-d5b9-4218-ae77-eb37f0301da5": {
                  "icon": "https://devicons.railway.app/i/postgresql.svg",
                  "name": "Postgres",
                  "build": {},
                  "deploy": {
                    "startCommand": "wrapper.sh postgres --port=5432 -c wal_level=logical -c shared_preload_libraries='wal2json'"
                  },
                  "source": {
                    "image": "ghcr.io/6ixfalls/teleport-postgres:16"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": false,
                      "description": "Location where the database will be initialized",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGHOST": {
                      "isOptional": false,
                      "description": "Railway TCP Proxy Domain",
                      "defaultValue": "${{RAILWAY_TCP_PROXY_DOMAIN}}"
                    },
                    "PGPORT": {
                      "isOptional": false,
                      "description": "Required variable for Data panel",
                      "defaultValue": "${{RAILWAY_TCP_PROXY_PORT}}"
                    },
                    "PGUSER": {
                      "isOptional": false,
                      "description": "Required variable for Data panel",
                      "defaultValue": "${{ POSTGRES_USER }}"
                    },
                    "PGDATABASE": {
                      "isOptional": false,
                      "description": "Required variable for the data panel.",
                      "defaultValue": "${{POSTGRES_DB}}"
                    },
                    "PGPASSWORD": {
                      "isOptional": false,
                      "description": "Required variable for Data panel",
                      "defaultValue": "${{POSTGRES_PASSWORD}}"
                    },
                    "POSTGRES_DB": {
                      "isOptional": false,
                      "description": "Default database created when image is started.",
                      "defaultValue": "railway"
                    },
                    "DATABASE_URL": {
                      "isOptional": false,
                      "description": "URL to connect to Postgres database",
                      "defaultValue": "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}/${{PGDATABASE}}"
                    },
                    "PGPRIVATEHOST": {
                      "isOptional": false,
                      "description": "Railway Private Domain",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "POSTGRES_USER": {
                      "isOptional": false,
                      "description": "User to connect to Postgres DB",
                      "defaultValue": "postgres"
                    },
                    "SSL_CERT_DAYS": {
                      "isOptional": true,
                      "description": "SSL certificate expiry in days.",
                      "defaultValue": "820"
                    },
                    "POSTGRES_PASSWORD": {
                      "isOptional": false,
                      "description": "Password to connect to DB",
                      "defaultValue": "{{POSTGRES_PASSWORD}}"
                    },
                    "DATABASE_PRIVATE_URL": {
                      "isOptional": false,
                      "description": "URL to connect to Postgres database",
                      "defaultValue": "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:5432/${{PGDATABASE}}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "5432": {}
                    },
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "d7a1edfa-d5b9-4218-ae77-eb37f0301da5": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  }
                },
                "fc6175b4-cb96-4b9d-8005-777a7da70f77": {
                  "icon": "https://goteleport.com/static/favicon.svg",
                  "name": "Auth",
                  "deploy": {
                    "startCommand": "",
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/6ixfalls/railway-teleport",
                    "rootDirectory": null
                  },
                  "variables": {
                    "PROXY_TOKEN": {
                      "isOptional": false,
                      "description": "Token to join proxy services",
                      "defaultValue": "{{PROXY_TOKEN}}"
                    },
                    "CLUSTER_NAME": {
                      "isOptional": false,
                      "description": "Cluster name",
                      "defaultValue": "${{HAProxy.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DATABASE_URL": {
                      "description": "Database URL",
                      "defaultValue": "${{Postgres.DATABASE_PRIVATE_URL}}"
                    },
                    "SERVICE_TYPE": {
                      "isOptional": false,
                      "description": "Service to deploy",
                      "defaultValue": "auth"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 5,
    "needs_volume": true
  },
  "generated_at": "2026-09-16T22:14:52.145Z",
  "generator_version": "0.1.0"
}
