docker composed
This commit is contained in:
@@ -1,21 +1,98 @@
|
||||
# gym bro
|
||||
# Gym Bro 😈
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
**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
|
||||
|
||||
Reference in New Issue
Block a user