Проект позволяет отображать папки с фотографиями в более читабельном виде чем просто папки Вашего проводника. Помимо этого имеется возможность навигации по папкам и динамического создания миниатюр для фотографий в папках. Также поддержана увеличение фотографии с возможностью ее скачать. Интерфейс выполнен в очень простом для понимания вида, что облегчает работу с проектом
Миниатюры изображений создаются в соответствующих каталогах .tumbs, имена файлов миниатюр полностью соответствуют именам самих полноразмерных фотографий. Для создания миниатюр необходимо внизу страницы нажать на соответствующую кнопку. Следует заметить, что кнопка появляется лишь в том случае, когда системе не удалось найти хотя бы одной фотографии в папке
Предусмотрена возможность описывать каждую папку и задавать заголовки для фотографий. Это делается путём размещения специально-отформатированного файла index.json или index.yml в соответствующей папке фотографий. Более подробно о формате этих файлов см. ниже
Проект можно запустить в различных режимах - в режиме CGI, Prefork, Daemon, FastCGI и PSGI. На сегодняшний день написаны примеры для CGI и Prefork режимов. В ближайшее время будут выложены примеры для оставшихся режимов. Для Prefork и Daemon режимов желательно использовать TLS, или же использовать HTTP но за Proxy сервером с поддержкой TLS. В примерах указывать настройки для TLS мы не будем, так как это отдельная задача, но вы всегда сможете справиться с этой задачей поизучав соответствующие материалы в сети. Все примеры описаные здесь будут основываться на факте, что внешнее проксирование обеспечивает Proxy сервер с уже настроенным TLS окружением и заботится о TLS нет необходимости
Apache 2 configuration
<VirtualHost *:80>
ServerName myphotos.localhost
DocumentRoot /var/www/myphotos
ScriptAlias /photofolder /var/www/myphotos/photofolder.cgi
<Directory /var/www/myphotos>
Options +Indexes +FollowSymLinks +ExecCGI
DirectoryIndex /photofolder
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
photofolder.cgi
#!/usr/bin/perl -w
use PhotoFolder;
use Mojo::Server::CGI;
my $app = PhotoFolder->new(
documentroot => $ENV{DOCUMENT_ROOT},
uriprefix => "/",
);
my $cgi = Mojo::Server::CGI->new( app => $app );
$cgi->run;
Apache 2 configuration
Alias /myphotos /var/www/myphotos
ScriptAlias /photofolder /var/www/myphotos/photofolder.cgi
<Directory /var/www/myphotos>
SetEnv PHOTOFOLDER_ROOT /var/www/myphotos
SetEnv PHOTOFOLDER_BASE /myphotos
Options +Indexes +FollowSymLinks +ExecCGI
DirectoryIndex /photofolder
AllowOverride All
Require all granted
</Directory>
photofolder.cgi
#!/usr/bin/perl -w
use PhotoFolder;
use Mojo::Server::CGI;
my $app = PhotoFolder->new(
documentroot => $ENV{PHOTOFOLDER_ROOT},
uriprefix => $ENV{PHOTOFOLDER_BASE},
);
my $cgi = Mojo::Server::CGI->new( app => $app );
$cgi->run;
Перед работой необходимо слинковать photofolder.cgi в папку назначения (PHOTOFOLDER_ROOT), например:
ln -s /usr/local/bin/photofolder.cgi /var/www/foo/photofolder.cgi
ln -s /usr/local/bin/photofolder.cgi /var/www/bar/photofolder.cgi
Apache 2 configuration
Alias /foo /var/www/foo
Alias /bar /var/www/bar
<Directory /var/www/foo>
SetEnv PHOTOFOLDER_ROOT /var/www/foo
SetEnv PHOTOFOLDER_BASE /foo
Options Indexes FollowSymLinks ExecCGI
DirectoryIndex photofolder.cgi
AllowOverride All
Require all granted
</Directory>
<Directory /var/www/bar>
SetEnv PHOTOFOLDER_ROOT /var/www/bar
SetEnv PHOTOFOLDER_BASE /bar
Options Indexes FollowSymLinks ExecCGI
DirectoryIndex photofolder.cgi
AllowOverride All
Require all granted
</Directory>
photofolder.cgi
#!/usr/bin/perl -w
use PhotoFolder;
use Mojo::Server::CGI;
my $app = PhotoFolder->new(
documentroot => $ENV{PHOTOFOLDER_ROOT},
uriprefix => $ENV{PHOTOFOLDER_BASE},
);
my $cgi = Mojo::Server::CGI->new( app => $app );
$cgi->run;
Это более "продвинутый" способ запустить проект, результатом его выполнения является самостоятельный демон, который слушает TCP порт и отвечает на запросы как полноценный WEB сервер. Все вопросы связанные с настройкой демона можно разрешить на сайте проекта Mojo::Server::Prefork. Приведенный примиер демонстрирует простоту работы с Prefork режимом, но полноценный скрипт располагается в системных каталогах под именем photofolder.pl
#!/usr/bin/perl -w
use PhotoFolder;
use Mojo::Server::Prefork;
use constant {
PID_FILE => "/tmp/photofolder.pid",
MAX_CLIENTS => 100, # See Mojo::Server::Prefork
MAX_REQUESTS => 100, # See Mojo::Server::Prefork
ACCEPTS => 0, # See Mojo::Server::Prefork
SPARE => 2, # See Mojo::Server::Prefork
WORKERS => 4, # See Mojo::Server::Prefork
LISTEN => ['http://*:8082'], # See Mojo::Server::Prefork
DOCUMENTROOT => "/var/www/myphotos", # Photo location
};
my $app = PhotoFolder->new(
documentroot => DOCUMENTROOT,
);
$ENV{MOJO_MODE} ||= 'production';
my $prefork = Mojo::Server::Prefork->new( app => $app );
$prefork->pid_file(PID_FILE);
$prefork->max_clients(MAX_CLIENTS);
$prefork->max_requests(MAX_REQUESTS);
$prefork->accepts(ACCEPTS);
$prefork->spare(SPARE);
$prefork->workers(WORKERS);
$prefork->listen(LISTEN);
my $pid = $prefork->check_pid();
die "Already running $pid" if $pid;
# Daemonize
$prefork->daemonize();
print "Running\n";
$prefork->run;
Следует отметить, что данный скрипт - самостоятельная программа. Можно написать systemd service скрипт (пример появится в ближайшее время) который сможет обеспечить LSB обёрткой скрипт и запускать его с помощью стандартных системных команд вида system photofolder start
Создать фотоальбом очень просто! Создайте папку с фотографиями и скопируйте ваши фотографии с вложенными папками в целевую папку, далее обновите страницу проекта в браузере. После этого нажмите на кнопку создания миниатюр, если система предложит это сделать. Всё, фотоальбом создан! Для описания папок и фотографи фотоальбома используйте индексные файлы
Для более полного описания папок следует использовать один из индексных файлов - index.json или index.yml. Для этого создайте выбранный файл в каталоге с фотографиями и отредактируйте его в кодировке utf-8. Следует также заметить, что если создан файл index.json, то файл index.yml бедет проигнорирован, так что создавать сразу два файла не имеет никакого смысла, определитесь с форматом и пользуйтесь только им. Мы рекомендуем формат YAML, он содержит меньше символов разметки
{
"title": "Заголовок папки, титул",
"description": "Полное описание папки, кавычки нужны для наглядности. Текст может быть длинным",
"date": "Thu 09 Dec 2021 18:15:02 MSK",
"location": "Страна, Город, место, локация, всё что угодно описывающее место, хоть координаты",
"manifest": {
"file1.jpg": "Заголовок первого файла",
"file1.jpg": "Заголовок второго файла",
"subdir1": "Заголовок поддиректории"
}
}
---
title: Заголовок папки, титул
description: "Полное описание папки, кавычки нужны для наглядности. Текст может быть длинным"
date: Thu 09 Dec 2021 18:15:02 MSK - это для примера, формат даты любой, хоть просто ткущий год
location: Страна, Город, место, локация, всё что угодно описывающее место, хоть координаты
manifest:
file1.jpg: Заголовок первого файла
file2.jpg: Заголовок второго файла
subdir1: Заголовок поддиректории