Skip to content

Commit

Permalink
Merge branch 'release/1.0.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
bookpauk committed Dec 18, 2022
2 parents 0831514 + c6e972b commit b98a44d
Show file tree
Hide file tree
Showing 105 changed files with 8,105 additions and 5,407 deletions.
10 changes: 5 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/node_modules
/server/data
/server/public
/server/ipfs
/dist
/node_modules
/server/.liberama*
/dist
dev*.sh

159 changes: 136 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,156 @@
# Liberama

Браузерная онлайн-читалка книг и децентрализованная библиотека.
Браузерная онлайн-читалка книг.

Читалка <img src="https://omnireader.ru/favicon.ico" width="14px"/>[OmniReader](https://omnireader.ru) является частью данного проекта, размещенной на VPS:
Выглядит соледующим образом: <img src="https://omnireader.ru/favicon.ico" width="14px"/>[OmniReader](https://omnireader.ru)

![](docs/assets/face.jpg)
![](docs/assets/reader.jpg)

## VPS
Для разворачивания читалки на чистом VPS с нуля смотрите [docs/omnireader.ru](docs/omnireader.ru/README.md)
При запуске приложения, по умолчанию веб-сервер доступен по адресу [http://127.0.0.1:44080](http://127.0.0.1:44080)

## Сборка проекта
Необходима версия node.js не ниже 14.
Для указания местоположения рабочей директории, воспользуйтесь [параметрами командной строки](#cli).
Дополнительные параметры сервера настраиваются в [конфигурационном файле](#config).

```
$ git clone https://github.com/bookpauk/liberama
$ cd liberama
$ npm i
```
[Отблагодарить автора проекта](https://donatty.com/liberama)

##
* [Возможности читалки](#capabilities)
* [Использование](#usage)
* [Параметры командной строки](#cli)
* [Конфигурация](#config)
* [Разворачивание на VPS](#vps)
* [Сборка проекта](#build)
* [Разработка](#development)

<a id="capabilities" />

## Возможности читалки
- загрузка любой страницы интернета
- синхронизация данных (настроек и читаемых книг) между различными устройствами
- работа в автономном режиме (без связи)
- изменение цвета фона, текста, размер и тип шрифта и прочее
- установка и запоминание текущей позиции и настроек в браузере и на сервере
- кэширование файлов книг на клиенте и на сервере
- открытие книг с локального диска
- плавный скроллинг текста
- анимация перелистывания
- поиск по тексту и копирование фрагмента
- запоминание недавних книг, скачивание книги из читалки в формате fb2
- управление кликом и с клавиатуры
- регистрация не требуется
- поддерживаемые браузеры: Google Chrome, Mozilla Firefox последних версий
- релизы сервера под Linux, MacOS и Windows

<a id="usage" />

## Использование
Приложение представляет собой полноценный веб-сервер в виде единого исполнимого файла.
При первом запуске, будет создана рабочая директория `.liberama` (по умолчанию - в той же папке, где исполнимый файл),
в которой хранится конфигурационный файл `config.json`, файлы веб-приложения, файлы базы данных, журналы и прочее.
Изменить рабочую директорию можно с помощью cli-параметра --app-dir

### Windows
По умолчанию веб-интерфейс будет доступен по адресу [http://127.0.0.1:44080](http://127.0.0.1:44080)

<a id="cli" />

### Параметры командной строки
Запустите `liberama --help`, чтобы увидеть список опций:
```console
Usage: liberama [options]

Options:
--help Показать опции командной строки
--app-dir=<dirpath> Задать рабочую директорию, по умолчанию: <execDir>/.liberama
--auto-repair Починить БД приложения при запуске, если она повреждена
```
$ npm run build:win

<a id="config" />

### Конфигурация
При первом запуске в рабочей директории будет создан конфигурационный файл `config.json`:
```js
{
// Максимальный размер файла загружаемой книги (в байтах)
"maxUploadFileSize": 52428800,

// Максимальный размер каталога <appDir>/public-files/tmp для хранения конвертированных
// файлов книг пользователей (в байтах)
"maxTempPublicDirSize": 536870912,

// Максимальный размер каталога <appDir>/public-files/upload для хранения
// загруженных в /upload (кнопка "Загрузить файл с диска") файлов книг пользователей (в байтах)
"maxUploadPublicDirSize": 209715200,

// Использование внешних конвертеров (только в среде Linux)
// Без них читалка может работать только с файлами формата fb2, txt, html, xml
// Инструкции установки внешних конвертеров см. в docs/omnireader.ru/README.md
"useExternalBookConverter": false,

// Настройки для списка серверов.
// Приложение может запускать одновременно несколько веб-серверов на разных портах
"servers": [
{
// Произвольное название сервера
"serverName": "1",

// Режим работы сервера:
// "reader" - обычная читалка
// "omnireader" - модификации для сайта omnireader.ru
// "liberama" - модификации для сайта liberama.top
// "book_update_checker" - сервер обновлений
"mode": "reader",

// Хост, порт сервера
"ip": "0.0.0.0",
"port": "44080"
}
],

// Настройки удаленного хранилища
"remoteStorage": false,

// Для веб-приложения: включение/выключение работы с сервером обновлений
"bucEnabled": false,

// Подключение себя, как клиента, к серверу обновлений
"bucServer": false
}
```

### Linux
При необходимости, можно настроить нужный параметр в этом файле вручную.

<a id="vps" />

## VPS
Для разворачивания читалки на чистом VPS с нуля смотрите [docs/omnireader.ru](docs/omnireader.ru/README.md)

<a id="build" />

### Сборка проекта
Сборка только в среде Linux.
Необходима версия node.js не ниже 16.

Для сборки linux-arm64 необходимо предварительно установить [QEMU](https://wiki.debian.org/QemuUserEmulation).

```sh
git clone https://github.com/bookpauk/liberama
cd liberama
npm i
```
$ npm run build:linux

#### Релизы
```sh
npm run release
```

Результат сборки будет доступен в каталоге `dist/linux|win` в виде исполнимого (standalone) файла
Результат сборки будет доступен в каталоге `dist/release`

<a id="development" />

### Разработка
```sh
npm run dev
```
$ npm run dev
```

## Помочь проекту

* bitcoin: bc1q3tyumaj648pp2e69jalsez2lnt462ttc33nup9
* litecoin: MP39Riec4oSNB3XMjiquKoLWxbufRYNXxZ
* monero: 8BQPnvHcPSHM5gMQsmuypDgx9NNsYqwXKfDDuswEyF2Q2ewQSfd2pkK6ydH2wmMyq2JViZvy9DQ35hLMx7g72mFWNJTPtnz
Связаться с автором проекта: [bookpauk@gmail.com](mailto:bookpauk@gmail.com)
31 changes: 0 additions & 31 deletions build/includer.js

This file was deleted.

51 changes: 0 additions & 51 deletions build/linux.js

This file was deleted.

51 changes: 51 additions & 0 deletions build/prepkg.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const fs = require('fs-extra');
const path = require('path');
const { execSync } = require('child_process');

const showdown = require('showdown');

const platform = process.argv[2];

const distDir = path.resolve(__dirname, '../dist');
const tmpDir = `${distDir}/tmp`;
const publicDir = `${tmpDir}/public`;
const outDir = `${distDir}/${platform}`;

async function build() {
if (!platform)
throw new Error(`Please set platform`);

await fs.emptyDir(outDir);

//добавляем readme в релиз
let readme = await fs.readFile(path.resolve(__dirname, '../README.md'), 'utf-8');
const converter = new showdown.Converter();
readme = converter.makeHtml(readme);
await fs.writeFile(`${outDir}/readme.html`, readme);

// перемещаем public на место
if (await fs.pathExists(publicDir)) {

const zipFile = `${tmpDir}/public.zip`;
const jsonFile = `${distDir}/public.json`;//distDir !!!

await fs.remove(zipFile);
execSync(`zip -r ${zipFile} .`, {cwd: publicDir, stdio: 'inherit'});

const data = (await fs.readFile(zipFile)).toString('base64');
await fs.writeFile(jsonFile, JSON.stringify({data}));
} else {
throw new Error(`publicDir: ${publicDir} does not exist`);
}
}

async function main() {
try {
await build();
} catch(e) {
console.error(e);
process.exit(1);
}
}

main();
33 changes: 33 additions & 0 deletions build/release.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const fs = require('fs-extra');
const path = require('path');
const { execSync } = require('child_process');

const pckg = require('../package.json');

const distDir = path.resolve(__dirname, '../dist');
const outDir = `${distDir}/release`;

async function makeRelease(target) {
const srcDir = `${distDir}/${target}`;

if (await fs.pathExists(srcDir)) {
const zipFile = `${outDir}/${pckg.name}-${pckg.version}-${target}.zip`;

execSync(`zip -r ${zipFile} .`, {cwd: srcDir, stdio: 'inherit'});
}
}

async function main() {
try {
await fs.emptyDir(outDir);
await makeRelease('win');
await makeRelease('linux');
await makeRelease('linux-arm64');
await makeRelease('macos');
} catch(e) {
console.error(e);
process.exit(1);
}
}

main();
4 changes: 0 additions & 4 deletions build/webpack.base.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,6 @@ module.exports = {
}
}*/
},
{
resourceQuery: /^\?vue/,
use: path.resolve(__dirname, 'includer.js')
},
{
test: /\.js$/,
loader: 'babel-loader',
Expand Down
6 changes: 3 additions & 3 deletions build/webpack.dev.config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const path = require('path');
const webpack = require('webpack');
const pckg = require('../package.json');

const { merge } = require('webpack-merge');
const baseWpConfig = require('./webpack.base.config');
Expand All @@ -8,16 +9,15 @@ baseWpConfig.entry.unshift('webpack-hot-middleware/client');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');

const publicDir = path.resolve(__dirname, '../server/public');
const publicDir = path.resolve(__dirname, `../server/.${pckg.name}/public`);
const clientDir = path.resolve(__dirname, '../client');

module.exports = merge(baseWpConfig, {
mode: 'development',
devtool: 'inline-source-map',
output: {
path: `${publicDir}/app`,
path: `${publicDir}${baseWpConfig.output.publicPath}`,
filename: 'bundle.js',
clean: true
},

module: {
Expand Down
Loading

0 comments on commit b98a44d

Please sign in to comment.