Skip to content
 
 

Repository files navigation

НАСТОЯЩИЙ МАТЕРИАЛ (ИСХОДНЫЙ КОД) СОЗДАН И (ИЛИ) ОТРЕДАКТИРОВАН ПРИ УЧАСТИИ ИИ-АГЕНТА И (ИЛИ) КАСАЕТСЯ ДЕЯТЕЛЬНОСТИ ТАКОГО ИИ-АГЕНТА

NativeGallery

NativeGallery - это реверсивный open-source движок популярного сайта transphoto.org (СТТС), RailGallery, Fotobus и ему подобных.

Форк Lanmikeman/nativegallery — ответвление от claradex/nativegallery для production на Ubuntu 24.04 + Nginx + PHP 8.3 + MariaDB. Публичные разделы как на transphoto.org, поиск, страница обновлений, фотоконкурсы с cron, редактирование фото, заявки на изменение БД, вход через OpenVK (openvk.org + vepurovk.xyz как второй инстанс на production-сервере).

Документация: docs/ · История изменений: CHANGELOG.md · Актуальная версия: 1.8 · заметки · 1.7 · 1.6 · 1.4

Почему я должен использовать ваш движок?

  • Свобода: СТТС не предоставляет всем свой исходный код для создания отдельных подобных ему сайтов. С NativeGallery вы сможете обойти это предпятствие!
  • Гибкость: Настраивайте сайт по вашим предпочтениям: управляйте приватностью разделов, настраивайте дизайн сайта, назначайте администраторов, фотомодераторов и многое другое!
  • Скорость: Движок оптимизирован под последнюю версию PHP 8.3 и MariaDB 10!

Системные требования

Мы настоятельно рекомендуем устанавливать движок на VPS/VDS/выделенный сервер. Поддержка на Shared-хостингах не осуществляется!

Операционная система: Ubuntu 20.04+ (рекомендуется Ubuntu 24.04), Debian 12+, Windows Server 2019+ / Windows 10+ (IIS)
Веб-сервер: Nginx + PHP-FPM (production), Apache (.htaccess), IIS (web.config), Caddy, OpenLiteSpeed
PHP: 8.3 и выше (расширения: gd, curl, mbstring, xml, zip, exif, pdo_mysql)
База данных: MySQL 8.0 и выше
Дополнительно: Composer, ffmpeg (для загрузки видео)

Статус функционала

Актуально для форка v1.8 (ветка main). Подробный список изменений — CHANGELOG.md.

