Deploy Cachet | Open-Source Status Page on Railway
Self-host Cachet. Incident communication w/ components, incidents & metrics
Cachet
Just deployed
Just deployed
/var/lib/postgresql/data
Deploy and Host Cachet on Railway
Deploy Cachet on Railway to run a beautiful, open-source status page system that keeps your users informed during outages, incidents, and scheduled maintenance. Self-host Cachet with full control over your branding, components, and incident communication — backed by 15k+ GitHub stars and trusted by organizations from startups to Fortune 500 companies.
Run Cachet on Railway with a pre-configured PostgreSQL database, automated TLS, and a public HTTPS URL ready for your team. The first visit launches a setup wizard where you name your status page, create an admin account, and start adding components — no CLI access or config files required.
Getting Started with Cachet on Railway
After deployment completes, open your Railway-provided URL. Cachet redirects to a three-step setup wizard that verifies your environment, configures your site name and timezone, and creates your administrator account. Choose a strong password — this account has full access to incident management and component configuration. Once setup finishes, visit /dashboard to add your first component (e.g., "API", "Website", "Database") and set its status. Create a test incident to verify your status page displays correctly on the public homepage.

About Hosting Cachet
Cachet is an open-source status page system built with PHP (Laravel). It provides a clean public-facing page where users check service health, and a dashboard where your team manages incidents, components, and metrics.
- Component management — group services by category, set statuses (Operational, Performance Issues, Partial Outage, Major Outage)
- Incident reporting — create, update, and resolve incidents with timestamped messages visible on the public page
- Scheduled maintenance — announce upcoming maintenance windows so users know what to expect
- Custom metrics — display graphs of response time, uptime percentage, or any custom data via the API
- Subscriber notifications — users subscribe by email and receive automatic updates when incidents are created or updated
- JSON API — programmatic access to components, incidents, metrics, and subscribers for automation and monitoring integrations
- Multi-language support — translated into 30+ languages with full i18n
Why Deploy Cachet on Railway
- Managed PostgreSQL database with automatic provisioning
- HTTPS with automatic TLS — no reverse proxy setup
- Environment variable configuration — no config files to edit
- One-click deploy with setup wizard on first visit
- Scale compute resources as subscriber count grows
Common Use Cases for Cachet
- SaaS uptime communication — give customers a branded status page showing real-time health of your API, dashboard, and integrations
- Internal infrastructure monitoring — let DevOps teams track and communicate the status of internal services, CI/CD pipelines, and databases
- Scheduled maintenance announcements — notify users ahead of planned downtime with start/end times and impact descriptions
- Incident post-mortems — use incident update history as a timeline for post-incident reviews and accountability
Dependencies for Self-Hosting Cachet on Railway
This template deploys two services:
- Cachet —
cachethq/docker:latest— PHP application with Nginx, PHP-FPM, and a queue worker managed by supervisord - Postgres — Railway-managed PostgreSQL database for components, incidents, metrics, and subscriber data
Environment Variables Reference for Cachet
| Variable | Description | Example |
|---|---|---|
APP_KEY | Laravel encryption key (must be static) | ${{secret(32)}} |
APP_URL | Public URL of the status page | https://${{RAILWAY_PUBLIC_DOMAIN}} |
DB_HOST | PostgreSQL hostname | ${{Postgres.PGHOST}} |
DB_PASSWORD | PostgreSQL password | ${{Postgres.PGPASSWORD}} |
CACHE_DRIVER | Cache backend | apc |
QUEUE_DRIVER | Queue backend | database |
MAIL_DRIVER | Email transport for notifications | smtp |
PORT | HTTP listening port | 8000 |
Deployment Dependencies
- Runtime: PHP 7.x, Nginx, supervisord (bundled in Docker image)
- Docker Hub: cachethq/docker
- GitHub: CachetHQ/Cachet
- Docs: docs.cachethq.io
Hardware Requirements for Self-Hosting Cachet
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 256 MB | 512 MB |
| Storage | 500 MB | 2 GB |
| Runtime | PHP 7.1+ | PHP 7.4+ |
Cachet is lightweight — the Docker image bundles Nginx, PHP-FPM, and a queue worker in a single container. A status page serving a few thousand daily visitors runs comfortably on minimal resources. Storage grows only if you enable metric data collection over long retention periods.
Self-Hosting Cachet with Docker
Clone the official Docker repository and start Cachet with PostgreSQL:
git clone https://github.com/cachethq/Docker.git cachet-docker
cd cachet-docker
docker compose up -d
Once the containers are running, generate the application key:
docker exec -i $(docker ps -qf "ancestor=cachethq/docker") php artisan key:generate
Visit http://localhost:80 to complete the setup wizard. Set your site name, create an admin account, and start adding components.
Is Cachet Free to Self-Host?
Cachet is completely free and open source under the BSD-3-Clause license. There is no paid tier, no enterprise edition, and no feature gating. You pay only for infrastructure — on Railway, that means compute and database usage billed by actual consumption. A typical Cachet deployment costs under $5/month on Railway due to its minimal resource footprint. Commercial alternatives like Atlassian Statuspage start at $29/month and scale to $1,499/month for enterprise plans.
Cachet vs Uptime Kuma
| Feature | Cachet | Uptime Kuma |
|---|---|---|
| Primary purpose | Status page (communication) | Uptime monitoring + status page |
| Built-in monitoring | No (API-driven) | Yes (HTTP, TCP, DNS, ping) |
| Language | PHP (Laravel) | Node.js |
| Subscriber notifications | Email (built-in) | 90+ notification services |
| API | Full REST JSON API | Limited API |
| Maintenance windows | Yes | Yes |
| Custom metrics/graphs | Yes | No |
| Active maintenance | Low (last release 2021) | High (frequent releases) |
| License | BSD-3-Clause | MIT |
| GitHub stars | ~15k | ~65k |
Cachet excels as a communication-focused status page with its subscriber system, scheduled maintenance, and custom metrics. Uptime Kuma is better suited when you need built-in monitoring with automatic status detection. Uptime Kuma is more actively maintained — consider it if long-term updates are a priority.
Cachet on Railway FAQ
What is Cachet and why self-host it on Railway? Cachet is an open-source status page system that lets you communicate service health to users through a branded public page. Self-hosting on Railway gives you full data ownership, custom branding, and no per-subscriber pricing — unlike Atlassian Statuspage or Better Stack which charge based on usage tiers.
What does this Railway template deploy for Cachet? This template deploys two services: the Cachet application container (Nginx + PHP-FPM + queue worker via supervisord) and a Railway-managed PostgreSQL database. All configuration happens through environment variables — no config files or SSH access needed.
How does the Cachet setup wizard work after Railway deployment?
On first visit, Cachet redirects to /setup — a three-step wizard that verifies your environment, sets your site name and timezone, and creates your admin account. After setup completes, the wizard disappears and your status page is live.
Does Cachet need Redis on Railway? No. This template uses APC for caching and sessions, and the database driver for queues. Redis is optional — you only need it if you want to scale queue workers horizontally or need a shared cache across multiple processes.
How do I send incident notifications from Cachet on Railway?
Configure the MAIL_* environment variables with your SMTP provider credentials (SendGrid, Mailgun, Amazon SES). Users subscribe on your public status page, and Cachet automatically emails all subscribers when you create or update an incident.
Template Content
