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:
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:
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:
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:
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+:
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