Что изменилось в 1.8 (кратко)

  • Убрана музыка — раздел /music, плеер в шапке, API /api/audio/*, админка радио; миграции sql_0010/sql_0011 удалены из репозитория. Очистка БД: sqlcore/drop_legacy_tables.sql.
  • Отключена SPArouting.js не подключается; навигация с полной перезагрузкой, как в upstream claradex.
  • Комментарии к фото — восстановлена схема origin (inline submit в Photo.php, comments.js внизу страницы).
  • Подробнее: docs/releases/1.8.md.

Реализовано в этом форке (с момента ответвления)

  • Страница обновлений/update?time=24, /update?time=72, архив по датам, /update?date=…, фильтры по городу/автору/типу ТС, пагинация
  • Поиск (только для авторизованных) — фото, ТС, комментарии, авторы; алиасы .php
  • Публичные разделы — новости сайта (/news2), хронология (/news), галереи (/misc, /article/{id}), ссылки (/links); админка для хронологии и ссылок
  • Заявки на изменение БД/vehicle/dbedit (исправлен INSERT, лимит 24 ч, опциональный ID фото; миграция sql_0007)
  • Редактирование фото/lk/editimage, API /api/photo/edit, необязательная привязка к сущности
  • Фотоконкурсы — cron (deploy/setup-cron.sh), этапы голосования, часовой пояс, принудительное завершение/отмена в админке, динамические годы
  • Вход через OpenVKopenvk.org, vepurovk.xyz, CRUD инстансов в админке (storage/auth-settings.json), привязка /lk/profile?type=OpenVK
  • Редактирование новостей — админка /admin?type=News, пометка «отредактировано» (sql_0008)
  • Роль владельца сервера (admin = 4) — раздел «Сервер», Debug (Tracy), overlay storage/server-settings.json
  • Админ-панель — Galleries, EntityEdit, UserEdit, AuthSettings, исправлена маршрутизация по ?type=
  • Фотоконкурс (полный цикл)/voting/rating, /voting/sendpretend, /pk.php (отчёт), навигация ContestNav
  • Личный кабинет/lk/ticket.php (заявки БД), /lk/konkurs.php (конкурс)
  • Страница помощи/help/
  • Перелистывание фотоGET /api/photo/move, стрелки на странице фото
  • Комментарии к фото — схема origin: submit + AJAX на /api/photo/comment (см. 1.8)
  • Кэш статикиng_asset() (git-hash в URL CSS/JS)
  • Развёртывание — Ubuntu 24.04 + Nginx + PHP 8.3, deploy/install-ubuntu-24.04.sh, deploy/nginx/nativegallery.conf
  • Документацияdocs/configuration.md, docs/deployment.md, docs/routes.md, docs/releases/1.8.md

Удалено в 1.8 (ранее было в 1.7)

  • Музыка/music, мини-плеер, /api/audio/*, админка MusicSettings / RadioStationsполностью удалено
  • SPA без перезагрузкиrouting.js отключён по умолчанию

Общий статус движка

  • Авторизация, регистрация
  • Просмотр профилей
  • Публикация фото (базовый функционал есть, часть полей — нет):
    • Загрузка фото и видео
    • Привязка сущности (необязательная — ТС, поезд и прочее)
    • GeoDB, геометка, галереи, вид сущности
    • Направление съёмки
    • Состояние «требует исправления», пользовательские статусы
    • Временная, условная и техническая публикация
  • GeoDB
  • Фотоконкурс (в форке доведён до рабочего состояния на production):
    • Страница /voting, подача претендентов (/voting/sendpretend), голосование
    • Претенденты /voting/waiting, победители /voting/results, рейтинг /voting/rating
    • Отчёт по конкурсу /pk.php?pid={id}&type=d
    • Автопереход этапов (cron + fallback на открытии страницы)
    • Админ: создание, принудительное завершение и отмена
    • Полный паритет со всеми сценариями transphoto.org
  • Поиск (требуется авторизация):
    • Фотографии (/search) — автор, город, место, ТС, маршрут, галерея, даты, EXIF
    • ТС (/vsearch), комментарии (/csearch), авторы (/authors)
  • Сущности:
    • Страница сущности, статус (эксплуатируется, списан и т.д.)
    • Редактирование БД: заявки, модерация, превью и автопривязка фото
    • Привязка к номеру
  • Фотографии:
    • Просмотр, рейтинг, EXIF, модерация, избранное
    • Комментирование и рейтинг комментариев
    • Редактирование (/lk/editimage)
  • Обновления:
    • Новые фото (/update?time=24, фильтры, пагинация)
    • Архив по датам (/update)
    • Фото избранных авторов (/fav_authors)
    • Фильтр по городам (GeoDB) на странице обновлений
  • Комментарии:
    • Публикация, рейтинг, удаление, редактирование
    • Модерация, BB-коды, расширенное форматирование
  • Публичные разделы:
    • Новости сайта (/news2), хронология (/news)
    • Разные фотогалереи (/misc), ссылки (/links)
    • Помощь (/help/)

Необязательные, но будет неплохо их сделать тоже

  • Авторизация
    • Через Telegram
    • Через OpenVK (openvk.org + vepurovk.xyz — второй инстанс на сервере)
    • Через ВКонтакте
    • Через Google
    • Через Яндекс
    • Через Twitter
    • Через Facebook
    • Через Discord
    • Через Steam (?!)
    • Сторонняя авторизация через API
  • Автоматическое обновление движка через Админ-панель
  • СТТС.Клуб (Native Clubs)
  • СТТС.Форум (NativeGallery Forum)
  • Экспорт всех фотографий и данных с аккаунта

Установка

Production форка: Ubuntu 24.04 + Nginx. Пути в скриптах по умолчанию: /var/www/nativegallery; свой каталог — через NG_WEB_ROOT (пример: /mnt/win/nativegallerypaths.md). Альтернативы: deployment-alternatives.md · windows-iis.md · manual-install.md · docker.md.

Быстрая установка (Ubuntu 24.04 + Nginx + PHP + MySQL) — рекомендуется

git clone https://github.com/Lanmikeman/nativegallery.git /tmp/nativegallery
cd /tmp/nativegallery
sudo NG_DOMAIN=example.com NG_DB_PASS=your_password bash deploy/install-ubuntu-24.04.sh

Скрипт автоматически:

  • устанавливает nginx, PHP 8.3, MySQL 8, Composer, ffmpeg;
  • создаёт базу данных и пользователя;
  • клонирует проект в /var/www/nativegallery;
  • импортирует все SQL-миграции из sqlcore/ (включая sql_0006sql_0009);
  • генерирует ngallery.yaml с локальным хранилищем (storage: server);
  • настраивает Nginx и cron для фотоконкурсов (deploy/setup-cron.sh).

Переменные окружения скрипта:

Переменная По умолчанию Описание
NG_DOMAIN example.com Домен сайта
NG_DB_NAME ngallery Имя базы данных
NG_DB_USER ngallery Пользователь MySQL
NG_DB_PASS случайный Пароль MySQL
NG_WEB_ROOT /var/www/nativegallery Путь к проекту (любой свой; пример: /mnt/win/nativegallery)

Быстрая установка (Debian 12/13 + Nginx)

На Debian PHP 8.3 ставится из репозитория packages.sury.org; БД — MariaDB.

git clone https://github.com/Lanmikeman/nativegallery.git /tmp/nativegallery
cd /tmp/nativegallery
sudo NG_DOMAIN=example.com NG_DB_PASS=your_password bash deploy/install-debian-12.sh
Веб-сервер Скрипт
Nginx deploy/install-debian-12.sh
Apache deploy/install-debian-12-apache.sh

Подробнее: docs/deployment-alternatives.md.

Docker

git clone https://github.com/Lanmikeman/nativegallery.git
cd nativegallery
docker compose up -d --build
# http://localhost:8080

Подробно: docs/docker.md. Образ: Dockerfile, БД в docker-compose.yml.

Pterodactyl

Импортируйте egg: deploy/pterodactyl/egg-nativegallery.json.
На ноде соберите образ: docker build -t ghcr.io/lanmikeman/nativegallery:latest .
Инструкция: docs/pterodactyl.md.

Ручная установка

Полный список пакетов для Ubuntu, Debian, Apache, Rocky/CentOS: docs/manual-install.md.

Кратко:

  1. Убедитесь, что установлены PHP 8.3, MySQL 8.0+, Composer и ffmpeg.
  2. Склонируйте репозиторий и установите зависимости:
    git clone https://github.com/Lanmikeman/nativegallery.git /var/www/nativegallery
    cd /var/www/nativegallery
    composer install --no-dev
  3. Импортируйте SQL-миграции в указанном порядке:
    mysql ngallery < sqlcore/base.sql
    mysql ngallery < sqlcore/sql_0001.sql
    mysql ngallery < sqlcore/sql_0002.sql
    mysql ngallery < sqlcore/sql_0003.sql
    mysql ngallery < sqlcore/sql_0004.sql
    mysql ngallery < sqlcore/sql_0005.sql
    mysql ngallery < sqlcore/sql_0006.sql
    mysql ngallery < sqlcore/sql_0007.sql
    mysql ngallery < sqlcore/sql_0008.sql
    mysql ngallery < sqlcore/sql_0009.sql
  4. Создайте конфигурацию:
    cp ngallery-example.yaml ngallery.yaml
    # заполните db.host, db.name, db.login, db.password
    # рекомендуется: timezone: 'Europe/Moscow'
    # описание параметров: docs/configuration.md
  5. Создайте директории и выдайте права:
    mkdir -p uploads cdn/temp cdn/previews cdn/image cdn/video logs storage/locks
    chown -R www-data:www-data uploads cdn logs storage
    chmod -R 775 uploads cdn logs storage
    # storage/ нужен для overlay: auth-settings.json, server-settings.json
  6. Настройте веб-сервер (см. раздел ниже).
  7. Зарегистрируйте первого пользователя на /register и выдайте ему права администратора (см. раздел «Администрирование»).

Если всё сделано правильно, вы увидите пустую главную страницу галереи.

Nginx

Готовый конфиг: deploy/nginx/nativegallery.conf

sudo cp deploy/nginx/nativegallery.conf /etc/nginx/sites-available/nativegallery
# замените example.com и /var/www/nativegallery в конфиге
sudo ln -sf /etc/nginx/sites-available/nativegallery /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx

Конфиг включает:

  • front controller (try_filesindex.php);
  • PHP 8.3-FPM через unix-socket;
  • защиту конфигурационных файлов (.yaml, .git, /app/, /vendor/ и др.);
  • client_max_body_size 128M для загрузки фото и видео.

Apache (альтернатива)

Движок поддерживает Apache 2.4 с mod_rewrite. Корневой .htaccess настроен для front controller.

Автоустановка:

# Ubuntu 24.04
sudo NG_DOMAIN=example.com bash deploy/install-ubuntu-apache.sh

# Debian 12/13
sudo NG_DOMAIN=example.com bash deploy/install-debian-12-apache.sh

Ручная настройка:

sudo cp deploy/apache/nativegallery.conf /etc/apache2/sites-available/nativegallery.conf
# замените example.com и путь к проекту
sudo a2ensite nativegallery.conf
sudo a2enmod rewrite proxy proxy_fcgi setenvif
sudo apachectl configtest && sudo systemctl reload apache2 php8.3-fpm

На Rocky/AlmaLinux/CentOS Stream 9: deploy/install-rocky-9-apache.sh и deploy/apache/nativegallery-rocky.conf.

Подробнее: docs/deployment-alternatives.md.

Windows — IIS (альтернатива)

Параметр По умолчанию
Корень сайта C:\inetpub\nativegallery
URL rewrite web.config в корне репозитория
Cron deploy\windows\setup-task-scheduler.ps1
git clone https://github.com/Lanmikeman/nativegallery.git C:\inetpub\nativegallery
cd C:\inetpub\nativegallery
composer install --no-dev
.\deploy\windows\setup-iis.ps1 -WebRoot "C:\inetpub\nativegallery"

Подробно: docs/windows-iis.md. Также: Apache на Windows, Caddy, OpenLiteSpeeddocs/deployment-alternatives.md.

Rocky / AlmaLinux / CentOS Stream 9 (альтернатива)

Для серверов на RHEL-семействе (PHP 8.3 из Remi, MariaDB):

Веб-сервер Скрипт
Nginx sudo bash deploy/install-rocky-9.sh
Apache (httpd) sudo bash deploy/install-rocky-9-apache.sh

Конфиги: deploy/nginx/nativegallery-rocky.conf, deploy/apache/nativegallery-rocky.conf. Пользователь PHP/cron: apache. Учтите SELinux — см. документацию.

Администрирование

Выдача прав администратора

После регистрации первого пользователя выполните в MySQL:

UPDATE users SET admin = 1 WHERE username = 'ваш_ник';

Уровни доступа (поле admin):

Значение Роль
0 Пользователь
1 Администратор (полный доступ)
2 Фотомодератор
3 Модератор
4 Владелец сервера (всё из 1 + раздел «Сервер», Debug, overlay конфига)

Панель администратора: /admin

Владелец сервера

Для диагностики и правки конфига без SSH назначьте роль владельца:

UPDATE users SET admin = 4 WHERE username = 'ваш_ник';

В боковом меню админки появится раздел Сервер (/admin?type=ServerSettings):

  • переключатель Debug (Tracy);
  • редактирование параметров root — изменения сохраняются в storage/server-settings.json, базовый ngallery.yaml не трогается.

Миграция для этой роли не требуется.

Управление контентом

Раздел URL Описание
Пользователи /admin Список пользователей, редактирование прав (/admin?type=UserEdit&user_id=)
Авторизация /admin?type=AuthSettings Регистрация, OpenVK и отдельные инстансы (openvk.org, vepurovk.xyz)
Новости сайта /admin?type=News Объявления и техработы: создание, редактирование (с пометкой «отредактировано кем/когда»), удаление
Хронология /admin?type=Chronology События транспорта (отображаются на /news)
Ссылки /admin?type=Links Внешние ссылки (отображаются на /links)
Галереи /admin?type=Galleries Тематические галереи (отображаются на /misc и /article/{id})
Сущности /admin?type=Entities Список типов транспорта и сущностей
Редактирование сущностей /admin?type=EntityEdit Типы сущностей и модели (?mod=1)
Модели / заявки БД /admin?type=Models Модерация заявок на изменение сущностей (с превью привязанного фото)
Фотоконкурсы /admin?type=Contests Создание, принудительное завершение и отмена конкурсов
Сервер /admin?type=ServerSettings Только владелец (admin = 4) — Debug, конфиг через overlay

Публичные разделы

URL Описание
/news Новости и хронология — события в мире транспорта с фильтрами по городу, типу транспорта, дате и тексту
/news2 Новости сайта — официальные объявления администрации (с пометкой об исправлениях)
/misc Список открытых фотогалерей
/article/{id} Страница тематической галереи
/links Внешние ссылки
/help/ Помощь по сайту (правила, конкурс, ссылки)
/voting Фотоконкурс (голосование)
/voting/waiting Претенденты
/voting/results Победители
/voting/rating Рейтинг авторов-победителей
/voting/sendpretend Подать фото на конкурс (требуется вход)
/pk.php?pid={id}&type=d Отчёт по конкурсу для фото-победителя
/lk/ticket.php Мои заявки на изменение БД
/lk/konkurs.php Участие в фотоконкурсе
/comments Лента комментариев
/update?time=24 Новые фотографии за 24 часа (фильтры по городу, автору, типу ТС)
/update?time=72 Новые фотографии за 72 часа
/update Архив обновлений по датам
/update?date=YYYY-MM-DD Фотографии, опубликованные в указанный день
/vehicle/dbedit Заявка на добавление/уточнение сущности в БД
/search Поиск фотографий (требуется вход)
/vsearch Поиск транспортных средств
/csearch Поиск комментариев
/authors Поиск авторов

Старые URL (/news.php, /news2.php, /links.php, /search.php, /update.php, /pk.php, /help/, /lk/ticket.php, /lk/konkurs.php и др.) поддерживаются. Для Nginx в репозитории есть физические заглушки — см. docs/deployment.md.

Поиск

Как на transphoto.org, поиск доступен только авторизованным пользователям.

Раздел URL Критерии
Фотографии /search автор, город (GeoDB), место, вид сущности, ID ТС, маршрут, галерея, текст, камера (EXIF), дата съёмки/публикации
ТС /vsearch вид сущности, ID/номер, текст
Комментарии /csearch текст, автор, ID фото, дата
Авторы /authors никнейм или email

Быстрый поиск фото пользователя: /search?id=USER_ID

Вход через OpenVK

При openvk.enabled: true в ngallery.yaml на /login и /register появляются кнопки входа через два инстанса OpenVK:

Инстанс Provider ID Описание
openvk.org openvk_org Основной инстанс OpenVK
vepurovk.xyz vepurovk Второй инстанс OVK — подключён на production-сервере форка как пример мульти-инстансной авторизации
URL Описание
/auth/openvk/start?provider=… Перенаправление на выбранный инстанс OpenVK
/auth/callback Callback после авторизации (токен в query или hash)
/lk/profile?type=OpenVK Привязка OpenVK к существующему аккаунту

Настройка: docs/configuration.md.

Обновление существующей установки

cd /путь/к/проекту          # по умолчанию /var/www/nativegallery — см. docs/paths.md
git pull
composer install --no-dev

# примените миграции, которые ещё не выполнялись (последняя — sql_0009):
mysql -u USER -p DATABASE < sqlcore/sql_0009.sql

# обновление с 1.7: удалить таблицы музыки, если они есть:
mysql -u USER -p DATABASE < sqlcore/drop_legacy_tables.sql

# часовой пояс в ngallery.yaml (если ещё не задан):
# timezone: 'Europe/Moscow'

# cron для фотоконкурсов (если ещё не установлен):
sudo NG_WEB_ROOT=/var/www/nativegallery bash deploy/setup-cron.sh
sudo -u www-data php app/Controllers/Exec/Tasks/ExecContests.php

sudo systemctl reload nginx php8.3-fpm

В браузере после обновления: Ctrl+Shift+R.

Подробнее: docs/deployment.md, docs/releases/1.8.md.

Документация

Раздел Содержание
docs/configuration.md Параметры ngallery.yaml
docs/deployment.md Обновление, миграции, права, cron
docs/routes.md URL, OpenVK, /update, поиск
docs/paths.md Пути по умолчанию и свой NG_WEB_ROOT
docs/manual-install.md Ручная установка, все зависимости по стекам
docs/windows-iis.md Windows IIS, Apache, Caddy, OpenLiteSpeed
docs/deployment-alternatives.md Автоскрипты: Debian, Apache, Rocky/CentOS
docs/docker.md Docker и docker compose
docs/pterodactyl.md Egg для Pterodactyl
docs/releases/1.8.md Заметки к релизу 1.8 — откат музыки и SPA, комментарии
docs/releases/1.7.md Заметки к релизу 1.7 (исторический; музыка убрана в 1.8)
docs/releases/1.6.md Заметки к релизу 1.6
docs/releases/1.4.md Заметки к релизу 1.4

Changelog

История изменений: CHANGELOG.md

About

NativeGallery - это реверсивный open-source движок популярного сайта transphoto.org (СТТС) и ему подобных.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages