{
  "manifest_version": "1.0.0",
  "template": {
    "id": "4c6dda1d-4d98-4f49-bd0e-5192a9e37958",
    "slug": "uptime",
    "name": "Uptime",
    "description": "Monitor uptime, logs, alerts & status pages in one platform",
    "url": "https://railway.com/deploy/uptime",
    "upstream": {
      "image": "oneuptime/nginx:11.5.10"
    }
  },
  "services": [
    {
      "name": "Redis",
      "source": {
        "image": "redis:8.2.1"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "tcp_ports": [
        6379
      ],
      "http": false
    },
    {
      "name": "Postgres",
      "source": {
        "image": "ghcr.io/railwayapp-templates/postgres-ssl:18"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/postgresql/data",
      "tcp_ports": [
        5432
      ],
      "http": false
    },
    {
      "name": "app",
      "source": {
        "image": "oneuptime/app:11.5.10"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "clickhouse",
      "source": {
        "image": "clickhouse/clickhouse-server:25.7"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/clickhouse",
      "http": false
    },
    {
      "name": "probe",
      "source": {
        "image": "oneuptime/probe:11.5.10"
      },
      "needs_volume": false,
      "http": false
    },
    {
      "name": "ingress",
      "source": {
        "image": "oneuptime/nginx:11.5.10"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "ai-agent",
      "source": {
        "image": "oneuptime/ai-agent:11.5.10"
      },
      "needs_volume": false,
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "REDISHOST",
      "service": "Redis",
      "description": "Provide a value for REDISHOST.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDISPORT",
      "service": "Redis",
      "description": "Provide a value for REDISPORT.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "REDISUSER",
      "service": "Redis",
      "description": "Provide a value for REDISUSER.",
      "secret": false,
      "strategy": "default",
      "default": "default"
    },
    {
      "key": "REDIS_URL",
      "service": "Redis",
      "description": "Connection string for connecting to redis using the private network",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDISPASSWORD",
      "service": "Redis",
      "description": "Provide a value for REDISPASSWORD.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "Redis",
      "description": "Provide a value for REDIS_PASSWORD.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "REDIS_PUBLIC_URL",
      "service": "Redis",
      "description": "Connection string for connecting to redis externally",
      "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 Private Domain Name.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "PGPORT",
      "service": "Postgres",
      "description": "Port to connect to Postgres.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "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": "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_PUBLIC_URL",
      "service": "Postgres",
      "description": "Public URL to connect to Postgres database, used by the Data panel.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "RAILWAY_DEPLOYMENT_DRAINING_SECONDS",
      "service": "Postgres",
      "description": "Allow Postgres to cleanly shut down",
      "secret": false,
      "strategy": "default",
      "default": "60"
    },
    {
      "key": "HOST",
      "service": "app",
      "description": "Public URL used by OneUptime.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PORT",
      "service": "app",
      "description": "Port used by the OneUptime app.",
      "secret": false,
      "strategy": "default",
      "default": "3002"
    },
    {
      "key": "APP_PORT",
      "service": "app",
      "description": "Internal port used by the app.",
      "secret": false,
      "strategy": "default",
      "default": "3002"
    },
    {
      "key": "NODE_ENV",
      "service": "app",
      "description": "Enables production Node.js behavior.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "REDIS_DB",
      "service": "app",
      "description": "Redis database number.",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "REDIS_HOST",
      "service": "app",
      "description": "Private hostname of the Redis service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PORT",
      "service": "app",
      "description": "Internal Redis port.",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "ENVIRONMENT",
      "service": "app",
      "description": "OneUptime runtime environment.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "DATABASE_HOST",
      "service": "app",
      "description": "Private hostname of PostgreSQL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DATABASE_NAME",
      "service": "app",
      "description": "PostgreSQL database name.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_PORT",
      "service": "app",
      "description": "Internal PostgreSQL port.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "HTTP_PROTOCOL",
      "service": "app",
      "description": "Protocol used by the public URL.",
      "secret": false,
      "strategy": "default",
      "default": "https"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "app",
      "description": "Password from the Redis service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_USERNAME",
      "service": "app",
      "description": "Username used for Redis.",
      "secret": false,
      "strategy": "default",
      "default": "default"
    },
    {
      "key": "BILLING_ENABLED",
      "service": "app",
      "description": "Disables OneUptime billing features.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CAPTCHA_ENABLED",
      "service": "app",
      "description": "Disables CAPTCHA by default.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "CLICKHOUSE_HOST",
      "service": "app",
      "description": "Private hostname of ClickHouse.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "CLICKHOUSE_PORT",
      "service": "app",
      "description": "Internal ClickHouse HTTP port.",
      "secret": false,
      "strategy": "default",
      "default": "8123"
    },
    {
      "key": "CLICKHOUSE_USER",
      "service": "app",
      "description": "ClickHouse username.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "ONEUPTIME_SECRET",
      "service": "app",
      "description": "Secret shared with OneUptime services.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "DATABASE_PASSWORD",
      "service": "app",
      "description": "Password from the PostgreSQL service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_USERNAME",
      "service": "app",
      "description": "Username from the PostgreSQL service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DISABLE_TELEMETRY",
      "service": "app",
      "description": "Disables OneUptime telemetry.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ENCRYPTION_SECRET",
      "service": "app",
      "description": "Secret used to encrypt stored data.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "REGISTER_PROBE_KEY",
      "service": "app",
      "description": "Secret used to register the bundled probe.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "CLICKHOUSE_DATABASE",
      "service": "app",
      "description": "ClickHouse database name.",
      "secret": false,
      "strategy": "default",
      "default": "oneuptime"
    },
    {
      "key": "CLICKHOUSE_PASSWORD",
      "service": "app",
      "description": "Password from the ClickHouse service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SERVER_APP_HOSTNAME",
      "service": "app",
      "description": "Private hostname of the app service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "IS_ENTERPRISE_EDITION",
      "service": "app",
      "description": "Runs the community edition.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "DATABASE_CONNECTION_TIMEOUT_MS",
      "service": "app",
      "description": "Database connection timeout in milliseconds.",
      "secret": false,
      "strategy": "default",
      "default": "30000"
    },
    {
      "key": "PORT",
      "service": "clickhouse",
      "description": "Internal ClickHouse HTTP port.",
      "secret": false,
      "strategy": "default",
      "default": "8123"
    },
    {
      "key": "CLICKHOUSE_USER",
      "service": "clickhouse",
      "description": "Username used by OneUptime.",
      "secret": false,
      "strategy": "default",
      "default": "oneuptime"
    },
    {
      "key": "CLICKHOUSE_PASSWORD",
      "service": "clickhouse",
      "description": "Generated ClickHouse password.",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "ONEUPTIME_CLICKHOUSE_CONFIG_B64",
      "service": "clickhouse",
      "description": "Encoded ClickHouse configuration for OneUptime.",
      "secret": false,
      "strategy": "default",
      "default": "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"
    },
    {
      "key": "CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT",
      "service": "clickhouse",
      "description": "Enables authenticated user management.",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "PORT",
      "service": "probe",
      "description": "Port used by the bundled probe.",
      "secret": false,
      "strategy": "default",
      "default": "3874"
    },
    {
      "key": "NODE_ENV",
      "service": "probe",
      "description": "Enables production Node.js behavior.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "PROBE_KEY",
      "service": "probe",
      "description": "Generated key for this probe.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "PROBE_NAME",
      "service": "probe",
      "description": "Name shown in the OneUptime dashboard.",
      "secret": false,
      "strategy": "default",
      "default": "Railway Probe"
    },
    {
      "key": "ONEUPTIME_URL",
      "service": "probe",
      "description": "Private URL of the OneUptime app.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DISABLE_TELEMETRY",
      "service": "probe",
      "description": "Disables OneUptime telemetry.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PROBE_DESCRIPTION",
      "service": "probe",
      "description": "Description shown in the OneUptime dashboard.",
      "secret": false,
      "strategy": "default",
      "default": "Bundled Railway monitoring probe."
    },
    {
      "key": "REGISTER_PROBE_KEY",
      "service": "probe",
      "description": "Secret shared with the app for registration.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PROBE_SNMP_TRAP_RECEIVER_ENABLED",
      "service": "probe",
      "description": "Disables the unsupported UDP trap receiver.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "HOST",
      "service": "ingress",
      "description": "Public URL used by the OneUptime gateway.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "PORT",
      "service": "ingress",
      "description": "Port used by the gateway.",
      "secret": false,
      "strategy": "default",
      "default": "7851"
    },
    {
      "key": "APP_PORT",
      "service": "ingress",
      "description": "Internal port of the app service.",
      "secret": false,
      "strategy": "default",
      "default": "3002"
    },
    {
      "key": "NODE_ENV",
      "service": "ingress",
      "description": "Enables production Node.js behavior.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "HOME_PORT",
      "service": "ingress",
      "description": "Internal port of the home service.",
      "secret": false,
      "strategy": "default",
      "default": "3002"
    },
    {
      "key": "ENVIRONMENT",
      "service": "ingress",
      "description": "OneUptime runtime environment.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "DATABASE_HOST",
      "service": "ingress",
      "description": "Private hostname of PostgreSQL.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DATABASE_NAME",
      "service": "ingress",
      "description": "PostgreSQL database name.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_PORT",
      "service": "ingress",
      "description": "Internal PostgreSQL port.",
      "secret": false,
      "strategy": "default",
      "default": "5432"
    },
    {
      "key": "HTTP_PROTOCOL",
      "service": "ingress",
      "description": "Protocol used by the public URL.",
      "secret": false,
      "strategy": "default",
      "default": "https"
    },
    {
      "key": "BILLING_ENABLED",
      "service": "ingress",
      "description": "Disables OneUptime billing features.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "DATABASE_PASSWORD",
      "service": "ingress",
      "description": "Password from the PostgreSQL service.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DATABASE_USERNAME",
      "service": "ingress",
      "description": "Username from the PostgreSQL service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DISABLE_TELEMETRY",
      "service": "ingress",
      "description": "Disables OneUptime telemetry.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SERVER_APP_HOSTNAME",
      "service": "ingress",
      "description": "Private hostname of the app service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "SERVER_HOME_HOSTNAME",
      "service": "ingress",
      "description": "Private hostname of the home service.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "RUN_DATABASE_MIGRATIONS_ON_BOOT",
      "service": "ingress",
      "description": "Keeps database migrations in the app service.",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PORT",
      "service": "ai-agent",
      "description": "Port used by the bundled AI agent.",
      "secret": false,
      "strategy": "default",
      "default": "3875"
    },
    {
      "key": "NODE_ENV",
      "service": "ai-agent",
      "description": "Enables production Node.js behavior.",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "AI_AGENT_KEY",
      "service": "ai-agent",
      "description": "Generated key for this AI agent.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AI_AGENT_NAME",
      "service": "ai-agent",
      "description": "Name shown in the OneUptime dashboard.",
      "secret": false,
      "strategy": "default",
      "default": "Railway AI Agent"
    },
    {
      "key": "ONEUPTIME_URL",
      "service": "ai-agent",
      "description": "Private URL of the OneUptime app.",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "ONEUPTIME_SECRET",
      "service": "ai-agent",
      "description": "Secret shared with the OneUptime app.",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DISABLE_TELEMETRY",
      "service": "ai-agent",
      "description": "Disables OneUptime telemetry.",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "AI_AGENT_DESCRIPTION",
      "service": "ai-agent",
      "description": "Description shown in the OneUptime dashboard.",
      "secret": false,
      "strategy": "default",
      "default": "Bundled Railway AI agent."
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "uptime"
      }
    },
    "cli": "railway deploy --template uptime",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "4c6dda1d-4d98-4f49-bd0e-5192a9e37958",
            "serializedConfig": {
              "services": {
                "457c8ef9-ab9e-47bf-bec2-84544bc31e3a": {
                  "icon": "https://cdn.sanity.io/images/sy1jschh/production/0ce0bfdcfbdbf69662b1116671f97c2dd788b655-157x157.svg",
                  "name": "Redis",
                  "deploy": {
                    "startCommand": "/bin/sh -c \"rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH\""
                  },
                  "source": {
                    "image": "redis:8.2.1"
                  },
                  "variables": {
                    "REDISHOST": {
                      "isOptional": false,
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDISPORT": {
                      "isOptional": false,
                      "defaultValue": "6379"
                    },
                    "REDISUSER": {
                      "isOptional": false,
                      "defaultValue": "default"
                    },
                    "REDIS_URL": {
                      "isOptional": false,
                      "description": "Connection string for connecting to redis using the private network",
                      "defaultValue": "redis://${{ REDISUSER }}:${{ REDIS_PASSWORD }}@${{ REDISHOST }}:${{ REDISPORT }}"
                    },
                    "REDISPASSWORD": {
                      "isOptional": false,
                      "defaultValue": "${{REDIS_PASSWORD}}"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    },
                    "REDIS_PUBLIC_URL": {
                      "description": "Connection string for connecting to redis externally",
                      "defaultValue": "redis://default:${{ REDIS_PASSWORD }}@${{ RAILWAY_TCP_PROXY_DOMAIN }}:${{ RAILWAY_TCP_PROXY_PORT }}"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "6379": {}
                    }
                  },
                  "volumeMounts": {
                    "457c8ef9-ab9e-47bf-bec2-84544bc31e3a": {
                      "mountPath": "/data"
                    }
                  },
                  "haTemplateCode": "redis-ha",
                  "haConversionConfig": {
                    "edge": {
                      "label": "Reverse Proxies",
                      "options": [
                        1,
                        2
                      ],
                      "nodeLabel": "HAProxy",
                      "description": "HAProxy instances routing writes to the primary",
                      "defaultValue": 2
                    },
                    "replica": {
                      "label": "Redis Replicas",
                      "options": [
                        2,
                        3,
                        4,
                        5
                      ],
                      "nodeLabel": "Redis",
                      "description": "Nodes running Redis + colocated Sentinel",
                      "defaultValue": 2
                    },
                    "internal": null,
                    "description": "This will convert your Redis instance to an HA cluster with Sentinel failover and HAProxy routing to the primary."
                  }
                },
                "9c1d3442-d700-4d0a-8706-c459cb3775db": {
                  "icon": "https://devicons.railway.app/i/postgresql.svg",
                  "name": "Postgres",
                  "build": {},
                  "deploy": {
                    "requiredMountPath": "/var/lib/postgresql/data"
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp-templates/postgres-ssl:18"
                  },
                  "variables": {
                    "PGDATA": {
                      "isOptional": false,
                      "description": "Location where the database will be initialized",
                      "defaultValue": "/var/lib/postgresql/data/pgdata"
                    },
                    "PGHOST": {
                      "isOptional": false,
                      "description": "Railway Private Domain Name.",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "PGPORT": {
                      "isOptional": false,
                      "description": "Port to connect to Postgres.",
                      "defaultValue": "5432"
                    },
                    "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_PRIVATE_DOMAIN}}:5432/${{PGDATABASE}}"
                    },
                    "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_PUBLIC_URL": {
                      "description": "Public URL to connect to Postgres database, used by the Data panel.",
                      "defaultValue": "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}/${{PGDATABASE}}"
                    },
                    "RAILWAY_DEPLOYMENT_DRAINING_SECONDS": {
                      "isOptional": false,
                      "description": "Allow Postgres to cleanly shut down",
                      "defaultValue": "60"
                    }
                  },
                  "networking": {
                    "tcpProxies": {
                      "5432": {}
                    },
                    "serviceDomains": {}
                  },
                  "volumeMounts": {
                    "9c1d3442-d700-4d0a-8706-c459cb3775db": {
                      "mountPath": "/var/lib/postgresql/data"
                    }
                  },
                  "haTemplateCode": "postgres-ha",
                  "haConversionConfig": {
                    "edge": {
                      "label": "Reverse Proxy",
                      "options": [
                        2,
                        3,
                        4,
                        5
                      ],
                      "nodeLabel": "HAProxy",
                      "description": "Routes traffic to the primary",
                      "defaultValue": 3
                    },
                    "replica": {
                      "label": "Replicas",
                      "options": [
                        2,
                        3,
                        4,
                        5,
                        6,
                        7
                      ],
                      "nodeLabel": "Postgres",
                      "description": "Streaming replicas for automatic failover",
                      "defaultValue": 2
                    },
                    "internal": {
                      "label": "Coordinator Nodes",
                      "options": [
                        3,
                        5,
                        7,
                        9
                      ],
                      "nodeLabel": "etcd",
                      "defaultValue": 3
                    },
                    "description": "This will convert your Postgres database to an HA cluster with Patroni failover and etcd consensus."
                  }
                },
                "a06b0532-de9a-493e-8737-99c74cb62db0": {
                  "name": "app",
                  "deploy": {
                    "healthcheckPath": "/status/ready"
                  },
                  "source": {
                    "image": "oneuptime/app:11.5.10"
                  },
                  "variables": {
                    "HOST": {
                      "description": "Public URL used by OneUptime.",
                      "defaultValue": "${{ingress.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "PORT": {
                      "description": "Port used by the OneUptime app.",
                      "defaultValue": "3002"
                    },
                    "APP_PORT": {
                      "description": "Internal port used by the app.",
                      "defaultValue": "3002"
                    },
                    "NODE_ENV": {
                      "description": "Enables production Node.js behavior.",
                      "defaultValue": "production"
                    },
                    "REDIS_DB": {
                      "description": "Redis database number.",
                      "defaultValue": "0"
                    },
                    "REDIS_HOST": {
                      "description": "Private hostname of the Redis service.",
                      "defaultValue": "${{Redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_PORT": {
                      "description": "Internal Redis port.",
                      "defaultValue": "6379"
                    },
                    "ENVIRONMENT": {
                      "description": "OneUptime runtime environment.",
                      "defaultValue": "production"
                    },
                    "DATABASE_HOST": {
                      "description": "Private hostname of PostgreSQL.",
                      "defaultValue": "${{Postgres.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DATABASE_NAME": {
                      "description": "PostgreSQL database name.",
                      "defaultValue": "${{Postgres.POSTGRES_DB}}"
                    },
                    "DATABASE_PORT": {
                      "description": "Internal PostgreSQL port.",
                      "defaultValue": "5432"
                    },
                    "HTTP_PROTOCOL": {
                      "description": "Protocol used by the public URL.",
                      "defaultValue": "https"
                    },
                    "REDIS_PASSWORD": {
                      "description": "Password from the Redis service.",
                      "defaultValue": "${{Redis.REDIS_PASSWORD}}"
                    },
                    "REDIS_USERNAME": {
                      "description": "Username used for Redis.",
                      "defaultValue": "default"
                    },
                    "BILLING_ENABLED": {
                      "description": "Disables OneUptime billing features.",
                      "defaultValue": "false"
                    },
                    "CAPTCHA_ENABLED": {
                      "description": "Disables CAPTCHA by default.",
                      "defaultValue": "false"
                    },
                    "CLICKHOUSE_HOST": {
                      "description": "Private hostname of ClickHouse.",
                      "defaultValue": "${{clickhouse.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "CLICKHOUSE_PORT": {
                      "description": "Internal ClickHouse HTTP port.",
                      "defaultValue": "8123"
                    },
                    "CLICKHOUSE_USER": {
                      "description": "ClickHouse username.",
                      "defaultValue": "${{clickhouse.CLICKHOUSE_USER}}"
                    },
                    "ONEUPTIME_SECRET": {
                      "description": "Secret shared with OneUptime services.",
                      "defaultValue": "{{ONEUPTIME_SECRET}}"
                    },
                    "DATABASE_PASSWORD": {
                      "description": "Password from the PostgreSQL service.",
                      "defaultValue": "${{Postgres.POSTGRES_PASSWORD}}"
                    },
                    "DATABASE_USERNAME": {
                      "description": "Username from the PostgreSQL service.",
                      "defaultValue": "${{Postgres.POSTGRES_USER}}"
                    },
                    "DISABLE_TELEMETRY": {
                      "description": "Disables OneUptime telemetry.",
                      "defaultValue": "true"
                    },
                    "ENCRYPTION_SECRET": {
                      "description": "Secret used to encrypt stored data.",
                      "defaultValue": "{{ENCRYPTION_SECRET}}"
                    },
                    "REGISTER_PROBE_KEY": {
                      "description": "Secret used to register the bundled probe.",
                      "defaultValue": "{{REGISTER_PROBE_KEY}}"
                    },
                    "CLICKHOUSE_DATABASE": {
                      "description": "ClickHouse database name.",
                      "defaultValue": "oneuptime"
                    },
                    "CLICKHOUSE_PASSWORD": {
                      "description": "Password from the ClickHouse service.",
                      "defaultValue": "${{clickhouse.CLICKHOUSE_PASSWORD}}"
                    },
                    "SERVER_APP_HOSTNAME": {
                      "description": "Private hostname of the app service.",
                      "defaultValue": "${{app.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "IS_ENTERPRISE_EDITION": {
                      "description": "Runs the community edition.",
                      "defaultValue": "false"
                    },
                    "DATABASE_CONNECTION_TIMEOUT_MS": {
                      "description": "Database connection timeout in milliseconds.",
                      "defaultValue": "30000"
                    }
                  }
                },
                "ae202844-aba6-423c-b6ba-cb42a85134c2": {
                  "name": "clickhouse",
                  "deploy": {
                    "startCommand": "sh -c 'printf \"%s\" \"$ONEUPTIME_CLICKHOUSE_CONFIG_B64\" | base64 -d | tar -xz -C / && exec /entrypoint.sh'",
                    "healthcheckPath": "/ping"
                  },
                  "source": {
                    "image": "clickhouse/clickhouse-server:25.7"
                  },
                  "variables": {
                    "PORT": {
                      "description": "Internal ClickHouse HTTP port.",
                      "defaultValue": "8123"
                    },
                    "CLICKHOUSE_USER": {
                      "description": "Username used by OneUptime.",
                      "defaultValue": "oneuptime"
                    },
                    "CLICKHOUSE_PASSWORD": {
                      "description": "Generated ClickHouse password.",
                      "defaultValue": "{{CLICKHOUSE_PASSWORD}}"
                    },
                    "ONEUPTIME_CLICKHOUSE_CONFIG_B64": {
                      "description": "Encoded ClickHouse configuration for OneUptime.",
                      "defaultValue": "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"
                    },
                    "CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT": {
                      "description": "Enables authenticated user management.",
                      "defaultValue": "1"
                    }
                  },
                  "volumeMounts": {
                    "ae202844-aba6-423c-b6ba-cb42a85134c2": {
                      "mountPath": "/var/lib/clickhouse"
                    }
                  }
                },
                "ba58b51e-4344-46d2-b17d-72764ee7fc0f": {
                  "name": "probe",
                  "deploy": {
                    "healthcheckPath": "/status/ready"
                  },
                  "source": {
                    "image": "oneuptime/probe:11.5.10"
                  },
                  "variables": {
                    "PORT": {
                      "description": "Port used by the bundled probe.",
                      "defaultValue": "3874"
                    },
                    "NODE_ENV": {
                      "description": "Enables production Node.js behavior.",
                      "defaultValue": "production"
                    },
                    "PROBE_KEY": {
                      "description": "Generated key for this probe.",
                      "defaultValue": "{{PROBE_KEY}}"
                    },
                    "PROBE_NAME": {
                      "description": "Name shown in the OneUptime dashboard.",
                      "defaultValue": "Railway Probe"
                    },
                    "ONEUPTIME_URL": {
                      "description": "Private URL of the OneUptime app.",
                      "defaultValue": "http://${{app.RAILWAY_PRIVATE_DOMAIN}}:3002"
                    },
                    "DISABLE_TELEMETRY": {
                      "description": "Disables OneUptime telemetry.",
                      "defaultValue": "true"
                    },
                    "PROBE_DESCRIPTION": {
                      "description": "Description shown in the OneUptime dashboard.",
                      "defaultValue": "Bundled Railway monitoring probe."
                    },
                    "REGISTER_PROBE_KEY": {
                      "description": "Secret shared with the app for registration.",
                      "defaultValue": "${{app.REGISTER_PROBE_KEY}}"
                    },
                    "PROBE_SNMP_TRAP_RECEIVER_ENABLED": {
                      "description": "Disables the unsupported UDP trap receiver.",
                      "defaultValue": "false"
                    }
                  }
                },
                "bceca5c2-2314-4891-83d2-5e4fc8350260": {
                  "name": "ingress",
                  "deploy": {
                    "startCommand": "bash -c \"until curl -fsS \\\"http://${SERVER_APP_HOSTNAME}:${APP_PORT}/status/ready\\\" >/dev/null; do sleep 2; done && export NGINX_LISTEN_ADDRESS=\\\"${NGINX_LISTEN_ADDRESS:-}\\\" NGINX_LISTEN_OPTIONS=\\\"${NGINX_LISTEN_OPTIONS:-}\\\" PROVISION_SSL=\\\"${PROVISION_SSL:-}\\\" && cp run.sh /tmp/run-railway.sh && sed -i '/^NGINX_RESOLVER=/a [[ \\\"$NGINX_RESOLVER\\\" == *:* ]] && NGINX_RESOLVER=\\\"[$NGINX_RESOLVER]\\\"' /tmp/run-railway.sh && chmod +x /tmp/run-railway.sh && exec /tmp/run-railway.sh\"",
                    "healthcheckPath": "/status/ready"
                  },
                  "source": {
                    "image": "oneuptime/nginx:11.5.10"
                  },
                  "variables": {
                    "HOST": {
                      "description": "Public URL used by the OneUptime gateway.",
                      "defaultValue": "${{ingress.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "PORT": {
                      "description": "Port used by the gateway.",
                      "defaultValue": "7851"
                    },
                    "APP_PORT": {
                      "description": "Internal port of the app service.",
                      "defaultValue": "3002"
                    },
                    "NODE_ENV": {
                      "description": "Enables production Node.js behavior.",
                      "defaultValue": "production"
                    },
                    "HOME_PORT": {
                      "description": "Internal port of the home service.",
                      "defaultValue": "3002"
                    },
                    "ENVIRONMENT": {
                      "description": "OneUptime runtime environment.",
                      "defaultValue": "production"
                    },
                    "DATABASE_HOST": {
                      "description": "Private hostname of PostgreSQL.",
                      "defaultValue": "${{Postgres.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DATABASE_NAME": {
                      "description": "PostgreSQL database name.",
                      "defaultValue": "${{Postgres.POSTGRES_DB}}"
                    },
                    "DATABASE_PORT": {
                      "description": "Internal PostgreSQL port.",
                      "defaultValue": "5432"
                    },
                    "HTTP_PROTOCOL": {
                      "description": "Protocol used by the public URL.",
                      "defaultValue": "https"
                    },
                    "BILLING_ENABLED": {
                      "description": "Disables OneUptime billing features.",
                      "defaultValue": "false"
                    },
                    "DATABASE_PASSWORD": {
                      "description": "Password from the PostgreSQL service.",
                      "defaultValue": "${{Postgres.POSTGRES_PASSWORD}}"
                    },
                    "DATABASE_USERNAME": {
                      "description": "Username from the PostgreSQL service.",
                      "defaultValue": "${{Postgres.POSTGRES_USER}}"
                    },
                    "DISABLE_TELEMETRY": {
                      "description": "Disables OneUptime telemetry.",
                      "defaultValue": "true"
                    },
                    "SERVER_APP_HOSTNAME": {
                      "description": "Private hostname of the app service.",
                      "defaultValue": "${{app.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "SERVER_HOME_HOSTNAME": {
                      "description": "Private hostname of the home service.",
                      "defaultValue": "${{app.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "RUN_DATABASE_MIGRATIONS_ON_BOOT": {
                      "description": "Keeps database migrations in the app service.",
                      "defaultValue": "false"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:7849": {
                        "port": 7849
                      }
                    }
                  }
                },
                "ec11712a-d795-4480-9148-f05089945f98": {
                  "name": "ai-agent",
                  "deploy": {
                    "healthcheckPath": "/status/ready"
                  },
                  "source": {
                    "image": "oneuptime/ai-agent:11.5.10"
                  },
                  "variables": {
                    "PORT": {
                      "description": "Port used by the bundled AI agent.",
                      "defaultValue": "3875"
                    },
                    "NODE_ENV": {
                      "description": "Enables production Node.js behavior.",
                      "defaultValue": "production"
                    },
                    "AI_AGENT_KEY": {
                      "description": "Generated key for this AI agent.",
                      "defaultValue": "{{AI_AGENT_KEY}}"
                    },
                    "AI_AGENT_NAME": {
                      "description": "Name shown in the OneUptime dashboard.",
                      "defaultValue": "Railway AI Agent"
                    },
                    "ONEUPTIME_URL": {
                      "description": "Private URL of the OneUptime app.",
                      "defaultValue": "http://${{app.RAILWAY_PRIVATE_DOMAIN}}:3002"
                    },
                    "ONEUPTIME_SECRET": {
                      "description": "Secret shared with the OneUptime app.",
                      "defaultValue": "${{app.ONEUPTIME_SECRET}}"
                    },
                    "DISABLE_TELEMETRY": {
                      "description": "Disables OneUptime telemetry.",
                      "defaultValue": "true"
                    },
                    "AI_AGENT_DESCRIPTION": {
                      "description": "Description shown in the OneUptime dashboard.",
                      "defaultValue": "Bundled Railway AI agent."
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "ingress",
      "method": "GET",
      "path": "/status/ready",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 7,
    "needs_volume": true
  },
  "generated_at": "2026-09-10T10:14:45.332Z",
  "generator_version": "0.1.0",
  "status": "validated",
  "validated_at": "2026-09-09T00:38:11.056Z",
  "success_rate_30d": 1,
  "validation": {
    "last_run_id": "run_950e99b71bd34b728756",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": true
      },
      {
        "name": "all_services_deployed",
        "passed": true
      },
      {
        "name": "healthcheck",
        "passed": true
      },
      {
        "name": "stays_up",
        "passed": true
      }
    ],
    "typical_ready_seconds": 245,
    "typical_build_seconds": 0,
    "typical_start_seconds": 41,
    "slowest_service": "probe"
  }
}
