259 lines
10 KiB
Markdown
259 lines
10 KiB
Markdown
# 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
|