Deploy on Your Own Computer
Run dinary-server on your Mac or PC and expose it to the internet via a tunnel. Free, always on while the computer is running, and aligns with the long-term architecture (desktop AI agent runs on the same machine).
Pricing
| Resource | Cost |
|---|---|
| Your computer | Already owned |
| Tailscale Funnel | $0 (free Personal plan) |
| Cloudflare Tunnel | $0 (free plan) |
| Total | $0/month |
Prerequisites
- A Google service account JSON key — see Google Sheets Setup.
- A populated
.envwithDINARY_IMPORT_SOURCES_JSONif you want bootstrap import /import-config/ import flows.DINARY_SHEET_LOGGING_SPREADSHEETis separate and optional. - dinary-server running locally (see README).
Option A: Tailscale Funnel
Tailscale Funnel exposes a local port to the public internet over HTTPS. Simpler setup, but the URL is *.ts.net (no custom domain).
1. Install Tailscale
- macOS:
brew install tailscaleor download from tailscale.com/download - Windows: download from tailscale.com/download
- Linux:
curl -fsSL https://tailscale.com/install.sh | sh
Sign in and join your tailnet.
2. Enable Funnel
In the Tailscale admin console:
- Enable MagicDNS (if not already enabled).
- Enable HTTPS for your tailnet.
3. Start dinary-server
cd dinary-server
cp .env.example .env
# Edit .env if needed (`DINARY_IMPORT_SOURCES_JSON` for bootstrap import,
# optional `DINARY_SHEET_LOGGING_SPREADSHEET` for sheet logging, credentials path, etc.)
uv run uvicorn dinary.main:app --host 127.0.0.1 --port 8000
4. Expose via Funnel
In a separate terminal:
tailscale funnel 8000
Tailscale prints the public URL, e.g. https://your-machine.your-tailnet.ts.net. This URL is accessible from anywhere (phone, other devices) over HTTPS.
Note
Funnel is in beta. DNS propagation may take a few minutes on first setup.
5. Keep running
To keep dinary-server running when you close the terminal:
# Create a plist or use a process manager like pm2/supervisord
nohup uv run uvicorn dinary.main:app --host 127.0.0.1 --port 8000 &
See the Oracle deployment guide step 7 for a systemd service example.
Use Task Scheduler or run as a Windows Service via NSSM.
Option B: Cloudflare Tunnel
Cloudflare Tunnel offers custom domains and Cloudflare Access for authentication. See the dedicated Cloudflare Tunnel & Access Setup guide.
When the computer is off
The PWA stores entries in IndexedDB when the server is unreachable. When you turn the computer back on and the tunnel reconnects, the PWA syncs all pending entries automatically on next open.
Comparison
| Tailscale Funnel | Cloudflare Tunnel | |
|---|---|---|
| Setup | Simpler | More steps |
| URL | *.ts.net (fixed by Tailscale) |
Your own domain |
| Auth | None built-in | Cloudflare Access (email OTP) |
| Custom domain | Not supported | Supported |
| Status | Beta | Stable |