Fitnes-tracker/readme.md
2025-12-04 18:57:36 +01:00

214 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

cd ~/Dokumenti/scripts/Fitnes-tracker
# Stop the container
docker compose down
# Create the folder if it doesn't exist (safe to run even if it exists)
mkdir -p fitness-data
# Make sure container user (uid 1000) can write there
sudo chown -R 1000:1000 fitness-data
sudo chmod 775 fitness-data
# Start again
docker compose up
Fitness Tracker Self-Hosted 5×5 Powerlifting App
A minimal self-hosted fitness tracker built in Go.
Includes:
Workout logging with start/finish
A/B templates (StrongLifts style)
Automatic rest-time tracking
Volume tracking (today/week/month)
SQLite database
Fully Dockerized (with UID/GID support)
External fitness.db mounted to host
This app is designed to be simple, private, and fast, perfect for home servers or local use.
📁 Project Structure
Fitnes-tracker/
│── main.go
│── go.mod
│── Dockerfile
│── docker-compose.yml
│── readme.md
│── fitness-data/ # External volume (database lives here)
│ └── fitness.db
🔥 1. Running Locally (Development Mode)
Install Go
Ubuntu / Debian:
sudo apt update
sudo apt install -y golang-go
Verify:
go version
Run the app
Inside the project folder:
cd Fitnes-tracker
DATABASE_URL=./fitness.db go run main.go
Open in browser:
👉 http://localhost:8080
Local DB file will be created as:
./fitness.db
🐳 2. Running with Docker (Recommended)
Make sure Docker + docker-compose are installed:
sudo apt install -y docker.io docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker
Create external DB directory
mkdir -p fitness-data
Fix permissions so container user (UID 1000) can write
sudo chown -R 1000:1000 fitness-data
sudo chmod 775 fitness-data
Build the Docker image
docker compose build
Start the app
docker compose up -d
Check logs:
docker compose logs -f
You should see:
Using database file: /data/fitness.db
Listening on :8080 ...
Open:
👉 http://localhost:8080
🔧 3. Docker Compose Explained
Your docker-compose.yml:
services:
fitness:
build: .
container_name: fitness-tracker
restart: unless-stopped
environment:
- DATABASE_URL=/data/fitness.db
volumes:
- ./fitness-data:/data
ports:
- "8080:8080"
What it does:
Mounts ./fitness-data → /data inside container
SQLite DB stored on host: fitness-data/fitness.db
App always restarts unless manually stopped
Binds port 8080 (browser UI)
👤 4. Running container as UID 1000:1000
The app inside the container runs as a regular Linux user (not root).
This avoids permission issues and is safer.
To check container UID/GID:
docker exec -it fitness-tracker id
Expected output:
uid=1000(appuser) gid=1000(appuser)
If permissions are wrong, fix host directory:
sudo chown -R 1000:1000 fitness-data
sudo chmod 775 fitness-data
📦 5. Rebuilding & Updating
Whenever you modify Go code:
docker compose build
docker compose up -d
If you want to clean old images:
docker system prune -f
📤 6. Production Setup (Traefik Support)
To put behind Traefik:
Add labels inside docker-compose.yml:
labels:
- "traefik.enable=true"
- "traefik.http.routers.fitness.rule=Host(`fitness.rozic-dev.com`)"
- "traefik.http.routers.fitness.entrypoints=websecure"
- "traefik.http.routers.fitness.tls.certresolver=letsencrypt"
- "traefik.http.services.fitness.loadbalancer.server.port=8080"
networks:
- traefik_default
💾 7. Backup
Just back up the fitness-data/ folder:
cp -r fitness-data fitness-data-backup
Or tar it:
tar -czvf fitness-backup.tar.gz fitness-data/
📚 8. Git Instructions
Set your identity once:
git config --global user.name "Dejan R."
git config --global user.email "dejan@example.com"
Useful Commands
git add .
git commit -m "update"
git push
.gitignore (already included)
*.db
fitness-data/
DB files will never pollute your git history.