gallery-for-aav/README.md

164 lines
7.4 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.

# Галерея фото (PHP + MySQL)
Актуальная версия проекта — это MySQL-контур с двумя основными точками входа:
- `index.php` — публичная витрина (разделы, тематики, карточки фото, комментарии),
- `admin.php?token=...` — закрытая админка (управление разделами/тематиками/фото/пользователями/комментариями/настройками).
`index-mysql.php` и `admin-mysql.php` оставлены как алиасы для обратной совместимости.
## Что умеет проект
- Иерархия каталога: разделы + тематики (2 уровня).
- Для фото поддерживаются версии `before` и `after`.
- Версия `after` на публичной части отдается с watermark (текст, яркость и угол настраиваются в админке).
- Комментарии доступны только по персональной viewer-ссылке.
- Для карточек каталога используются превью из `thumbs/`.
- Превью создаются/обновляются автоматически при загрузке, замене и повороте изображения.
## Инструкция для пользователей
### Если у вас нет специальной ссылки
- Откройте главную страницу галереи и выберите раздел или тематику в левом меню.
- Для просмотра фотографии нажмите на карточку в каталоге.
- Переключение по фото: стрелки `←` и `→` на клавиатуре (или кнопки на экране).
- Навигация по разделам/тематикам: `Shift + ↑/↓` или `Ctrl + ↑/↓`.
- Комментарии в этом режиме недоступны: блок комментариев открыт только для пользователей с персональной ссылкой.
### Если у вас есть специальная viewer-ссылка
- Откройте галерею только по персональной ссылке вида `/?viewer=...`.
- В режиме viewer доступны все обычные функции просмотра и дополнительно форма комментария.
- Напишите комментарий и нажмите «Отправить» (или `Shift + Enter`).
- Отправка происходит без перезагрузки страницы; после успешной отправки появится сообщение «Ваш комментарий отправлен.».
- Не передавайте свою viewer-ссылку другим: она дает право оставлять комментарии от вашего имени.
## Структура
```text
photo.andr33v.ru/
├─ index.php # публичная витрина
├─ admin.php # админка по токену
├─ index-mysql.php # alias -> index.php
├─ admin-mysql.php # alias -> admin.php
├─ deploy.php # webhook деплоя
├─ style.css # базовые стили
├─ favicon.svg
├─ config.php.example # шаблон конфига БД
├─ deploy-config.php.example # шаблон токена/настроек деплоя
├─ lib/
│ ├─ db.php # PDO + загрузка config.php
│ ├─ db_gallery.php # доступ к данным галереи
│ ├─ thumbs.php # генерация/чтение/удаление превью
│ ├─ admin_http.php # JSON-ответы админки
│ ├─ admin_get_actions.php # GET-экшены админки
│ ├─ admin_post_actions.php # POST-экшены админки
│ └─ admin_helpers.php # helper-функции админки
├─ migrations/
│ ├─ 001_init.sql
│ ├─ 002_site_settings.sql
│ ├─ 003_comment_users_plain_token.sql
│ └─ 004_topics.sql
├─ scripts/
│ ├─ migrate.php # запуск миграций
│ ├─ generate_thumbs.php # backfill превью
│ └─ deploy.sh # deploy на shared hosting
├─ photos/ # оригиналы (runtime)
├─ thumbs/ # превью (runtime)
└─ data/ # runtime (логи/служебные файлы)
```
## Требования
- PHP 8.2+
- MySQL 8+ (или совместимая MariaDB)
- PHP-расширения:
- `pdo_mysql` (обязательно),
- `gd` или `imagick` (для watermark/превью).
## Быстрый старт
1. Создай `config.php`:
```bash
cp config.php.example config.php
```
2. Заполни доступы к БД в `config.php`.
3. Прогон миграций:
```bash
php scripts/migrate.php
```
4. Локальный запуск:
```bash
php -S 127.0.0.1:8080
```
5. Открой:
- `http://127.0.0.1:8080` — публичная часть,
- `http://127.0.0.1:8080/admin.php?token=<SECRET>` — админка (после настройки `deploy-config.php`).
## Настройка админки
Админка использует `token` из `deploy-config.php`.
Создай файл:
```bash
cp deploy-config.php.example deploy-config.php
```
Минимально заполни:
- `token` — длинный случайный секрет.
В админке доступны разделы:
- Разделы,
- Тематики,
- Фото,
- Пользователи,
- Комментарии,
- Настройки (welcome + watermark параметры).
## Превью и watermark
- Публичный каталог карточек грузит превью через `?action=thumb&file_id=...`.
- Превью создаются автоматически в `thumbs/`:
- при загрузке файлов,
- при замене файлов,
- после поворота.
- Для старых данных можно догенерировать превью:
```bash
php scripts/generate_thumbs.php
```
- Версия `after` в публичке отдается с watermark (`?action=image&file_id=...`).
## Деплой
Webhook:
- `deploy.php?token=<SECRET>`
Скрипт `scripts/deploy.sh`:
1. делает `git fetch --all --prune`,
2. переключает код на `origin/<branch>` через `git reset --hard`,
3. сохраняет runtime-папки (`photos`, `thumbs`, `data`).
Важно: деплой-скрипт перетирает рабочие изменения в репозитории на сервере.
## Примечания
- Проект принудительно редиректит на HTTPS и non-www через `.htaccess`.
- Для production рекомендуется ограничить webhook по IP и/или Basic Auth (`deploy-config.php`).
- Если `config.php` отсутствует, приложение корректно падает с ошибкой подключения к БД.