astro_minivan/README.md
2026-05-06 23:16:07 +05:00

259 lines
10 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.

# Astro + PocketBase Monorepo — Minivan Berlin
Монорепозиторий для веб-сайта **Minivan Berlin** — сервиса аренды автомобилей в Берлине. Проект сочетает современный SSR-фронтенд на Astro с backend-ом на PocketBase в качестве headless CMS и системы аутентификации.
## 🚀 Технологический стек
### Frontend
- **Astro 6** — SSR-фреймворк с поддержкой островной архитектуры
- **SolidJS** — реактивные компоненты для интерактивных элементов
- **Tailwind CSS 4** — утилитарные стили
- **TypeScript** — типизация всего проекта
- **PocketBase JS SDK** — клиент для взаимодействия с backend
- **astro-icon** — иконки в проекте
- **@astrojs/sitemap** — генерация sitemap для SEO
- **@astrojs/mdx** — поддержка MDX для контента
### Backend
- **PocketBase** — легковесный backend с SQLite, аутентификацией и админ-панелью
- **Миграции** — управление схемой данных через JS-миграции
### Инфраструктура
- **Bun** — пакетный менеджер и рантайм
- **Maildev** — локальный SMTP-сервер для тестирования email
- **Concurrently** — параллельный запуск нескольких серверов
- **Docker** — контейнеризация (Dockerfile в frontend и backend)
## 📁 Структура проекта
```
astro_minivan/
├── frontend/ # Astro-приложение
│ ├── src/
│ │ ├── components/ # SolidJS и Astro компоненты
│ │ │ ├── auth/ # Компоненты аутентификации
│ │ │ ├── booking/ # Компоненты бронирования
│ │ │ ├── home/ # Компоненты главной страницы
│ │ │ ├── blog/ # Компоненты блога
│ │ │ └── ... # Другие секции сайта
│ │ ├── pages/ # Страницы Astro
│ │ │ ├── api/ # API endpoints
│ │ │ ├── auth/ # Страницы аутентификации
│ │ │ └── *.astro # Основные страницы сайта
│ │ ├── lib/ # Утилиты и сервисы
│ │ │ ├── authService.ts # Сервис аутентификации
│ │ │ ├── emailService.ts # Отправка email через Nodemailer
│ │ │ ├── pocketbase.js # Клиент PocketBase
│ │ │ └── ...
│ │ ├── layouts/ # Layouts Astro
│ │ ├── styles/ # Глобальные стили
│ │ ├── types/ # TypeScript типы
│ │ ├── constants/ # Константы приложения
│ │ ├── emails/ # Шаблоны email-писем
│ │ └── middleware.js # Middleware для аутентификации
│ ├── astro.config.mjs # Конфигурация Astro
│ ├── tsconfig.json # TypeScript конфигурация
│ └── Dockerfile
├── backend/ # PocketBase backend
│ ├── pb_migrations/ # Миграции базы данных
│ ├── pb_data/ # Данные PocketBase (игнорируется в git)
│ ├── pocketbase.exe # Бинарник PocketBase
│ └── start.sh / start.bat # Скрипты запуска
├── bunfig.toml # Конфигурация Bun (workspaces)
├── package.json # Корневой package.json
└── .gitignore
```
## ⚙️ Установка
### Требования
- **Bun** (рекомендуемая версия указывается в `.nvmrc`)
- **Node.js** (совместимая версия)
### Установка зависимостей
```bash
bun install
```
## 🛠️ Разработка
### Запуск всех сервисов одновременно
```bash
# Фронтенд + бэкенд
bun run dev
# Фронтенд + бэкенд + почтовый сервер (для тестирования email)
bun run dev:all
```
### Запуск отдельных сервисов
```bash
# Только фронтенд (Astro на порту 4321)
bun run frontend:dev
# Только бэкенд (PocketBase на порту 8090)
bun run backend:dev
# Только почтовый сервер (Maildev)
bun run maildev
```
### Доступные адреса
| Сервис | URL | Описание |
|--------|-----|----------|
| Frontend | http://localhost:4321 | Astro приложение (SSR) |
| Backend | http://localhost:8090 | PocketBase API и админ-панель |
| Maildev | http://localhost:1080 | Веб-интерфейс почтового сервера |
| Maildev SMTP | localhost:1025 | SMTP сервер для отправки писем |
## 📦 Сборка и продакшен
### Сборка проекта
```bash
# Сборка фронтенда
bun run build
# Или напрямую
cd frontend && bun run build
```
### Запуск продакшен-версии
```bash
bun run start
```
## 🔐 Аутентификация
Проект использует встроенную систему аутентификации PocketBase:
- **OAuth2 провайдеры** — поддержка входа через Google, Apple и другие
- **Email/пароль** — классическая аутентификация
- **JWT токены** — хранятся в cookies
- **Middleware** — автоматическая проверка сессии на каждом запросе
Файлы аутентификации:
- `frontend/src/lib/authService.ts` — сервис управления сессиями
- `frontend/src/middleware.js` — middleware для проверки авторизации
- `frontend/src/components/auth/` — UI компоненты входа/регистрации
## 📧 Email-рассылка
Для отправки уведомлений используется **Nodemailer**:
- Подтверждение бронирования
- Уведомления администратору
- Верификация email
### Локальное тестирование почты
```bash
bun run maildev
```
Веб-интерфейс: http://localhost:1080
### API endpoints для отправки писем
- `POST /api/send-email` — произвольное письмо
- `POST /api/send-booking-confirmation` — подтверждение бронирования
- `POST /api/send-admin-notification` — уведомление администратора
## 🗄️ База данных и миграции
PocketBase использует SQLite. Миграции хранятся в `backend/pb_migrations/`.
### Применение миграций
```bash
bun run backend:migrate
```
### Основные коллекции
- `users` — пользователи
- `posts` — статьи блога
- `faq_items` — FAQ
- `slider_cars` — слайдер автомобилей
- `premium_fleet` — премиум автопарк
- `vip_services` — VIP услуги
- `reviews` — отзывы
- `pages` — статические страницы
- `site_settings` — настройки сайта
## 🔧 Переменные окружения
### Frontend (.env)
```env
# PocketBase
POCKETBASE_URL=http://localhost:8090
# Почта (SMTP)
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_FROM=no-reply@minv-berlin.de
ADMIN_EMAIL=admin@minivan-berlin.de
```
> ⚠️ **Важно:** В продакшене замените `localhost` на реальные адреса и используйте безопасные SMTP-настройки.
## 🌐 Сайт
Основной домен: **https://minivan-berlin.de**
### Страницы сайта
- Главная (`/`)
- О нас (`/ueber-uns`)
- Цены (`/preise`)
- Премиум флот (`/premium-flotte`)
- VIP услуги (`/vip-services`)
- Блог (`/blog`)
- Отзывы (`/bewertungen`)
- Партнёры (`/partner`)
- Карьера (`/karriere`)
- Контакты (`/kontakt`)
- Помощь (`/hilfe`)
- AGB, Datenschutz, Impressum
## 📝 Скрипты npm
| Команда | Описание |
|---------|----------|
| `bun run dev` | Запуск фронтенда и бэкенда |
| `bun run dev:all` | Запуск всех сервисов (включая maildev) |
| `bun run frontend:dev` | Только фронтенд |
| `bun run frontend:build` | Сборка фронтенда |
| `bun run frontend:start` | Preview собранного фронтенда |
| `bun run backend:dev` | Только бэкенд (PocketBase) |
| `bun run backend:migrate` | Применение миграций БД |
| `bun run maildev` | Запуск почтового сервера |
| `bun run build` | Сборка проекта |
| `bun run start` | Запуск продакшен-версии |
## 🐳 Docker
Проект включает Dockerfile для контейнеризации:
- `frontend/Dockerfile` — образ для Astro приложения
- `backend/Dockerfile` — образ для PocketBase
## 📚 Документация
- [Astro](https://docs.astro.build/en/getting-started/)
- [SolidJS](https://docs.solidjs.com/solid-start/getting-started)
- [PocketBase](https://pocketbase.io/docs/)
- [Tailwind CSS](https://tailwindcss.com/docs)
- [astro-icon](https://www.astroicon.dev/getting-started/)
## 📄 Лицензия
ISC