astro_redi/frontend/README.md

164 lines
6.6 KiB
Markdown
Raw Permalink Normal View History

2026-03-26 03:56:25 +00:00
# Astro Frontend для Redi.dev
Современный веб-сайт-портфолио, разработанный на Astro с использованием PocketBase в качестве CMS.
## 🚀 Стек технологий
- **Astro 6** - фреймворк для создания быстрых сайтов
- **TypeScript** - строгая типизация
- **Tailwind CSS** - стилизация
- **Solid.js** - реактивные компоненты
- **PocketBase** - headless CMS и бэкенд
- **Bun** - пакетный менеджер и рантайм
- **Nanostores** - управление состоянием
## 📁 Структура проекта
```
astro_redi/
├── .env # Переменные окружения (в корне проекта!)
├── frontend/ # Исходный код frontend части
│ ├── public/ # Статические файлы
│ ├── src/
│ │ ├── assets/ # Стили, изображения
│ │ ├── components/ # Astro и Solid.js компоненты
│ │ ├── layouts/ # Макеты страниц
│ │ ├── lib/ # Вспомогательные библиотеки (PocketBase клиент)
│ │ ├── pages/ # Страницы приложения
│ │ └── globalInterfaces.ts # Глобальные TypeScript интерфейсы
│ ├── astro.config.mjs # Конфигурация Astro
│ ├── package.json # Зависимости
│ └── tsconfig.json # Конфигурация TypeScript
├── astro_redidev/ # Резервная копия старой версии
├── backend/ # Бэкенд часть (если есть)
└── scripts/
└── dev-server.js # Скрипт запуска локальных серверов
```
## ⚙️ Переменные окружения
Файл `.env` должен находиться в **корне проекта** (`astro_redi/.env`):
```env
# Локальная разработка
PUBLIC_SITE_URL=http://localhost:4321
PUBLIC_POCKETBASE_URL=http://127.0.0.1:8090
# Продакшен (раскомментировать при деплое)
# PUBLIC_SITE_URL=https://redib.ru
# PUBLIC_POCKETBASE_URL=http://pocketbase-y8oskk4kgkgko0s88c8c4oo0.144.124.229.64.sslip.io:8080
```
## 🛠️ Установка и запуск
### Требования
- **Bun** (рекомендуется) или Node.js 22+
- **PocketBase** (локально или удалённо)
### Локальная разработка
1. **Установите зависимости:**
```bash
bun install
```
2. **Запустите PocketBase:**
```bash
# PocketBase должен быть запущен на порту 8090
# Используйте скрипт dev-server.js для одновременного запуска
node scripts/dev-server.js
```
3. **Откройте браузер:**
- Astro: http://localhost:4321
- PocketBase Admin: http://localhost:8090/_/
### Сборка для продакшена
```bash
bun run build
```
### Продакшен запуск
```bash
bun run start
```
## 📊 Коллекции PocketBase
Проект использует следующие коллекции:
| Коллекка | Описание | Поля |
|----------|----------|------|
| `projects` | Проекты портфолио | `name`, `description`, `short_description`, `long_description`, `stack`, `image`, `url_site`, `github`, `order`, `isActive` |
| `featured_projects` | Избранные проекты | `name`, `description`, `image`, `url`, `github`, `stack`, `featured`, `forSale`, `order`, `isActive` |
| `posts` | Блог | `title`, `description`, `publishDate`, `tags`, `coverImage`, `coverImageAlt`, `isFeatured`, `isActive` |
| `about` | Информация об авторе | `title`, `description`, `professional_experience`, `skills`, `contact_title`, `contact_description`, `whatsapp_link`, `email`, `image`, `alt_text`, `isActive` |
| `navigation` | Навигация сайта | `items` (JSON) |
## 🌐 Изображения из PocketBase
Изображения загружаются напрямую из PocketBase по URL:
```
{PUBLIC_POCKETBASE_URL}/api/files/{collection_id}/{record_id}/{filename}
```
Пример:
```
http://127.0.0.1:8090/api/files/projects/t7i08mbfzuzp6e6/tech_news_ncqktq5j8r.avif
```
## 📦 Деплой
### В Coolify
Проект настроен для деплоя в Coolify с использованием адаптера `@astrojs/node`:
1. Укажите переменные окружения в Coolify:
- `COOLIFY_FQDN` — домен приложения
- `COOLIFY_URL` — URL приложения
- `PUBLIC_SITE_URL` — публичный URL сайта
- `PUBLIC_POCKETBASE_URL` — URL PocketBase
2. Команды сборки и запуска:
- Build: `bun run build`
- Start: `bun run start`
- Install: `bun install`
### Другие платформы
Проект совместим с:
- Vercel
- Netlify
- Cloudflare Pages
- Любые VPS с Node.js/Bun
## 🔧 Скрипты
| Команда | Описание |
|---------|----------|
| `bun install` | Установка зависимостей |
| `bun run dev` | Запуск режима разработки |
| `bun run build` | Сборка проекта |
| `bun run start` | Запуск продакшен версии |
| `bun run astro check` | Проверка типов TypeScript |
## 📝 Особенности реализации
- **SSR (Server-Side Rendering)** — динамические страницы рендерятся на сервере
- **Статическая генерация** — пагинация проектов генерируется при сборке
- **Оптимизация изображений** — ленивая загрузка, правильные размеры
- **SEO** — sitemap, метатеги, семантическая разметка
- **Тёмная тема** — автоматическое переключение по системным настройкам
- **Адаптивный дизайн** — мобильная версия, планшет, десктоп
## 👨‍💻 Автор
**RediBedi** — веб-разработчик, специализирующийся на Astro и современных frontend технологиях.
- Портфолио: [redib.ru](https://redib.ru)
- GitHub: [RediBedi](https://github.com/RediBedi)