НАСТОЯЩИЙ МАТЕРИАЛ (ИСХОДНЫЙ КОД) СОЗДАН И (ИЛИ) ОТРЕДАКТИРОВАН ПРИ УЧАСТИИ ИИ-АГЕНТА И (ИЛИ) КАСАЕТСЯ ДЕЯТЕЛЬНОСТИ ТАКОГО ИИ-АГЕНТА
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.
- Убрана музыка — раздел
/music, плеер в шапке, API/api/audio/*, админка радио; миграцииsql_0010/sql_0011удалены из репозитория. Очистка БД:sqlcore/drop_legacy_tables.sql. - Отключена SPA —
routing.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), этапы голосования, часовой пояс, принудительное завершение/отмена в админке, динамические годы - Вход через OpenVK — openvk.org, vepurovk.xyz, CRUD инстансов в админке (
storage/auth-settings.json), привязка/lk/profile?type=OpenVK - Редактирование новостей — админка
/admin?type=News, пометка «отредактировано» (sql_0008) - Роль владельца сервера (
admin = 4) — раздел «Сервер», Debug (Tracy), overlaystorage/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
-
Музыка—/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)
- Отметки людей на фотографиях
- Прямой эфир (https://sttsclub.ru/live/)
- СТТС.Форум (NativeGallery Forum)
- Экспорт всех фотографий и данных с аккаунта
Production форка: Ubuntu 24.04 + Nginx. Пути в скриптах по умолчанию:
/var/www/nativegallery; свой каталог — черезNG_WEB_ROOT(пример:/mnt/win/nativegallery— paths.md). Альтернативы: deployment-alternatives.md · windows-iis.md · manual-install.md · docker.md.
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_0006…sql_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 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.
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.
Импортируйте 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.
Кратко:
- Убедитесь, что установлены PHP 8.3, MySQL 8.0+, Composer и ffmpeg.
- Склонируйте репозиторий и установите зависимости:
git clone https://github.com/Lanmikeman/nativegallery.git /var/www/nativegallery cd /var/www/nativegallery composer install --no-dev - Импортируйте 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
- Создайте конфигурацию:
cp ngallery-example.yaml ngallery.yaml # заполните db.host, db.name, db.login, db.password # рекомендуется: timezone: 'Europe/Moscow' # описание параметров: docs/configuration.md
- Создайте директории и выдайте права:
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 - Настройте веб-сервер (см. раздел ниже).
- Зарегистрируйте первого пользователя на
/registerи выдайте ему права администратора (см. раздел «Администрирование»).
Если всё сделано правильно, вы увидите пустую главную страницу галереи.
Готовый конфиг: 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_files→index.php); - PHP 8.3-FPM через unix-socket;
- защиту конфигурационных файлов (
.yaml,.git,/app/,/vendor/и др.); client_max_body_size 128Mдля загрузки фото и видео.
Движок поддерживает 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.
| Параметр | По умолчанию |
|---|---|
| Корень сайта | 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, OpenLiteSpeed — docs/deployment-alternatives.md.
Для серверов на 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.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.md