From de538bbdfb7bd1c3452e82001f2e3ca13e34abcd Mon Sep 17 00:00:00 2001 From: Dejan R Date: Thu, 4 Dec 2025 18:57:36 +0100 Subject: [PATCH] added text to readme.md --- readme.md | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) diff --git a/readme.md b/readme.md index 43683e7..63fc072 100644 --- a/readme.md +++ b/readme.md @@ -12,3 +12,202 @@ 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.