2026-05-06 23:16:07 +05:00
# Astro + PocketBase Monorepo — Minivan Berlin
2026-03-29 17:24:16 +05:00
2026-05-06 23:16:07 +05:00
Монорепозиторий для веб-сайта **Minivan Berlin** — сервиса аренды автомобилей в Берлине. Проект сочетает современный SSR-фронтенд на Astro с backend-ом на PocketBase в качестве headless CMS и системы аутентификации.
2026-03-29 17:24:16 +05:00
2026-05-06 23:16:07 +05:00
## 🚀 Технологический стек
2026-03-29 17:24:16 +05:00
2026-05-06 23:16:07 +05:00
### Frontend
- **Astro 6** — SSR-фреймворк с поддержкой островной архитектуры
- **SolidJS** — реактивные компоненты для интерактивных элементов
- **Tailwind CSS 4** — утилитарные стили
- **TypeScript** — типизация всего проекта
- **PocketBase JS SDK** — клиент для взаимодействия с backend
- **astro-icon** — иконки в проекте
- **@astrojs/sitemap ** — генерация sitemap для SEO
- **@astrojs/mdx ** — поддержка MDX для контента
2026-03-29 17:24:16 +05:00
2026-05-06 23:16:07 +05:00
### 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** (совместимая версия)
### Установка зависимостей
2026-03-29 17:24:16 +05:00
```bash
bun install
```
2026-05-06 23:16:07 +05:00
## 🛠️ Разработка
2026-03-29 17:24:16 +05:00
2026-05-06 23:16:07 +05:00
### Запуск всех сервисов одновременно
2026-03-29 17:24:16 +05:00
```bash
2026-05-06 23:16:07 +05:00
# Фронтенд + бэкенд
2026-03-29 17:24:16 +05:00
bun run dev
2026-05-06 23:16:07 +05:00
# Фронтенд + бэкенд + почтовый сервер (для тестирования email)
bun run dev:all
```
2026-03-29 17:24:16 +05:00
2026-05-06 23:16:07 +05:00
### Запуск отдельных сервисов
2026-03-29 17:24:16 +05:00
```bash
2026-05-06 23:16:07 +05:00
# Только фронтенд (Astro на порту 4321)
2026-03-29 17:24:16 +05:00
bun run frontend:dev
2026-05-06 23:16:07 +05:00
# Только бэкенд (PocketBase на порту 8090)
bun run backend:dev
# Только почтовый сервер (Maildev)
bun run maildev
2026-03-29 17:24:16 +05:00
```
2026-05-06 23:16:07 +05:00
### Доступные адреса
| Сервис | URL | Описание |
|--------|-----|----------|
| Frontend | http://localhost:4321 | Astro приложение (SSR) |
| Backend | http://localhost:8090 | PocketBase API и админ-панель |
| Maildev | http://localhost:1080 | В е б -интерфейс почтового сервера |
| Maildev SMTP | localhost:1025 | SMTP сервер для отправки писем |
## 📦 Сборка и продакшен
### Сборка проекта
2026-03-29 17:24:16 +05:00
```bash
2026-05-06 23:16:07 +05:00
# Сборка фронтенда
bun run build
# Или напрямую
cd frontend & & bun run build
```
### Запуск продакшен-версии
```bash
bun run start
2026-03-29 17:24:16 +05:00
```
2026-05-06 23:16:07 +05:00
## 🔐 Аутентификация
Проект использует встроенную систему аутентификации PocketBase:
2026-03-29 17:24:16 +05:00
2026-05-06 23:16:07 +05:00
- **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
### Локальное тестирование почты
2026-03-29 17:24:16 +05:00
```bash
2026-05-06 23:16:07 +05:00
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