{
  "manifest_version": "1.0.0",
  "template": {
    "id": "6b4da843-469b-4eb1-bd0e-bd1c3778c645",
    "slug": "pixelfed-fediverse",
    "name": "Pixelfed",
    "description": "Photo sharing network that federates with Mastodon and the fediverse",
    "url": "https://railway.com/deploy/pixelfed-fediverse",
    "upstream": {
      "repo_url": "https://github.com/gridalpha/pixelfed-railway"
    }
  },
  "services": [
    {
      "name": "Redis",
      "source": {
        "image": "redis:8.2"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": false
    },
    {
      "name": "pixelfed",
      "source": {
        "repo": "https://github.com/gridalpha/pixelfed-railway"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/www/html/storage",
      "http": true
    },
    {
      "name": "media",
      "source": {
        "repo": "https://github.com/gridalpha/pixelfed-railway"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "mailpit",
      "source": {
        "image": "axllent/mailpit:latest"
      },
      "needs_volume": true,
      "volume_mount_path": "/data",
      "http": true
    },
    {
      "name": "MySQL",
      "source": {
        "image": "mysql:9.4"
      },
      "needs_volume": true,
      "volume_mount_path": "/var/lib/mysql",
      "http": false
    }
  ],
  "required_inputs": [
    {
      "key": "REDISHOST",
      "service": "Redis",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDISPORT",
      "service": "Redis",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "REDISUSER",
      "service": "Redis",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "default",
      "default": "default"
    },
    {
      "key": "REDIS_URL",
      "service": "Redis",
      "description": "Private connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDISPASSWORD",
      "service": "Redis",
      "description": "Data panel alias, not read by the server",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "Redis",
      "description": "Auth password, read by the server",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PORT",
      "service": "pixelfed",
      "description": "Port Railway health-checks",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "APP_ENV",
      "service": "pixelfed",
      "description": "Laravel environment",
      "secret": false,
      "strategy": "default",
      "default": "production"
    },
    {
      "key": "APP_URL",
      "service": "pixelfed",
      "description": "Public base URL",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "AWS_URL",
      "service": "pixelfed",
      "description": "Public base URL for media links",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "DB_HOST",
      "service": "pixelfed",
      "description": "Private MySQL hostname",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "DB_PORT",
      "service": "pixelfed",
      "description": "MySQL port",
      "secret": false,
      "strategy": "default",
      "default": "3306"
    },
    {
      "key": "EXP_EMC",
      "service": "pixelfed",
      "description": "Experimental media caching",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "APP_NAME",
      "service": "pixelfed",
      "description": "Instance name shown in the UI",
      "secret": false,
      "strategy": "default",
      "default": "Pixelfed"
    },
    {
      "key": "AP_INBOX",
      "service": "pixelfed",
      "description": "Accept federated deliveries",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "SSL_MODE",
      "service": "pixelfed",
      "description": "TLS terminates at Railway's edge",
      "secret": false,
      "strategy": "default",
      "default": "off"
    },
    {
      "key": "APP_DEBUG",
      "service": "pixelfed",
      "description": "Never enable on a public instance",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "AP_OUTBOX",
      "service": "pixelfed",
      "description": "Publish an outbox collection",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "LOG_LEVEL",
      "service": "pixelfed",
      "description": "Log verbosity",
      "secret": false,
      "strategy": "default",
      "default": "info"
    },
    {
      "key": "MAIL_HOST",
      "service": "pixelfed",
      "description": "SMTP hostname",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MAIL_PORT",
      "service": "pixelfed",
      "description": "SMTP port",
      "secret": false,
      "strategy": "default",
      "default": "1025"
    },
    {
      "key": "APP_DOMAIN",
      "service": "pixelfed",
      "description": "Federation identity host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "AWS_BUCKET",
      "service": "pixelfed",
      "description": "Object storage bucket name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "REDIS_HOST",
      "service": "pixelfed",
      "description": "Private Redis hostname",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "REDIS_PORT",
      "service": "pixelfed",
      "description": "Redis port",
      "secret": false,
      "strategy": "default",
      "default": "6379"
    },
    {
      "key": "CACHE_STORE",
      "service": "pixelfed",
      "description": "Application cache backend",
      "secret": false,
      "strategy": "default",
      "default": "redis"
    },
    {
      "key": "DB_DATABASE",
      "service": "pixelfed",
      "description": "Database name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_PASSWORD",
      "service": "pixelfed",
      "description": "Database password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "DB_USERNAME",
      "service": "pixelfed",
      "description": "Database user",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "LOG_CHANNEL",
      "service": "pixelfed",
      "description": "Send logs to the deploy log",
      "secret": false,
      "strategy": "default",
      "default": "stderr"
    },
    {
      "key": "MAIL_DRIVER",
      "service": "pixelfed",
      "description": "Mail transport",
      "secret": false,
      "strategy": "default",
      "default": "smtp"
    },
    {
      "key": "MAIL_MAILER",
      "service": "pixelfed",
      "description": "Mail transport, Laravel 9+ name",
      "secret": false,
      "strategy": "default",
      "default": "smtp"
    },
    {
      "key": "ACTIVITY_PUB",
      "service": "pixelfed",
      "description": "Federation master switch",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "ADMIN_DOMAIN",
      "service": "pixelfed",
      "description": "Admin panel host",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "APP_TIMEZONE",
      "service": "pixelfed",
      "description": "Default timezone",
      "secret": false,
      "strategy": "default",
      "default": "UTC"
    },
    {
      "key": "AWS_ENDPOINT",
      "service": "pixelfed",
      "description": "Object storage endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "CACHE_DRIVER",
      "service": "pixelfed",
      "description": "Legacy alias for the cache backend",
      "secret": false,
      "strategy": "default",
      "default": "redis"
    },
    {
      "key": "IMAGE_DRIVER",
      "service": "pixelfed",
      "description": "Image processing library",
      "secret": false,
      "strategy": "default",
      "default": "gd"
    },
    {
      "key": "PF_MAX_USERS",
      "service": "pixelfed",
      "description": "Account cap for the instance",
      "secret": false,
      "strategy": "default",
      "default": "1000"
    },
    {
      "key": "QUEUE_DRIVER",
      "service": "pixelfed",
      "description": "Queue backend",
      "secret": false,
      "strategy": "default",
      "default": "redis"
    },
    {
      "key": "REDIS_CLIENT",
      "service": "pixelfed",
      "description": "PHP Redis extension",
      "secret": false,
      "strategy": "default",
      "default": "phpredis"
    },
    {
      "key": "REDIS_SCHEME",
      "service": "pixelfed",
      "description": "Redis transport",
      "secret": false,
      "strategy": "default",
      "default": "tcp"
    },
    {
      "key": "DB_CONNECTION",
      "service": "pixelfed",
      "description": "Database driver",
      "secret": false,
      "strategy": "default",
      "default": "mysql"
    },
    {
      "key": "IMAGE_QUALITY",
      "service": "pixelfed",
      "description": "JPEG quality, 1-100",
      "secret": false,
      "strategy": "default",
      "default": "80"
    },
    {
      "key": "MAIL_AUTO_TLS",
      "service": "pixelfed",
      "description": "Do not attempt STARTTLS",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "MAIL_PASSWORD",
      "service": "pixelfed",
      "description": "SMTP password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MAIL_USERNAME",
      "service": "pixelfed",
      "description": "SMTP username",
      "secret": false,
      "strategy": "default",
      "default": "pixelfed"
    },
    {
      "key": "OAUTH_ENABLED",
      "service": "pixelfed",
      "description": "Mobile and third-party app API",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "TRUST_PROXIES",
      "service": "pixelfed",
      "description": "Trust the edge, read leftmost XFF",
      "secret": false,
      "strategy": "default",
      "default": "0.0.0.0/0,::/0"
    },
    {
      "key": "AP_SHAREDINBOX",
      "service": "pixelfed",
      "description": "Accept shared-inbox deliveries",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "HORIZON_PREFIX",
      "service": "pixelfed",
      "description": "Horizon key prefix in Redis",
      "secret": false,
      "strategy": "default",
      "default": "horizon-"
    },
    {
      "key": "MAIL_FROM_NAME",
      "service": "pixelfed",
      "description": "Sender display name",
      "secret": false,
      "strategy": "default",
      "default": "Pixelfed"
    },
    {
      "key": "MAX_PHOTO_SIZE",
      "service": "pixelfed",
      "description": "Per-file upload cap in KB",
      "secret": false,
      "strategy": "default",
      "default": "15000"
    },
    {
      "key": "REDIS_DATABASE",
      "service": "pixelfed",
      "description": "Redis database index",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "REDIS_PASSWORD",
      "service": "pixelfed",
      "description": "Redis auth password",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SESSION_DRIVER",
      "service": "pixelfed",
      "description": "Sessions in MySQL, not Redis",
      "secret": false,
      "strategy": "default",
      "default": "database"
    },
    {
      "key": "APP_SECRET_SEED",
      "service": "pixelfed",
      "description": "Seed the app key is derived from",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "AUTORUN_ENABLED",
      "service": "pixelfed",
      "description": "Run boot-time Laravel tasks",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "CADDY_HTTP_PORT",
      "service": "pixelfed",
      "description": "Port FrankenPHP listens on",
      "secret": false,
      "strategy": "default",
      "default": "8080"
    },
    {
      "key": "MAIL_ENCRYPTION",
      "service": "pixelfed",
      "description": "No TLS on the private listener",
      "secret": false,
      "strategy": "default",
      "default": "null"
    },
    {
      "key": "PF_ENABLE_CLOUD",
      "service": "pixelfed",
      "description": "Store media in object storage",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RAILWAY_RUN_UID",
      "service": "pixelfed",
      "description": "Entrypoint chowns the volume, then drops to www-data",
      "secret": false,
      "strategy": "default",
      "default": "0"
    },
    {
      "key": "AP_REMOTE_FOLLOW",
      "service": "pixelfed",
      "description": "Allow follows from remote servers",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "BROADCAST_DRIVER",
      "service": "pixelfed",
      "description": "No websocket broadcaster configured",
      "secret": false,
      "strategy": "default",
      "default": "log"
    },
    {
      "key": "FILESYSTEM_CLOUD",
      "service": "pixelfed",
      "description": "Cloud disk driver",
      "secret": false,
      "strategy": "default",
      "default": "s3"
    },
    {
      "key": "MAX_ALBUM_LENGTH",
      "service": "pixelfed",
      "description": "Photos per post",
      "secret": false,
      "strategy": "default",
      "default": "4"
    },
    {
      "key": "PHP_MEMORY_LIMIT",
      "service": "pixelfed",
      "description": "PHP memory ceiling",
      "secret": false,
      "strategy": "default",
      "default": "512M"
    },
    {
      "key": "QUEUE_CONNECTION",
      "service": "pixelfed",
      "description": "Queue connection name",
      "secret": false,
      "strategy": "default",
      "default": "redis"
    },
    {
      "key": "AWS_ACCESS_KEY_ID",
      "service": "pixelfed",
      "description": "Object storage access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MAIL_FROM_ADDRESS",
      "service": "pixelfed",
      "description": "Envelope sender address",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "OPEN_REGISTRATION",
      "service": "pixelfed",
      "description": "Public sign-ups, toggled in the admin UI",
      "secret": false,
      "strategy": "default",
      "default": "false"
    },
    {
      "key": "PHP_POST_MAX_SIZE",
      "service": "pixelfed",
      "description": "PHP request body limit",
      "secret": false,
      "strategy": "default",
      "default": "100M"
    },
    {
      "key": "AWS_DEFAULT_REGION",
      "service": "pixelfed",
      "description": "Object storage region",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MAX_CAPTION_LENGTH",
      "service": "pixelfed",
      "description": "Caption character limit",
      "secret": false,
      "strategy": "default",
      "default": "500"
    },
    {
      "key": "PF_OPTIMIZE_IMAGES",
      "service": "pixelfed",
      "description": "Recompress uploads",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PHP_OPCACHE_ENABLE",
      "service": "pixelfed",
      "description": "Enable the PHP opcode cache",
      "secret": false,
      "strategy": "default",
      "default": "1"
    },
    {
      "key": "ENABLE_CONFIG_CACHE",
      "service": "pixelfed",
      "description": "Let the admin UI override settings",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PIXELFED_ADMIN_NAME",
      "service": "pixelfed",
      "description": "First admin display name",
      "secret": false,
      "strategy": "default",
      "default": "Administrator"
    },
    {
      "key": "HORIZON_MEMORY_LIMIT",
      "service": "pixelfed",
      "description": "Horizon master memory ceiling, MB",
      "secret": false,
      "strategy": "default",
      "default": "256"
    },
    {
      "key": "PIXELFED_ADMIN_EMAIL",
      "service": "pixelfed",
      "description": "First admin login email",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_domain"
    },
    {
      "key": "AWS_SECRET_ACCESS_KEY",
      "service": "pixelfed",
      "description": "Object storage secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "HORIZON_MAX_PROCESSES",
      "service": "pixelfed",
      "description": "Maximum queue workers",
      "secret": false,
      "strategy": "default",
      "default": "8"
    },
    {
      "key": "SESSION_SECURE_COOKIE",
      "service": "pixelfed",
      "description": "Cookies only over HTTPS",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PHP_MAX_EXECUTION_TIME",
      "service": "pixelfed",
      "description": "Request timeout in seconds",
      "secret": false,
      "strategy": "default",
      "default": "300"
    },
    {
      "key": "PIXELFED_ADMIN_PASSWORD",
      "service": "pixelfed",
      "description": "First admin password",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "PIXELFED_ADMIN_USERNAME",
      "service": "pixelfed",
      "description": "First admin username, not a reserved name",
      "secret": false,
      "strategy": "default",
      "default": "curator"
    },
    {
      "key": "AUTORUN_LARAVEL_OPTIMIZE",
      "service": "pixelfed",
      "description": "Cache config, routes and views",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "INSTANCE_DISCOVER_PUBLIC",
      "service": "pixelfed",
      "description": "Show the public discover feed",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PHP_UPLOAD_MAX_FILE_SIZE",
      "service": "pixelfed",
      "description": "PHP upload size limit",
      "secret": false,
      "strategy": "default",
      "default": "100M"
    },
    {
      "key": "AUTORUN_LARAVEL_MIGRATION",
      "service": "pixelfed",
      "description": "Migrate on every deploy",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "HORIZON_SUPERVISOR_MEMORY",
      "service": "pixelfed",
      "description": "Per-worker memory ceiling, MB",
      "secret": false,
      "strategy": "default",
      "default": "256"
    },
    {
      "key": "ENFORCE_EMAIL_VERIFICATION",
      "service": "pixelfed",
      "description": "Require confirmed email addresses",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "HORIZON_SUPERVISOR_TIMEOUT",
      "service": "pixelfed",
      "description": "Job timeout in seconds",
      "secret": false,
      "strategy": "default",
      "default": "600"
    },
    {
      "key": "AWS_USE_PATH_STYLE_ENDPOINT",
      "service": "pixelfed",
      "description": "Path-style addressing",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "AUTORUN_LARAVEL_STORAGE_LINK",
      "service": "pixelfed",
      "description": "Link public storage at boot",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "MEDIA_DELETE_LOCAL_AFTER_CLOUD",
      "service": "pixelfed",
      "description": "Free the volume after upload",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "RAILWAY_HEALTHCHECK_TIMEOUT_SEC",
      "service": "pixelfed",
      "description": "Window for the first-boot migration",
      "secret": false,
      "strategy": "default",
      "default": "900"
    },
    {
      "key": "AWS_REQUEST_CHECKSUM_CALCULATION",
      "service": "pixelfed",
      "description": "Skip optional upload checksums",
      "secret": false,
      "strategy": "default",
      "default": "WHEN_REQUIRED"
    },
    {
      "key": "AWS_RESPONSE_CHECKSUM_VALIDATION",
      "service": "pixelfed",
      "description": "Skip optional download checksums",
      "secret": false,
      "strategy": "default",
      "default": "WHEN_REQUIRED"
    },
    {
      "key": "AUTORUN_LARAVEL_MIGRATION_TIMEOUT",
      "service": "pixelfed",
      "description": "Seconds to wait for MySQL",
      "secret": false,
      "strategy": "default",
      "default": "180"
    },
    {
      "key": "AUTORUN_LARAVEL_MIGRATION_ISOLATION",
      "service": "pixelfed",
      "description": "Lock migrations across containers",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "PORT",
      "service": "media",
      "description": "HTTP listening port",
      "secret": false,
      "strategy": "default",
      "default": "3000"
    },
    {
      "key": "S3_BUCKET",
      "service": "media",
      "description": "Object storage bucket name",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_REGION",
      "service": "media",
      "description": "Object storage region",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_ENDPOINT",
      "service": "media",
      "description": "Object storage endpoint",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PUBLIC_PREFIXES",
      "service": "media",
      "description": "Key prefixes served publicly",
      "secret": false,
      "strategy": "default",
      "default": "public/,cache/"
    },
    {
      "key": "S3_ACCESS_KEY_ID",
      "service": "media",
      "description": "Object storage access key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "S3_SECRET_ACCESS_KEY",
      "service": "media",
      "description": "Object storage secret key",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "PORT",
      "service": "mailpit",
      "description": "Web inbox listening port",
      "secret": false,
      "strategy": "default",
      "default": "8025"
    },
    {
      "key": "MP_UI_AUTH",
      "service": "mailpit",
      "description": "Basic auth for the web inbox",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MP_DATABASE",
      "service": "mailpit",
      "description": "Message store on the volume",
      "secret": false,
      "strategy": "default",
      "default": "/data/mailpit.db"
    },
    {
      "key": "MP_SMTP_AUTH",
      "service": "mailpit",
      "description": "SMTP credentials Pixelfed uses",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "SMTP_PASSWORD",
      "service": "mailpit",
      "description": "Shared SMTP and inbox password",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    },
    {
      "key": "MP_MAX_MESSAGES",
      "service": "mailpit",
      "description": "Messages kept before rotation",
      "secret": false,
      "strategy": "default",
      "default": "5000"
    },
    {
      "key": "MP_SMTP_AUTH_ALLOW_INSECURE",
      "service": "mailpit",
      "description": "Allow auth on the plaintext listener",
      "secret": false,
      "strategy": "default",
      "default": "true"
    },
    {
      "key": "MYSQLHOST",
      "service": "MySQL",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MYSQLPORT",
      "service": "MySQL",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "default",
      "default": "3306"
    },
    {
      "key": "MYSQLUSER",
      "service": "MySQL",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "default",
      "default": "root"
    },
    {
      "key": "MYSQL_URL",
      "service": "MySQL",
      "description": "Private connection string",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "railway_private_domain"
    },
    {
      "key": "MYSQLDATABASE",
      "service": "MySQL",
      "description": "Data panel alias, not read by the server",
      "secret": false,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MYSQLPASSWORD",
      "service": "MySQL",
      "description": "Data panel alias, not read by the server",
      "secret": true,
      "strategy": "railway_provided",
      "railway_source": "reference_variable"
    },
    {
      "key": "MYSQL_DATABASE",
      "service": "MySQL",
      "description": "Database created on first boot",
      "secret": false,
      "strategy": "default",
      "default": "railway"
    },
    {
      "key": "MYSQL_ROOT_PASSWORD",
      "service": "MySQL",
      "description": "Root password, read by the entrypoint",
      "secret": true,
      "strategy": "generate",
      "generate": "strong_password"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "pixelfed-fediverse"
      }
    },
    "cli": "railway deploy --template pixelfed-fediverse",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "6b4da843-469b-4eb1-bd0e-bd1c3778c645",
            "serializedConfig": {
              "buckets": {
                "af11e58f-aab5-4745-9fc7-062a898ee183": {
                  "name": "pixelfed-media"
                }
              },
              "services": {
                "42271c76-8e74-4037-abc6-dc15a2f0202d": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/redis.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\"",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "redis:8.2"
                  },
                  "variables": {
                    "REDISHOST": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDISPORT": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "6379"
                    },
                    "REDISUSER": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "default"
                    },
                    "REDIS_URL": {
                      "isOptional": false,
                      "description": "Private connection string",
                      "defaultValue": "redis://${{ REDISUSER }}:${{ REDIS_PASSWORD }}@${{ REDISHOST }}:${{ REDISPORT }}"
                    },
                    "REDISPASSWORD": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{REDIS_PASSWORD}}"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Auth password, read by the server",
                      "defaultValue": "{{REDIS_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "42271c76-8e74-4037-abc6-dc15a2f0202d": {
                      "mountPath": "/data"
                    }
                  }
                },
                "466f3c24-9de0-43e2-90a3-dd318932beb2": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/pixelfed.svg",
                  "name": "pixelfed",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/api/v1/instance",
                    "preDeployCommand": [],
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/gridalpha/pixelfed-railway",
                    "rootDirectory": "app"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Port Railway health-checks",
                      "defaultValue": "8080"
                    },
                    "APP_ENV": {
                      "isOptional": false,
                      "description": "Laravel environment",
                      "defaultValue": "production"
                    },
                    "APP_URL": {
                      "isOptional": false,
                      "description": "Public base URL",
                      "defaultValue": "https://${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "AWS_URL": {
                      "isOptional": false,
                      "description": "Public base URL for media links",
                      "defaultValue": "https://${{media.RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "DB_HOST": {
                      "isOptional": false,
                      "description": "Private MySQL hostname",
                      "defaultValue": "${{MySQL.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "DB_PORT": {
                      "isOptional": false,
                      "description": "MySQL port",
                      "defaultValue": "3306"
                    },
                    "EXP_EMC": {
                      "isOptional": false,
                      "description": "Experimental media caching",
                      "defaultValue": "true"
                    },
                    "APP_NAME": {
                      "isOptional": false,
                      "description": "Instance name shown in the UI",
                      "defaultValue": "Pixelfed"
                    },
                    "AP_INBOX": {
                      "isOptional": false,
                      "description": "Accept federated deliveries",
                      "defaultValue": "true"
                    },
                    "SSL_MODE": {
                      "isOptional": false,
                      "description": "TLS terminates at Railway's edge",
                      "defaultValue": "off"
                    },
                    "APP_DEBUG": {
                      "isOptional": false,
                      "description": "Never enable on a public instance",
                      "defaultValue": "false"
                    },
                    "AP_OUTBOX": {
                      "isOptional": false,
                      "description": "Publish an outbox collection",
                      "defaultValue": "true"
                    },
                    "LOG_LEVEL": {
                      "isOptional": false,
                      "description": "Log verbosity",
                      "defaultValue": "info"
                    },
                    "MAIL_HOST": {
                      "isOptional": false,
                      "description": "SMTP hostname",
                      "defaultValue": "${{mailpit.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "MAIL_PORT": {
                      "isOptional": false,
                      "description": "SMTP port",
                      "defaultValue": "1025"
                    },
                    "APP_DOMAIN": {
                      "isOptional": false,
                      "description": "Federation identity host",
                      "defaultValue": "${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "AWS_BUCKET": {
                      "isOptional": false,
                      "description": "Object storage bucket name",
                      "defaultValue": "${{pixelfed-media.BUCKET}}"
                    },
                    "REDIS_HOST": {
                      "isOptional": false,
                      "description": "Private Redis hostname",
                      "defaultValue": "${{Redis.RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "REDIS_PORT": {
                      "isOptional": false,
                      "description": "Redis port",
                      "defaultValue": "6379"
                    },
                    "CACHE_STORE": {
                      "isOptional": false,
                      "description": "Application cache backend",
                      "defaultValue": "redis"
                    },
                    "DB_DATABASE": {
                      "isOptional": false,
                      "description": "Database name",
                      "defaultValue": "${{MySQL.MYSQLDATABASE}}"
                    },
                    "DB_PASSWORD": {
                      "isOptional": false,
                      "description": "Database password",
                      "defaultValue": "${{MySQL.MYSQLPASSWORD}}"
                    },
                    "DB_USERNAME": {
                      "isOptional": false,
                      "description": "Database user",
                      "defaultValue": "${{MySQL.MYSQLUSER}}"
                    },
                    "LOG_CHANNEL": {
                      "isOptional": false,
                      "description": "Send logs to the deploy log",
                      "defaultValue": "stderr"
                    },
                    "MAIL_DRIVER": {
                      "isOptional": false,
                      "description": "Mail transport",
                      "defaultValue": "smtp"
                    },
                    "MAIL_MAILER": {
                      "isOptional": false,
                      "description": "Mail transport, Laravel 9+ name",
                      "defaultValue": "smtp"
                    },
                    "ACTIVITY_PUB": {
                      "isOptional": false,
                      "description": "Federation master switch",
                      "defaultValue": "true"
                    },
                    "ADMIN_DOMAIN": {
                      "isOptional": false,
                      "description": "Admin panel host",
                      "defaultValue": "${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "APP_TIMEZONE": {
                      "isOptional": false,
                      "description": "Default timezone",
                      "defaultValue": "UTC"
                    },
                    "AWS_ENDPOINT": {
                      "isOptional": false,
                      "description": "Object storage endpoint",
                      "defaultValue": "${{pixelfed-media.ENDPOINT}}"
                    },
                    "CACHE_DRIVER": {
                      "isOptional": false,
                      "description": "Legacy alias for the cache backend",
                      "defaultValue": "redis"
                    },
                    "IMAGE_DRIVER": {
                      "isOptional": false,
                      "description": "Image processing library",
                      "defaultValue": "gd"
                    },
                    "PF_MAX_USERS": {
                      "isOptional": true,
                      "description": "Account cap for the instance",
                      "defaultValue": "1000"
                    },
                    "QUEUE_DRIVER": {
                      "isOptional": false,
                      "description": "Queue backend",
                      "defaultValue": "redis"
                    },
                    "REDIS_CLIENT": {
                      "isOptional": false,
                      "description": "PHP Redis extension",
                      "defaultValue": "phpredis"
                    },
                    "REDIS_SCHEME": {
                      "isOptional": false,
                      "description": "Redis transport",
                      "defaultValue": "tcp"
                    },
                    "DB_CONNECTION": {
                      "isOptional": false,
                      "description": "Database driver",
                      "defaultValue": "mysql"
                    },
                    "IMAGE_QUALITY": {
                      "isOptional": true,
                      "description": "JPEG quality, 1-100",
                      "defaultValue": "80"
                    },
                    "MAIL_AUTO_TLS": {
                      "isOptional": false,
                      "description": "Do not attempt STARTTLS",
                      "defaultValue": "false"
                    },
                    "MAIL_PASSWORD": {
                      "isOptional": false,
                      "description": "SMTP password",
                      "defaultValue": "${{mailpit.SMTP_PASSWORD}}"
                    },
                    "MAIL_USERNAME": {
                      "isOptional": false,
                      "description": "SMTP username",
                      "defaultValue": "pixelfed"
                    },
                    "OAUTH_ENABLED": {
                      "isOptional": false,
                      "description": "Mobile and third-party app API",
                      "defaultValue": "true"
                    },
                    "TRUST_PROXIES": {
                      "isOptional": false,
                      "description": "Trust the edge, read leftmost XFF",
                      "defaultValue": "0.0.0.0/0,::/0"
                    },
                    "AP_SHAREDINBOX": {
                      "isOptional": false,
                      "description": "Accept shared-inbox deliveries",
                      "defaultValue": "true"
                    },
                    "HORIZON_PREFIX": {
                      "isOptional": false,
                      "description": "Horizon key prefix in Redis",
                      "defaultValue": "horizon-"
                    },
                    "MAIL_FROM_NAME": {
                      "isOptional": true,
                      "description": "Sender display name",
                      "defaultValue": "Pixelfed"
                    },
                    "MAX_PHOTO_SIZE": {
                      "isOptional": true,
                      "description": "Per-file upload cap in KB",
                      "defaultValue": "15000"
                    },
                    "REDIS_DATABASE": {
                      "isOptional": false,
                      "description": "Redis database index",
                      "defaultValue": "0"
                    },
                    "REDIS_PASSWORD": {
                      "isOptional": false,
                      "description": "Redis auth password",
                      "defaultValue": "${{Redis.REDISPASSWORD}}"
                    },
                    "SESSION_DRIVER": {
                      "isOptional": false,
                      "description": "Sessions in MySQL, not Redis",
                      "defaultValue": "database"
                    },
                    "APP_SECRET_SEED": {
                      "isOptional": false,
                      "description": "Seed the app key is derived from",
                      "defaultValue": "{{APP_SECRET_SEED}}"
                    },
                    "AUTORUN_ENABLED": {
                      "isOptional": false,
                      "description": "Run boot-time Laravel tasks",
                      "defaultValue": "true"
                    },
                    "CADDY_HTTP_PORT": {
                      "isOptional": false,
                      "description": "Port FrankenPHP listens on",
                      "defaultValue": "8080"
                    },
                    "MAIL_ENCRYPTION": {
                      "isOptional": false,
                      "description": "No TLS on the private listener",
                      "defaultValue": "null"
                    },
                    "PF_ENABLE_CLOUD": {
                      "isOptional": false,
                      "description": "Store media in object storage",
                      "defaultValue": "true"
                    },
                    "RAILWAY_RUN_UID": {
                      "isOptional": false,
                      "description": "Entrypoint chowns the volume, then drops to www-data",
                      "defaultValue": "0"
                    },
                    "AP_REMOTE_FOLLOW": {
                      "isOptional": false,
                      "description": "Allow follows from remote servers",
                      "defaultValue": "true"
                    },
                    "BROADCAST_DRIVER": {
                      "isOptional": false,
                      "description": "No websocket broadcaster configured",
                      "defaultValue": "log"
                    },
                    "FILESYSTEM_CLOUD": {
                      "isOptional": false,
                      "description": "Cloud disk driver",
                      "defaultValue": "s3"
                    },
                    "MAX_ALBUM_LENGTH": {
                      "isOptional": true,
                      "description": "Photos per post",
                      "defaultValue": "4"
                    },
                    "PHP_MEMORY_LIMIT": {
                      "isOptional": false,
                      "description": "PHP memory ceiling",
                      "defaultValue": "512M"
                    },
                    "QUEUE_CONNECTION": {
                      "isOptional": false,
                      "description": "Queue connection name",
                      "defaultValue": "redis"
                    },
                    "AWS_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Object storage access key",
                      "defaultValue": "${{pixelfed-media.ACCESS_KEY_ID}}"
                    },
                    "MAIL_FROM_ADDRESS": {
                      "isOptional": true,
                      "description": "Envelope sender address",
                      "defaultValue": "pixelfed@${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "OPEN_REGISTRATION": {
                      "isOptional": false,
                      "description": "Public sign-ups, toggled in the admin UI",
                      "defaultValue": "false"
                    },
                    "PHP_POST_MAX_SIZE": {
                      "isOptional": false,
                      "description": "PHP request body limit",
                      "defaultValue": "100M"
                    },
                    "AWS_DEFAULT_REGION": {
                      "isOptional": false,
                      "description": "Object storage region",
                      "defaultValue": "${{pixelfed-media.REGION}}"
                    },
                    "MAX_CAPTION_LENGTH": {
                      "isOptional": true,
                      "description": "Caption character limit",
                      "defaultValue": "500"
                    },
                    "PF_OPTIMIZE_IMAGES": {
                      "isOptional": false,
                      "description": "Recompress uploads",
                      "defaultValue": "true"
                    },
                    "PHP_OPCACHE_ENABLE": {
                      "isOptional": false,
                      "description": "Enable the PHP opcode cache",
                      "defaultValue": "1"
                    },
                    "ENABLE_CONFIG_CACHE": {
                      "isOptional": false,
                      "description": "Let the admin UI override settings",
                      "defaultValue": "true"
                    },
                    "PIXELFED_ADMIN_NAME": {
                      "isOptional": true,
                      "description": "First admin display name",
                      "defaultValue": "Administrator"
                    },
                    "HORIZON_MEMORY_LIMIT": {
                      "isOptional": false,
                      "description": "Horizon master memory ceiling, MB",
                      "defaultValue": "256"
                    },
                    "PIXELFED_ADMIN_EMAIL": {
                      "isOptional": true,
                      "description": "First admin login email",
                      "defaultValue": "admin@${{RAILWAY_PUBLIC_DOMAIN}}"
                    },
                    "AWS_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Object storage secret key",
                      "defaultValue": "${{pixelfed-media.SECRET_ACCESS_KEY}}"
                    },
                    "HORIZON_MAX_PROCESSES": {
                      "isOptional": true,
                      "description": "Maximum queue workers",
                      "defaultValue": "8"
                    },
                    "SESSION_SECURE_COOKIE": {
                      "isOptional": false,
                      "description": "Cookies only over HTTPS",
                      "defaultValue": "true"
                    },
                    "PHP_MAX_EXECUTION_TIME": {
                      "isOptional": false,
                      "description": "Request timeout in seconds",
                      "defaultValue": "300"
                    },
                    "PIXELFED_ADMIN_PASSWORD": {
                      "isOptional": false,
                      "description": "First admin password",
                      "defaultValue": "{{PIXELFED_ADMIN_PASSWORD}}"
                    },
                    "PIXELFED_ADMIN_USERNAME": {
                      "isOptional": false,
                      "description": "First admin username, not a reserved name",
                      "defaultValue": "curator"
                    },
                    "AUTORUN_LARAVEL_OPTIMIZE": {
                      "isOptional": false,
                      "description": "Cache config, routes and views",
                      "defaultValue": "true"
                    },
                    "INSTANCE_DISCOVER_PUBLIC": {
                      "isOptional": false,
                      "description": "Show the public discover feed",
                      "defaultValue": "true"
                    },
                    "PHP_UPLOAD_MAX_FILE_SIZE": {
                      "isOptional": false,
                      "description": "PHP upload size limit",
                      "defaultValue": "100M"
                    },
                    "AUTORUN_LARAVEL_MIGRATION": {
                      "isOptional": false,
                      "description": "Migrate on every deploy",
                      "defaultValue": "true"
                    },
                    "HORIZON_SUPERVISOR_MEMORY": {
                      "isOptional": false,
                      "description": "Per-worker memory ceiling, MB",
                      "defaultValue": "256"
                    },
                    "ENFORCE_EMAIL_VERIFICATION": {
                      "isOptional": false,
                      "description": "Require confirmed email addresses",
                      "defaultValue": "true"
                    },
                    "HORIZON_SUPERVISOR_TIMEOUT": {
                      "isOptional": false,
                      "description": "Job timeout in seconds",
                      "defaultValue": "600"
                    },
                    "AWS_USE_PATH_STYLE_ENDPOINT": {
                      "isOptional": false,
                      "description": "Path-style addressing",
                      "defaultValue": "true"
                    },
                    "AUTORUN_LARAVEL_STORAGE_LINK": {
                      "isOptional": false,
                      "description": "Link public storage at boot",
                      "defaultValue": "true"
                    },
                    "MEDIA_DELETE_LOCAL_AFTER_CLOUD": {
                      "isOptional": false,
                      "description": "Free the volume after upload",
                      "defaultValue": "true"
                    },
                    "RAILWAY_HEALTHCHECK_TIMEOUT_SEC": {
                      "isOptional": false,
                      "description": "Window for the first-boot migration",
                      "defaultValue": "900"
                    },
                    "AWS_REQUEST_CHECKSUM_CALCULATION": {
                      "isOptional": false,
                      "description": "Skip optional upload checksums",
                      "defaultValue": "WHEN_REQUIRED"
                    },
                    "AWS_RESPONSE_CHECKSUM_VALIDATION": {
                      "isOptional": false,
                      "description": "Skip optional download checksums",
                      "defaultValue": "WHEN_REQUIRED"
                    },
                    "AUTORUN_LARAVEL_MIGRATION_TIMEOUT": {
                      "isOptional": false,
                      "description": "Seconds to wait for MySQL",
                      "defaultValue": "180"
                    },
                    "AUTORUN_LARAVEL_MIGRATION_ISOLATION": {
                      "isOptional": false,
                      "description": "Lock migrations across containers",
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8080": {
                        "port": 8080
                      }
                    }
                  },
                  "volumeMounts": {
                    "466f3c24-9de0-43e2-90a3-dd318932beb2": {
                      "mountPath": "/var/www/html/storage"
                    }
                  }
                },
                "8c48f9a8-59ce-4059-bc01-bcebec2d8b4e": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/pixelfed.svg",
                  "name": "media",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/healthz",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "repo": "https://github.com/gridalpha/pixelfed-railway",
                    "rootDirectory": "media-gateway"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "HTTP listening port",
                      "defaultValue": "3000"
                    },
                    "S3_BUCKET": {
                      "isOptional": false,
                      "description": "Object storage bucket name",
                      "defaultValue": "${{pixelfed-media.BUCKET}}"
                    },
                    "S3_REGION": {
                      "isOptional": false,
                      "description": "Object storage region",
                      "defaultValue": "${{pixelfed-media.REGION}}"
                    },
                    "S3_ENDPOINT": {
                      "isOptional": false,
                      "description": "Object storage endpoint",
                      "defaultValue": "${{pixelfed-media.ENDPOINT}}"
                    },
                    "PUBLIC_PREFIXES": {
                      "isOptional": true,
                      "description": "Key prefixes served publicly",
                      "defaultValue": "public/,cache/"
                    },
                    "S3_ACCESS_KEY_ID": {
                      "isOptional": false,
                      "description": "Object storage access key",
                      "defaultValue": "${{pixelfed-media.ACCESS_KEY_ID}}"
                    },
                    "S3_SECRET_ACCESS_KEY": {
                      "isOptional": false,
                      "description": "Object storage secret key",
                      "defaultValue": "${{pixelfed-media.SECRET_ACCESS_KEY}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:3000": {
                        "port": 3000
                      }
                    }
                  }
                },
                "d38adb64-9bd5-4c8f-b619-41e3ac38110f": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mailpit.svg",
                  "name": "mailpit",
                  "deploy": {
                    "startCommand": null,
                    "healthcheckPath": "/livez",
                    "restartPolicyType": "ALWAYS",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "axllent/mailpit:latest"
                  },
                  "variables": {
                    "PORT": {
                      "isOptional": false,
                      "description": "Web inbox listening port",
                      "defaultValue": "8025"
                    },
                    "MP_UI_AUTH": {
                      "isOptional": false,
                      "description": "Basic auth for the web inbox",
                      "defaultValue": "pixelfed:${{SMTP_PASSWORD}}"
                    },
                    "MP_DATABASE": {
                      "isOptional": false,
                      "description": "Message store on the volume",
                      "defaultValue": "/data/mailpit.db"
                    },
                    "MP_SMTP_AUTH": {
                      "isOptional": false,
                      "description": "SMTP credentials Pixelfed uses",
                      "defaultValue": "pixelfed:${{SMTP_PASSWORD}}"
                    },
                    "SMTP_PASSWORD": {
                      "isOptional": false,
                      "description": "Shared SMTP and inbox password",
                      "defaultValue": "{{SMTP_PASSWORD}}"
                    },
                    "MP_MAX_MESSAGES": {
                      "isOptional": true,
                      "description": "Messages kept before rotation",
                      "defaultValue": "5000"
                    },
                    "MP_SMTP_AUTH_ALLOW_INSECURE": {
                      "isOptional": false,
                      "description": "Allow auth on the plaintext listener",
                      "defaultValue": "true"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>:8025": {
                        "port": 8025
                      }
                    }
                  },
                  "volumeMounts": {
                    "d38adb64-9bd5-4c8f-b619-41e3ac38110f": {
                      "mountPath": "/data"
                    }
                  }
                },
                "de631f68-3d42-423f-ac88-51a4d9076858": {
                  "icon": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mysql.svg",
                  "name": "MySQL",
                  "deploy": {
                    "startCommand": "docker-entrypoint.sh mysqld --innodb-use-native-aio=0 --disable-log-bin --performance_schema=0 --innodb-buffer-pool-size=1G",
                    "healthcheckPath": null,
                    "restartPolicyType": "ON_FAILURE",
                    "restartPolicyMaxRetries": 10
                  },
                  "source": {
                    "image": "mysql:9.4"
                  },
                  "variables": {
                    "MYSQLHOST": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{RAILWAY_PRIVATE_DOMAIN}}"
                    },
                    "MYSQLPORT": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "3306"
                    },
                    "MYSQLUSER": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "root"
                    },
                    "MYSQL_URL": {
                      "isOptional": false,
                      "description": "Private connection string",
                      "defaultValue": "mysql://${{ MYSQLUSER }}:${{ MYSQL_ROOT_PASSWORD }}@${{ RAILWAY_PRIVATE_DOMAIN }}:3306/${{ MYSQL_DATABASE }}"
                    },
                    "MYSQLDATABASE": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{ MYSQL_DATABASE }}"
                    },
                    "MYSQLPASSWORD": {
                      "isOptional": false,
                      "description": "Data panel alias, not read by the server",
                      "defaultValue": "${{ MYSQL_ROOT_PASSWORD }}"
                    },
                    "MYSQL_DATABASE": {
                      "isOptional": false,
                      "description": "Database created on first boot",
                      "defaultValue": "railway"
                    },
                    "MYSQL_ROOT_PASSWORD": {
                      "isOptional": false,
                      "description": "Root password, read by the entrypoint",
                      "defaultValue": "{{MYSQL_ROOT_PASSWORD}}"
                    }
                  },
                  "volumeMounts": {
                    "de631f68-3d42-423f-ac88-51a4d9076858": {
                      "mountPath": "/var/lib/mysql"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {
    "healthcheck": {
      "service": "pixelfed",
      "method": "GET",
      "path": "/api/v1/instance",
      "expect_status": 200
    }
  },
  "resources": {
    "expected_services": 5,
    "needs_volume": true
  },
  "generated_at": "2026-09-22T22:14:50.114Z",
  "generator_version": "0.1.0",
  "status": "degraded",
  "validated_at": "2026-09-21T19:33:14.608Z",
  "success_rate_30d": 0.1429,
  "validation": {
    "last_run_id": "run_ba83b9bd6ccc4e52accc",
    "checks": [
      {
        "name": "workflow_completed",
        "passed": false,
        "detail": "Your workspace has been restricted. Please contact support to resolve this."
      }
    ],
    "typical_ready_seconds": 184
  }
}
