Ololord.js: различия между версиями
Мальвина (обсуждение | вклад) м |
Мальвина (обсуждение | вклад) м |
||
| Строка 1: | Строка 1: | ||
| − | '''[https://github.com/ololoepepe/ololord.js Ololord.js]''' — Кривой движок для параши запиленный [[Андрюшка|Андрюшкой]], на котором работали [[Тумбач]] и [[Оллчан#Оллчан времен андрюшки|Allchan.su]] | + | '''[https://github.com/ololoepepe/ololord.js Ololord.js]''' — Кривой движок для параши запиленный [[Андрюшка|Андрюшкой]], преемник [[Ololord (C++)|Ololord]]'а, на котором работали [[Тумбач]] и [[Оллчан#Оллчан времен андрюшки|Allchan.su]]. Под завязку нафарширован тонной ненужных функций, большая часть из которых работала на половину, а некоторые из этой половины и не работали вовсе. Заброшен после продажи [[Оллчан]]а Аллкалику. Несмотря на это у движка почти нулевой отклик, а то что работало, работало как надо и даже лучше. |
==История== | ==История== | ||
Версия 14:53, 14 июня 2025
Ololord.js — Кривой движок для параши запиленный Андрюшкой, преемник Ololord'а, на котором работали Тумбач и Allchan.su. Под завязку нафарширован тонной ненужных функций, большая часть из которых работала на половину, а некоторые из этой половины и не работали вовсе. Заброшен после продажи Оллчана Аллкалику. Несмотря на это у движка почти нулевой отклик, а то что работало, работало как надо и даже лучше.
Содержание
История
В самом начале (начало 2016 г.) движок вполне исправно работал, но уже спустя год начал разваливаться, однако Андрюшка не спешил исправлять это и, по некоторым данным, залазил в код Ололорда дай бог раз в неделю. К моменту продажи Оллчана в 2022 г., ситуация стала немного лучше, однако глобально не сильно изменилась: Андрюша раз в неделю фиксил баги заменял одни баги на другие, добавлял новые фичи нагромождал код не рабочим мусором и обновлял библиотеки. В репозитории гитхаба находится очень старая и устаревшая версия от 17 сентября 2016 года, которая уже начинала разваливаться. Более свежих версий нет, Андрюшка не публиковал исходники своих параш.
Особенности
На момент создания движок был не иначе как чудом инженерной мысли. Да, кривой, да стремненький, но в нем было столько революционных фич, которые том же Vichan появились далеко не сразу: Теневые баны, багтреккер-разделы, интернациональные доски, версия под мобилки, карта ответов, уведомления о новых ответах (один из первых движков где это появилось), работа сайта без перезагрузки страниц, адекватный API из коробки. Ололорд в свое время был как ёбаный швейцарский нож, к которому прикрутили шуруповерт и табуретку. В противовес тому, что большинство из этого работала очень не очень, можно сказать что в то время большинство движков обо всем этом только мечтали.
Плюсы
- Быстрый бэкэнд (все кэшируется, скорость зависит только от производительности вашего SSD);
- Многофункциональный пользовательский интерфейс (автоматическое скрытие постов на основе правил, встроенный проигрыватель, инструменты JS-only drawing и многое другое);
- Удобный и современный UI, легко настраиваемый с помощью настроек и пользовательского CSS/JS;
- Мобильная версия пользовательского интерфейса (автоматическое определение мобильных устройств);
- Удобное управление контентом и пользователями через веб-интерфейс;
- Идеальная масштабируемость (чем лучше процессор, тем выше нагрузки, которые он может обрабатывать);
- Встроенная базовая защита от DDoS (настраиваемая);
- Полный Web API для пользовательских клиентских приложений;
- Удобство в локализации;
- Подробная документация.
Минусы
- Большинство новых функций работает через задницу;
- Проблема с нововведениями (Сложно что-то добавить чтобы что-то не поломать);
- Из-за большого функционала жрет слишком много ресурсов;
- Сильно транжирит трафик.
Установка
Инструкция взята из андрюшкиного репозитория движка и переведена на русский:
Чтобы начать использовать движок ololord.js, скачайте копию из репозитория, распакуйте ее и следуйте инструкциям, перечисленным в следующих разделах:
1. Требования
Аппаратное обеспечение
- Рекомендуется процессор 2 ГГц. Хотя фактических ограничений нет, обработка файлов может быть раздражающе медленной, если у вас медленный процессор.
- 1-1,5 ГБ свободной оперативной памяти. Технически, 200-300 МБ должно быть достаточно, но из-за странного бага Node.js или Express потребление памяти иногда увеличивается до 700-800 МБ на 0,5-1 секунду, а затем снижается до нормального значения.
ОС
- Linux x32/x64. Любая UNIX-подобная система подойдет (теоретически). Протестировано на Centos 7.1 x64.
Node.js
- Node.js 5.0.0+. 4.2.x может подойти, но это не проверялось. Настоятельно рекомендуется загрузить Node.js с сайта Node.js, поскольку версия в репозитории вашей ОС, скорее всего, устарела (или что-то в этом роде).0.x
Важно: убедитесь, что Node.js находится в вашем PATH (в UNIX-подобной системе введите: , в Windows запустите ).which nodenode.exe
Библиотеки и инструменты
RedisСервер. Конфигурация по умолчанию должна быть ОК. Официальный сайт.ElasticsearchСервер. Конфигурация по умолчанию должна быть ОК. Официальный сайт. Загрузки доступны здесь. Примечание: вам также нужно будет установить JRE/JDK. Вот официальное руководство по установке и запуску Elasticsearch в Linux.sqlite3(включая библиотеки dev). Официальный сайт.Cairo(для пакета). Пожалуйста, обратитесь к npmjs.canvasImageMagick(для создания миниатюр). Официальный сайт.CImgи (для генерации хэша изображения с помощью пакета). Пожалуйста, обратитесь к npmjs. Подробности см. в разделах CImg и pHash.pHashImageMagickphash-imagefile(должен поддерживать MIME-тип). Исходный код можно получить [здесь https://github.com/file/file]. Могут быть некоторые проблемы с файлами, пожалуйста, обратитесь к II.5. 3rdparty related issues.video/webmmp3ffmpeg(с поддержкой , , и ). Пожалуйста, обратитесь к этой статье, чтобы узнать, как собрать ffmpeg со всеми необходимыми форматами. Еще одна.mp3oggwebmpng
Важно: убедитесь, что все библиотеки и инструменты находятся в PATH.
Возможные проблемы
- CImg
- Пакет CImg обычно называется . Он может отсутствовать в некоторых дистрибутивах. В этом случае загрузите его с официального сайта (нажмите кнопку «Стандартный пакет») и установите вручную. Вам следует поместить файл и каталог в ваш dir.cimg-devCImg.hplugins/usr/include
- Распакуйте загруженный архив и введите:
sudo cp /path/to/unzipped-cimg/CImg.h /usr/include sudo cp -r /path/to/unzipped-cimg/plugins /usr/include
- pHash
- Пакет pHash обычно называется . Он может отсутствовать в некоторых дистрибутивах. В этом случае загрузите его из официального сайта (нажмите ссылку "pHash 0.9.6 - Linux") и соберите его вручную.
libphash0-dev
- Распакуйте загруженный архив и введите:
./configure --prefix=/usr --enable-video-hash=no --enable-audio-hash=no make sudo make install
Примечание: если сборка не удалась (это происходит в некоторых дистрибутивах), откройте файл, найдите строку ./Makefile
SUBDIRS = src bindings examples
и замените ее на
SUBDIRS = src bindings
(удалите цель). Затем запустите снова. examples make
2. Пакеты NPM
Вам необходимо установить следующие пакеты:
- big-integer ^1.6.7
- canvas ^1.3.1
- commander ^2.9.0
- cookie-parser ^1.4.0
- cute-localize ^0.1.8
- ddos-express ^0.1.1
- deep-equal ^1.0.1
- dot ^1.0.3
- du ^0.1.0
elasticsearch^11.0.1escape-html^1.0.3express^4.13.3express-cluster0.0.4fast-csv^0.6.0fluent-ffmpeg^2.0.1highlight.js^8.9.1html-to-text^2.0.0imagemagick^0.1.3ioredis^1.15.1ip-address^5.0.2jdenticon^1.3.2log4js^0.6.29mathjax-node^0.5.1merge^1.2.0mkpath^1.0.0moment^2.10.6multiparty^4.1.2musicmetadata^2.0.2node-captcha^0.2.2phash-image^3.5.0promisify-node^0.2.1q-io^1.13.1random-js^1.0.8read^1.0.7sockjs^0.3.17sqlite3^3.1.1uuid^2.0.1xml2js^0.4.15xregexp^3.0.0
Чтобы установить необходимые пакеты NPM, введите следующее:
npm install
Примечание: не забудьте сначала установить все зависимости.
Примечание 2: см. актуальный список пакетов в файле package.json.
3. Геолокация
ololord.js использует базу данных IPInfoDB для геолокации. Вам необходимо самостоятельно загрузить соответствующий файл DB (в формате CSV) и преобразовать его в базу данных SQLite 3 с помощью скрипта tools/geolocation.js. Файл .csv можно загрузить здесь (требуется регистрация). Если вы используете IPv6, вам следует загрузить версию IPv6 базы данных IPInfoDB, в противном случае следует использовать версию IPv4.
После загрузки файла выполните:
./tools/geolocation.js <path/to/file.csv>
Примечание: операция может занять некоторое время (до 10–20 минут в зависимости от вашего оборудования).
Примечание 2: геолокация выполняется очень быстро (~5 миллисекунд на запрос).
4. Базовая Конфигурация
Для корректной работы приложения необходимо добавить некоторые базовые настройки. Для начала создайте файл конфигурации: config.json. Затем вставьте следующее содержимое:
{
"server": {
"port": 80,
"youtubeApiKey": "Your YouTube API key here"
},
"site": {
"protocol": "http",
"domain": "localhost:80"
},
"board": {
"captchaEnabled": true,
"launchDate": "2015-02-12T21:00:00",
"int": {
"showWhois": true
}
},
"captcha": {
"google-recaptcha": {
"privateKey": "Your Google reCAPTCHA private key here",
"publicKey": "Your Google reCAPTCHA public key here"
},
"google-recaptcha-v1": {
"privateKey": "Your Google reCAPTCHA v1 private key here",
"publicKey": "Your Google reCAPTCHA v1 public key here"
},
"codecha": {
"privateKey": "Your Codecha private key here",
"publicKey": "Your Codecha public key here"
}
}
}
Примечание: Это лишь малая часть параметров конфигурации, необходимых для корректной работы приложения. Другие параметры конфигурации описаны здесь: II.1. Configuration.
Параметры конфигурации
- server.port
- Порт, на котором сервер будет прослушивать соединения. Обычно 80, но значение может отличаться, если трафик проходит через какой-либо HTTP-сервер, например nginx.
- server.youtubeApiKey
Ключ API YouTube, используемый для извлечения информации о видео YouTube в сообщениях и для правильной разметки соответствующих ссылок (добавление всплывающей подсказки с названием видео и миниатюрой, а также создание расширяемого встроенного проигрывателя YouTube). Документация API YouTube.
- site.protocol
- Предпочтительный протокол (http или https). Используется для ссылок в сгенерированном канале RSS и для предоставления ссылок на файлы внешним поисковым системам изображений (например, TinEye).
- site.domain
- Используется для той же цели, что и site.protocol.
- board.captchaEnabled
- Включает или отключает капчу.
- board.launchDate
Дата запуска вашей imageboard. Используется для расчета скорости публикации. Необходимо указать в формате ISO: YYYY-MM-DDThh:mm:ss. Пример: 2015-02-12T21:00:00.
- board.int.showWhois
- Показать страну (с соответствующим флагом страны) и город пользователя на доске /int/ (международная). Вы можете включить эту опцию на любой доске (но обычно не следует).
- Примечание: информация о геолокации сохраняется для каждого сообщения, независимо от того, включена ли опция showWhois, но она не отображается на страницах, если эта опция не включена.
- Закрытые и открытые ключи капчи
- Вы должны указать закрытые и открытые ключи капчи для каждой службы капчи. Закрытые ключи используются только на сервере, а открытые ключи отображаются на страницах сайта.
- Links:
- Примечание: По умолчанию Codecha — единственная доступная капча для доски /pr/ (Программирование). Вам следует предоставить ключи сервиса Codecha или включить другие движки капчи для этой доски (см. II.1. Конфигурация).
Запуск
Запуск и выход
Запуск ololord.js довольно прост:
./app.js
Обычно при запуске будет выводиться некоторый текст, а также будет отображаться командная строка:
[17662] Using config file: "/home/username/dev/js/projects/ololord.js/config.json"... Generating JSON cache, please, wait... Generating HTML cache, please, wait... Generating RSS, please, wait... Spawning workers, please, wait... [17677] Using config file: "/home/username/dev/js/projects/ololord.js/config.json"... [17677] Initializing... [17677] Listening on port 8080... Type 'help' for commands ololord.js>
Чтобы выйти из приложения, вы можете либо ввести:
quit
либо:
q
или нажать Ctrl+C (последнее не рекомендуется).
Генерация кэша
При первом запуске ololord.js вам нужно будет передать параметр --regenerate для генерации кэша HTML/JSON.
./app.js --regenerate
или
./app.js -r
Указание файла конфигурации
По умолчанию используется файл конфигурации ./config.json. Вы можете указать любой другой файл конфигурации с помощью параметров командной строки -c или --config-file. Путь может быть относительным:
./app.js -c ./custom-config.json
или абсолютным:
./app.js --config-file /etc/config/ololord.js/custom-config.json
Если указанный файл не существует, будет использована конфигурация по умолчанию (в этом случае приложение может быть даже недоступно в браузере).
См. также: 4. Базовая конфигурация и II.1. Configuration.
Аккаунт суперпользователя
Чтобы иметь возможность управлять уровнями доступа пользователей, запретами и выполнять другие административные действия (редактировать/удалять сообщения и т. д.), вам сначала нужно создать учетную запись суперпользователя. Запустите ololord.js и введите:
add-superuser
Вам будет предложено ввести пароль или хэш пароля SHA-1 (распознается автоматически), а затем список IP-адресов. Эти адреса используются для предотвращения удаления ваших сообщений администратором или модератором (случайно или намеренно).
Например:
ololord.js> add-superuser Enter password: ************* Enter superuser IP list (separate by spaces): 127.0.0.1 192.168.0.1 OK
Когда учетная запись суперпользователя создана, вы можете зайти на любую страницу с помощью браузера, нажать кнопку «Войти» Кнопка входа (расположена в левом верхнем углу страницы) и ввести свой пароль. После этого вы сможете удалять/редактировать сообщения, закрывать темы, видеть IP-адреса пользователей и т. д.
Примечание: пароли хранятся в базе данных в виде хешей SHA-1.
Чтобы удалить суперпользователя, введите:
remove-superuser
и введите пароль или хеш SHA-1 пароля (распознается автоматически).
Конфигурация nginx
Это пример nginx конфигурации.
user root; # Вы можете изменить это на «www-data» или на какого-либо другого пользователя.
worker_processes 1; # Количество рабочих процессов. 1 должно быть достаточно.
access_log /var/log/nginx/access.log; # Расположение журнала доступа.
error_log /var/log/nginx/error.log; # Расположение журнала ошибок.
events {
worker_connections 2048; # Максимальное количество соединений, которые может обслуживать рабочий процесс.
}
http {
include /etc/nginx/mime.types; # Стандартные типы MIME. НЕ изменять.
default_type application/octet-stream; # MIME-тип по умолчанию. НЕ изменять.
# Раскомментируйте следующие строки, чтобы включить SSL (HTTPS).
# ssl_session_cache shared:SSL:10m; # Это
# ssl_session_timeout 5m; # оптимальные настройки.
# ssl_prefer_server_ciphers on; # Вы можете их погуглить
# ssl_stapling on; # если хотите
# resolver 8.8.8.8; # их изменить.
# Раскомментируйте следующие строки, чтобы включить кэширование в памяти. Вам также придется создать RAMDisk.
# proxy_cache_path /path/to/ramdisk levels=1:2 keys_zone=ram:10m max_size=1g inactive=3d use_temp_path=off; # Объявление местоположения кэша
# map $request_uri $nocache { # Отключение кэширования часто изменяемого контента и вызовов API.
# default 0;
# ~*\.(html|json|rss) 1;
# ~*/[a-z0-9_]+/src/.* 1;
# ~*/[a-z0-9_]+/? 1;
# ~*/[a-z0-9_]+/index\.html 1;
# ~*/[a-z0-9_]+/[0-9]+\.(html|json) 1;
# /api/* 1;
# /misc/* 1;
# /action* 1;
# }
limit_req_zone $binary_remote_addr zone=req_perip:10m rate=10r/s; # Не более 10 запросов в секунду для 1 IP.
limit_req_zone $binary_remote_addr zone=req_perserver:10m rate=1000r/s; # Не более 1000 запросов в секунду для всего сервера.
limit_conn_zone $binary_remote_addr zone=conn_perip:10m;
limit_conn_zone $binary_remote_addr zone=conn_perserver:10m;
upstream backend { # Использование «балансировки нагрузки» для обеспечения резервного сервера в случае сбоя приложения ololord.js.
server 127.0.0.1:8080; # Приложение ololord.js должно прослушивать этот порт.
server 127.0.0.1:8200 backup; # Если приложение ololord.js недоступно, используется резервный сервер (см. ниже).
keepalive 1024; # Поддерживайте до 1024 открытых подключений к ololord.js.
}
server { # Главный сервер
listen 80 default_server; # Прослушивайте соединения на стандартном HTTP-порту 80.
# listen 443 ssl; # Раскомментируйте эту строку, чтобы включить SSL (HTTPS).
server_name yoursite.com www.yoursite.com;
# Раскомментируйте следующие строки, чтобы включить SSL (HTTPS).
# ssl_certificate /etc/nginx/cert/yoursite.crt; # Укажите путь к вашему SSL-сертификату.
# ssl_certificate_key /etc/nginx/cert/yoursite.unencrypted.key; # Укажите путь к незашифрованному ключу вашего SSL-сертификата.
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSLv2 и SSLv3 не являются безопасными. Вы можете добавлять их на свой страх и риск.
# ssl_ciphers "HIGH:!RC4:!aNULL:!MD5:!kEDH"; # Ну, если хотите, можете поискать это в Google.
limit_req zone=req_perip burst=20; # Применяем указанные выше ограничения по IP-адресам.
limit_req zone=req_perserver burst=2000; # Применение глобальных ограничений сервера, заявленных выше.
limit_conn conn_perip 10; # Не более 10 одновременных подключений на один IP.
limit_conn conn_perserver 1000; # Не более 1000 одновременных подключений на весь сервер.No more than 1000 simultaneous connections for the whole server.
client_max_body_size 50m; # Ограничение размера тела запроса.
client_body_timeout 2m; # Ограничение времени передачи тела запроса.
client_header_timeout 5s; # Ограничение времени передачи заголовков запроса.
keepalive_timeout 360s; # Ограничение времени «keep-alive» соединения до 6 минут.
# Раскомментируйте следующие строки только в том случае, если соответствующие файлы существуют.
# include /etc/nginx/blocked_ips.conf;
# include /etc/nginx/block_tor.conf;
# include /etc/nginx/maintainance.conf;
location /ws/ { # Запросы, связанные с WebSocket, передаются непосредственно на бэкэнд.
if ($maintainanceMode) { # Если установлен флаг обслуживания сервера,
return 503; # то вернуть страницу ошибки 503.
}
proxy_pass http://backend; # Передача запросов на бэкэнд.
proxy_http_version 1.1; # Установка версии HTTP на 1.1 для использования «keep-alive» соединений.
proxy_set_header Upgrade $http_upgrade; # Заголовок, связанный с WebSocket.
proxy_set_header Connection "upgrade"; # Заголовок, связанный с WebSocket.
proxy_set_header X-Client-IP $remote_addr; # Если этот заголовок не установлен, IP-адреса всегда будут 127.0.0.1.
}
location / { # Основное место.
if ($maintainanceMode) { # Если установлен флаг обслуживания сервера,
return 503; # то вернуть страницу ошибки 503.
}
proxy_set_header X-Client-IP $remote_addr; # Если этот заголовок не установлен, IP-адреса всегда будут 127.0.0.1.
# Uncomment the following lines to enable in-memory caching.
# proxy_cache ram;
# proxy_cache_valid 200 1h;
# proxy_no_cache $nocache;
# proxy_pass http://127.0.0.1:80;
# Закомментируйте следующие строки, чтобы включить кэширование в памяти.
root /path/to/ololord.js/public; # Вам необходимо изменить путь к каталогу «ololord.js/public».
try_files $uri $uri/index.html @ololord; # Попытка обслужить статические файлы. Если не найдено, то запрос передается в специальное местоположение.
}
location @ololord { # Это местоположение передает запрос непосредственно на бэкэнд.
proxy_http_version 1.1; # Установка версии HTTP на 1.1 для использования «keep-alive» соединений.
proxy_set_header Connection "";
proxy_set_header X-Client-IP $remote_addr; # Если этот заголовок не установлен, IP-адреса всегда будут 127.0.0.1.
proxy_pass http://backend; # Передаю запрос.
}
error_page 503 /503.html; # Пользовательская страница ошибки 503. Создайте каталог "ololord.js/public/error" и поместите туда файл "503.html".
location = /503.html { # Специальное место для обслуживания пользовательской страницы ошибки 503.
root /path/to/ololord.js/public/error; # Вам необходимо изменить путь к каталогу «ololord.js/public/error».
}
}
server { # Резервный сервер.
listen 127.0.0.1:8200; # Локальное прослушивание порта 8200.
location / { # Всегда возвращает пользовательскую страницу ошибки 503, если основной сервер не работает.
return 503;
}
error_page 503 /503.html; # См. описание объявления пользовательской страницы ошибок выше.
location = /503.html {
root /ololord.js/public/error;
}
}
# Раскомментируйте следующие строки, чтобы включить кэширование в памяти.
# server { # Специальный прокси-сервер для включения кэширования в памяти.
# listen 127.0.0.1:80; # Локальное прослушивание порта 8200.
# location / { # Основное местоположение кэширующего прокси-сервера.
# internal; # Местоположение доступно только внутри компании.
# root /path/to/ololord.js/public; # Вам необходимо изменить путь к каталогу «ololord.js/public».
# try_files $uri $uri/index.html @ololord; # Попытка обслужить статические файлы. Если не найдено, то запрос передается в специальное местоположение.
# }
# location @ololord { # Это местоположение передает запрос непосредственно на бэкэнд.
# proxy_http_version 1.1; # Установка версии HTTP на 1.1 для использования «keep-alive» соединений.
# proxy_set_header Connection "";
# proxy_set_header X-Client-IP $remote_addr; # Если этот заголовок не установлен, IP-адреса всегда будут 127.0.0.1.
# proxy_pass http://backend; # Передаю запрос.
# }
# }
}
Включение SSL (HTTPS)
- Вы можете перейти на https://www.startssl.com/, чтобы получить бесплатный сертификат SSL. Вам нужно будет подтвердить свой сайт, а затем запросить сертификат. Не забудьте раскомментировать соответствующие строки в файле конфигурации.
- Незашифрованный ключ сертификата можно создать из зашифрованного с помощью следующей команды:
openssl rsa -in /path/to/encrypted/key -out /path/to/new/unencrypted/key
- Подробнее о настройке nginx можно прачитать здесь — I.7. nginx configuration
См. также
| Instant 0chan • Мишаба | |
| Makaba • Vichan | |
| TinyIB • Chieftain • Doushio • Kotoba | |
| FoolFuuka | |
| 1chan engine • Bakaba • Tinyboard • Northboard • Ханабира | |
| Ololord.js • Ololord • Erlach • Frikichan • Monaba • Neboard • Orphereus | |
| Exaba • Kusaba X • Linaba • Ochoba | |
| Wakaba • Phalcaba • Futaba • Futallaby • Движок freeport7 • Зептоборда | |
| Kusaba • Атта | |