# 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