Self-hosting
An overview of running TrayPage yourself, and how to choose between Cloudflare, Docker / VPS, and AWS.
Besides using tray.page (the hosted service), you can run TrayPage on your own Cloudflare account or your own server. This page helps you choose a setup; the steps live on one page per setup.
Choosing a setup
| Setup | Good for | Operational effort | Rough cost |
|---|---|---|---|
| tray.page (hosted) | Getting started immediately, with operations handled for you | None | Depends on the plan |
| Cloudflare | Running on your own account without managing servers | Low | From about $5-10 per month |
| Docker / VPS | Keeping costs low, or running in a closed network | Medium (you handle updates and backups) | From a few dollars per month |
| AWS (minimal: one EC2 instance) | Trying it in your own AWS account, or small use | Medium | About $25 per month (Tokyo, defaults; varies by region and instance type) |
| AWS (standard: Fargate + RDS) | Production in your own AWS account | Medium to high | About $200 per month for the default setup (about $125 for a small one) |
Costs are rough estimates. Actual amounts depend on your provider's pricing and your usage.
If you are unsure:
- You want someone else to operate it: tray.page
- You want it on your own account but do not want to manage servers: Cloudflare
- You want a single machine with no dependency on external services, such as inside an internal network: Docker / VPS
- Your data must live in your AWS account: AWS (minimal to try it, standard for production)
What is the same in every setup
- The application (web UI, REST API, MCP, shared pages) is the same build. Features do not change between setups.
- Data is stored in two places: a Postgres database, and a store for page content (R2 or S3-compatible storage).
- Page content can contain arbitrary HTML, so it must be served from a viewer host that is separate from the app host. Prepare two domain names. See Security notes for the reason.
- Sign-in uses an emailed link, so you need a way to send email (SMTP or Cloudflare Email Service).
- The self-hosted edition (
TRAYPAGE_EDITION=self_hosted) has no usage limits or trials, and operator-only features are disabled.