docker composed

This commit is contained in:
2026-10-08 00:26:42 +03:00
parent 86bcd5b141
commit 728d342a89
14 changed files with 360 additions and 27 deletions
+95 -18
View File
@@ -1,21 +1,98 @@
# gym bro
# Gym Bro 😈
![License](https://img.shields.io/badge/license-MIT-blue.svg)
![Python](https://img.shields.io/badge/python-3.11+-blue.svg)
![FastAPI](https://img.shields.io/badge/FastAPI-0.104-green.svg)
![Vue/JS](https://img.shields.io/badge/frontend-Vanilla_JS-yellow.svg)
![Docker](https://img.shields.io/badge/docker-ready-2496ED.svg)
**Gym Bro** — это легковесный, self-hosted трекер тренировок с поддержкой офлайн-режима, синхронизации и режима тренера. Без лишнего веса, только мышцы. 💪
## Особенности
* **Offline First:** Работает без интернета. Данные сохраняются локально (`localStorage`) и синхронизируются при появлении связи.
* **Multi-user Support:** Разделение данных между пользователями (JWT Auth). Каждый видит только свои тренировки.
* **Trainer Mode:** Режим для тренеров. Ведите несколько клиентов одновременно, присваивайте им уникальные цвета для визуального разделения.
* **Dropsets & History:** Поддержка дроп-сетов и мгновенная подсказка истории упражнений прямо во время подхода.
* **Body Metrics:** Гибкая система замеров тела (вес, объёмы, % жира) с историей изменений.
* **No Build Step for Frontend:** Чистый HTML/CSS/JS. Не нужен Webpack/Vite. Просто открой файл или залей на любой static host.
* **Single Binary Deployment:** Весь стек упакован в Docker Compose. Один командой поднимается БД, API и Веб-сервер.
## 🛠 Технологии
* **Backend:** Python 3.11, FastAPI, SQLAlchemy, SQLite, PyJWT, Bcrypt.
* **Frontend:** Vanilla JavaScript (ES Modules), CSS Variables, No Frameworks.
* **Infrastructure:** Docker, Nginx (as reverse proxy & static server).
## 🚀 Быстрый старт (Docker)
### Требования
* Docker Engine
* Docker Compose Plugin
### Установка
1. Клонируйте репозиторий:
```bash
git clone https://github.com/your-username/gym-bro.git
cd gym-bro
```
2. Настройте секреты (опционально, для продакшена обязательно):
``` bash
cp .env.example .env
# Отредактируйте .env, замените JWT_SECRET на длинную случайную строку
```
3. Соберите и запустите:
```bash
docker compose up -d --build
```
4. Откройте браузер:
```text
http://localhost
```
5. Зарегистрируйтесь и начинайте качаться!
### 📂 Структура проекта
``` text
clients (ФИО, ДР, цель)
│
│ 1:N
├──► workouts ──────► workout_types (справочник)
│ │
│ │ 1:N
│ ├──► workout_exercises ──► exercises ──► workout_types
│ │ │
│ │ │ 1:N
│ │ └──► sets ──► dropset_items
│ │
│ └──► cardio
│
└──► body_metrics
│
│ 1:N
└──► body_metric_values ──► metric_types (справочник)
gym-bro/
├── backend/ # FastAPI приложение
│ ├── routers/ # API эндпоинты
│ ├── models.py # SQLAlchemy модели
│ ├── schemas.py # Pydantic схемы
│ ├── auth.py # Логика JWT/Bcrypt
│ └── Dockerfile
├── frontend/ # Статические файлы
│ ├── js/ # ES модули логики
│ ├── styles/ # CSS
│ ├── index.html # Точка входа
│ ├── nginx.conf # Конфиг прокси
│ └── Dockerfile
├── data/ # Volume для SQLite (не коммитится!)
├── docker-compose.yml
└── README.md
```
### 🔐 Безопасность
- Пароли хэшируются с помощью bcrypt.
- Сессии управляются через JWT токены (HttpOnly cookie опция планируется).
- Все данные изолированы по owner_id на уровне БД.
- Внимание: Для продакшена обязательно измените JWT_SECRET в .env файле.
### 🤝 Вклад
Pull requests приветствуются!
1. Форкните проект.
2. Создайте ветку feature/amazing-feature.
3. Коммитьте изменения.
4. Пушьте в GitHub.
5. Открывайте Pull Request.
### 📄 Лицензия
MIT License.
----
Made with ❤️ and heavy weights by ivan-igorevich