Installation Guide

Deploy TyloPlanner to your server in minutes. Open Source & fully self-hosted.

🚀 One-command install (Ubuntu Server, Docker)

Prerequisites: make sure docker (with the compose plugin) and git are installed and working first — check with docker compose version and git --version.

Then paste this whole block into your terminal. It clones the repo, generates a random login password, and starts TyloPlanner:

bash
git clone https://github.com/xdTYLOOFANCY/tyloplanner.git && \
cd tyloplanner && cp .env.example .env && \
PW=$(tr -dc 'A-Za-z0-9' 

That's it. Sign in, set up 2FA in Settings → Security, and install it on your phone via Add to Home Screen.

🔑 Where are my username and password?

Your credentials live in the .env file in the project folder. The one-command block above generates a random password and prints it at the end of the install (the "TyloPlanner is up!" box). To see them again at any time:

bash
cd tyloplanner && grep AUTH_ .env
  • AUTH_USERNAME is your username — admin unless you changed it.
  • AUTH_PASSWORD is your password.

To change either, edit .env (nano .env) and apply with sudo docker compose up -d --build. Note: if AUTH_PASSWORD is left empty, the app runs without a login screen.

Useful commands afterwards

Here are some commands to manage your instance:

bash
cd tyloplanner
sudo docker compose logs -f          # watch logs
sudo docker compose restart          # restart
git pull && sudo docker compose up -d --build   # update to latest code
sudo docker compose down             # stop (data in ./data is kept)
cat .env                             # see/change password & settings

Change anything in .env (password, Strava keys, APP_URL)? Run sudo docker compose up -d --build again to apply.

🌍 Exposing it to the internet (recommended setup)

The container speaks plain HTTP. For access from outside your home network, pick one:

  • Easiest & safest — Tailscale (free VPN): curl -fsSL https://tailscale.com/install.sh | sh && sudo tailscale up, then open http://<tailscale-ip>:8000 from any of your devices. Nothing is exposed publicly.
  • Public with HTTPS — Caddy reverse proxy: point a domain at your server, then:
bash
sudo apt-get install -y caddy
echo 'your.domain.com {
    reverse_proxy localhost:8000
}' | sudo tee /etc/caddy/Caddyfile && sudo systemctl restart caddy

Caddy gets a TLS certificate automatically. Set APP_URL=https://your.domain.com in .env and rebuild — needed so the calendar feed URL and Strava OAuth redirect use the right address.

💻 Without Docker (macOS / Linux / Windows)

If you prefer running it bare-metal with Python 3.10+:

bash
git clone https://github.com/xdTYLOOFANCY/tyloplanner.git
cd tyloplanner
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
AUTH_PASSWORD=pick-a-password python app.py    # http://localhost:8000