gallery-for-aav/README.md

179 lines
8.2 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
├─ style.css # базовые стили
├─ favicon.svg
├─ config.php.example # шаблон конфига БД и деплоя
├─ secrets.php.example # шаблон секретов админки
├─ lib/
│ ├─ db.php # PDO + загрузка config.php
│ ├─ db_gallery.php # доступ к данным галереи
│ ├─ thumbs.php # генерация/чтение/удаление превью
│ ├─ admin_http.php # JSON-ответы админки
│ ├─ admin_deploy.php # проверка обновлений и запуск деплоя
│ ├─ 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. Создай `secrets.php`:
```bash
cp secrets.php.example secrets.php
```
4. Заполни минимум `admin_token` в `secrets.php`.
5. Прогон миграций:
```bash
php scripts/migrate.php
```
6. Локальный запуск:
```bash
php -S 127.0.0.1:8080
```
7. Открой:
- `http://127.0.0.1:8080` — публичная часть,
- `http://127.0.0.1:8080/admin.php?token=<SECRET>` — админка (токен из `secrets.php`).
## Настройка админки
Админка использует секреты из `secrets.php`.
Создай файл:
```bash
cp secrets.php.example secrets.php
```
Минимально заполни:
- `admin_token` — длинный случайный секрет.
Опционально можно ограничить доступ:
- `basic_auth_user` / `basic_auth_pass` — HTTP Basic слой поверх админки,
- `allowed_admin_ips` — белый список IP (строгое совпадение строк).
В админке доступны разделы:
- Разделы,
- Тематики,
- Фото,
- Пользователи,
- Комментарии,
- Настройки (welcome + watermark параметры).
## Превью и watermark
- Публичный каталог карточек грузит превью через `?action=thumb&file_id=...`.
- Превью создаются автоматически в `thumbs/`:
- при загрузке файлов,
- при замене файлов,
- после поворота.
- Для старых данных можно догенерировать превью:
```bash
php scripts/generate_thumbs.php
```
- Версия `after` в публичке отдается с watermark (`?action=image&file_id=...`).
## Деплой
Деплой запускается из админки (вкладка `Настройки`):
- кнопка `Проверить обновления` делает `git fetch` и сравнивает `HEAD` с `origin/<branch>`,
- если локальная ветка отстает и не расходится (`behind > 0`, `ahead = 0`) — показывается кнопка `Обновить проект`.
Скрипт `scripts/deploy.sh`:
1. делает `git fetch --all --prune`,
2. переключает код на `origin/<branch>` через `git reset --hard`,
3. запускает миграции `php scripts/migrate.php`,
4. сохраняет runtime-папки (`photos`, `thumbs`, `data`).
Важно: деплой-скрипт перетирает рабочие изменения в репозитории на сервере.
## Примечания
- Проект принудительно редиректит на HTTPS и non-www через `.htaccess`.
- Для production рекомендуется включить IP whitelist и/или Basic Auth в `secrets.php`.
- Если `config.php` отсутствует, приложение корректно падает с ошибкой подключения к БД.