Personal Infrastructure

Self-Hosted Infrastructure & Automation

A Raspberry Pi 5 and an Oracle Cloud ARM VPS running my private network, Canvas data pipeline, and daily automation since 2023

STACK
TailscaleDockerPostgreSQLGrafanaPythonSyncthing
YEAR
2023
ROLE
Solo
REPO
screenshot · 01
screenshot · 02

What it's for

This started in March 2023 with a single Oracle Cloud VPS. It has since grown into a two-node setup: a Raspberry Pi 5 at home and an ARM VPS (Ampere A1) with a public IP, joined into one private network over Tailscale. Between them they run my remote access, a data pipeline for my classes, my car’s telemetry, and my backups. Everything below has been running unattended since it was set up.

The network: why I run my own DERP relay

The interesting problem here was connectivity. My home machine sits behind restrictive NAT, so Tailscale’s usual trick of punching a direct WireGuard tunnel between peers doesn’t work. When that fails, Tailscale falls back to DERP, its fleet of public relay servers. That kept the connection alive, but the nearest public node added real latency, and relayed traffic through the shared fleet is bandwidth-limited. Remote desktop over that link was painful.

So I run my own DERP server on the VPS and register it in the tailnet’s derpMap, which makes my devices prefer it over the public fleet. Same protocol, but the relay is now a machine I control, on a public IP, with no shared rate limit.

The Canvas pipeline

Every morning a scheduled job on the Pi pulls all my courses through the Canvas API: grades, assignments, submission status. A second pass mirrors every course file to local disk. The first run was a full sync; every run since is incremental, comparing what Canvas reports against what already exists locally and fetching only what changed. Slides that vanish from Canvas after the quarter ends are still on my disk.

The morning briefing

The Canvas data feeds into cc-connect, an open-source bridge that also reads my email and calendar. Each morning it compiles the three sources into one briefing and pushes it to Telegram: what’s due, what got graded, where I need to be.

Vehicle telemetry

The VPS also runs TeslaMate under Docker Compose, with PostgreSQL for storage and Grafana for dashboards. It has been logging since 2023: battery degradation over time, charging efficiency, and every trip driven. Tesla’s own app shows a rounded-off summary of this data. TeslaMate keeps the raw history, in a database I can query.

Backups

Syncthing watches specific folders on my computers and syncs changes continuously and incrementally. There is no backup day and no cloud subscription. Files are just already there when I need them.


None of the pieces here are exotic. Most are well-known open-source projects. The actual work was wiring them into a system that runs by itself, and it has, for three years.

How to use it

01

Remote access from anywhere

My laptop reaches machines at home as if they were on the same LAN. When restrictive NAT blocks a direct connection, traffic falls back to my own relay instead of Tailscale's rate-limited public fleet.

02

One briefing every morning

A single Telegram message with new grades, upcoming deadlines, and today's schedule, compiled overnight from Canvas, email, and calendar.

03

Vehicle telemetry I actually own

Grafana dashboards on the VPS track battery degradation, charging efficiency, and full trip history, stored in my own PostgreSQL instance rather than a vendor's cloud.

04

Backups that need no reminding

Watched folders on my computers sync continuously and incrementally via Syncthing. Nothing to remember, no cloud storage subscription in the loop.

Search

Quick actions