# Шрифтик 1.0.0 — проверочный экземпляр программного обеспечения

Архив содержит проверочный экземпляр программного обеспечения «Шрифтик» версии 1.0.0,
подготовленный для проведения экспертной проверки в соответствии с подпунктами «а» и «д»
пункта 11 Правил формирования и ведения единого реестра российских программ для электронных
вычислительных машин и баз данных (постановление Правительства Российской Федерации
от 16.11.2015 № 1236).

Правообладатель: индивидуальный предприниматель Овчаренко Андрей Александрович,
ИНН 611602008192, ОГРНИП 318619600238627.

Экземпляр предоставлен **без технических средств защиты авторских прав**: лицензионные ключи,
средства активации, аппаратные ключи, ограничения по сроку работы, по числу пользователей и по
оборудованию отсутствуют. Программное обеспечение состоит из трёх программных модулей —
серверного (Java), веб-модуля (Node.js) и мобильного модуля для платформы Android (Flutter).
Серверный и веб-модули разворачиваются совместно, мобильный модуль поставляется готовым
установочным пакетом APK.

## 1. Состав архива

| Путь | Назначение |
|---|---|
| `backend/shriftik-java-1.0.0.jar` | серверный модуль: исполняемый файл Spring Boot (публичный API v3, поиск, модерация, MCP-сервер) |
| `frontend/shriftik-js-1.0.0.tar.gz` | веб-модуль: собранное приложение Next.js в автономном (standalone) виде вместе с зависимостями |
| `mobile/ShriftikAndroid-v1.5.2-prod-release.apk` | мобильный модуль: подписанный установочный пакет для платформы Android (universal APK, все архитектуры) |
| `docker/compose.yml` | описание запуска серверного модуля, веб-модуля и СУБД PostgreSQL средствами Docker Compose |
| `docker/.env.example` | образец файла параметров запуска |
| `api/shriftik-api-v3-1.0.0.yaml` | спецификация публичного программного интерфейса в формате OpenAPI |
| `BUILD-INFO.txt` | сведения о сборке обоих модулей (версии, коммиты, среда сборки) |
| `SHA256SUMS.txt` | контрольные суммы файлов архива |

Проверка целостности после распаковки:

```
sha256sum -c SHA256SUMS.txt
```

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

| Параметр | Значение |
|---|---|
| Серверная операционная система | GNU/Linux x86-64 с ядром 5.x и новее (проверено на Ubuntu 24.04 LTS) |
| Среда исполнения серверного модуля | Java 25 (OpenJDK); при запуске в контейнере входит в состав образа |
| Среда исполнения веб-модуля | Node.js 24; при запуске в контейнере входит в состав образа |
| Система управления базами данных | PostgreSQL 16 и выше (в комплекте поставки используется PostgreSQL 18) |
| Системное программное обеспечение | Docker Engine 24 и выше с Docker Compose v2 — для запуска способом 3.1 |
| Вычислительные ресурсы | от 4 vCPU и 8 ГБ оперативной памяти |
| Дисковое пространство | от 20 ГБ (без учёта хранилища файлов шрифтов) |
| Рабочее место пользователя | любая операционная система с современным веб-браузером |
| Мобильный модуль | устройство или эмулятор с Android 8.0 и новее, архитектуры arm64-v8a, armeabi-v7a, x86_64 |

## 3. Установка и запуск

### 3.1. Запуск средствами Docker Compose (рекомендуемый способ)

1. Распакуйте архив и подготовьте веб-модуль:

```
unzip shriftik-1.0.0.zip
cd shriftik-1.0.0
mkdir -p frontend/app
tar xzf frontend/shriftik-js-1.0.0.tar.gz -C frontend/app
```

В каталоге `frontend/app` после распаковки находятся `server.js`, `package.json`, каталоги
`.next`, `public` и `node_modules` — веб-модуль полностью автономен, установка пакетов
из сети «Интернет» не требуется.

2. Создайте файл параметров и задайте пароль базы данных:

```
cd docker
cp .env.example .env
nano .env
```

3. Запустите стенд:

```
docker compose up -d
docker compose ps
docker compose logs -f api
```

Структура базы данных создаётся автоматически при первом запуске серверного модуля средствами
Flyway; выполнять SQL-скрипты вручную не требуется. Первый запуск занимает около одной минуты.

4. Проверьте готовность и откройте веб-интерфейс:

```
curl http://127.0.0.1:8081/actuator/health     # ожидается {"status":"UP"}
curl -I http://127.0.0.1:3000/                 # ожидается 200 OK
```

Веб-интерфейс: `http://<адрес сервера>:3000/`, программный интерфейс: `http://<адрес сервера>:8081/api/v3`.

Остановка стенда: `docker compose down`; полное удаление вместе с данными: `docker compose down -v`.

### 3.2. Запуск без Docker

1. Создайте базу данных и пользователя PostgreSQL:

```
sudo -u postgres psql -c "CREATE USER shriftik WITH PASSWORD 'пароль';"
sudo -u postgres psql -c "CREATE DATABASE shriftik OWNER shriftik;"
```

2. Запустите серверный модуль (требуется Java 25):

```
export SPRING_PROFILES_ACTIVE=prod
export SPRING_DATASOURCE_URL='jdbc:postgresql://localhost:5432/shriftik'
export SPRING_DATASOURCE_USERNAME='shriftik'
export SPRING_DATASOURCE_PASSWORD='пароль'
export SHRIFTIK_FILES_STORAGE_ROOT='/srv/shriftik/files'
export PORT=8080
java -jar backend/shriftik-java-1.0.0.jar
```

3. Запустите веб-модуль (требуется Node.js 24):

```
mkdir -p frontend/app && tar xzf frontend/shriftik-js-1.0.0.tar.gz -C frontend/app
cd frontend/app
export NODE_ENV=production PORT=3000 HOSTNAME=0.0.0.0
export BACKEND_API_ORIGIN='http://127.0.0.1:8080'
export INTERNAL_API_V3_BASE_URL='http://127.0.0.1:8080/api/v3'
export NEXT_PUBLIC_SITE_URL='http://localhost:3000'
node server.js
```

### 3.3. Установка мобильного модуля (Android)

Мобильный модуль поставляется готовым установочным пакетом
`mobile/ShriftikAndroid-v1.5.2-prod-release.apk` — подписанный universal APK, включающий все
поддерживаемые архитектуры. Средства защиты авторских прав, лицензионные ключи и проверки
целостности, препятствующие установке, отсутствуют.

Установка на устройство или эмулятор:

```
adb install -r mobile/ShriftikAndroid-v1.5.2-prod-release.apk
```

Либо скопировать файл на устройство и открыть его, разрешив установку из неизвестных
источников. Требуется Android 8.0 и новее.

Собранный пакет обращается к рабочему серверному модулю по адресу `https://shriftik.ru`, поэтому
проверка мобильного модуля не требует развёртывания серверной части. Для работы с собственным
экземпляром пакет пересобирается из исходных текстов с указанием адреса сервера:

```
flutter build apk --release --flavor prod \
  --dart-define=SHRIFTIK_API_ORIGIN=http://<адрес сервера>:8081 \
  --dart-define=SHRIFTIK_ENV=prod
```

Среда сборки мобильного модуля: Flutter 3.44.4, Dart 3.12, Android SDK 36, Java 21. Исходные
тексты мобильного модуля предоставляются по запросу на адрес ip@krot.name в течение одного
рабочего дня.

## 4. Параметры конфигурации

Серверный модуль:

| Переменная окружения | Назначение |
|---|---|
| `SPRING_DATASOURCE_URL`, `SPRING_DATASOURCE_USERNAME`, `SPRING_DATASOURCE_PASSWORD` | подключение к PostgreSQL |
| `SHRIFTIK_FILES_STORAGE_ROOT` | каталог хранения файлов шрифтов |
| `PORT` | порт серверного модуля (по умолчанию 8080) |
| `SHRIFTIK_MCP_PUBLIC_ENABLED` | включение публичного MCP-сервера |

Веб-модуль:

| Переменная окружения | Назначение |
|---|---|
| `BACKEND_API_ORIGIN`, `INTERNAL_API_V3_BASE_URL` | адреса серверного модуля |
| `NEXT_PUBLIC_SITE_URL` | внешний адрес веб-модуля |
| `PORT`, `HOSTNAME` | параметры прослушивания |

## 5. Проверка работоспособности

Основные сценарии для проверки: открытие каталога шрифтов, поиск и фильтрация по языкам и
категориям, просмотр карточки шрифта, регистрация учётной записи через веб-интерфейс (новой
учётной записи назначается роль автора), загрузка собственного шрифта, скачивание файла шрифта,
обращение к публичному программному интерфейсу:

```
curl http://127.0.0.1:8081/api/v3/fonts?page=0&size=5
```

## 6. Экземпляр, развёрнутый правообладателем

Дополнительно доступен экземпляр, развёрнутый правообладателем: https://shriftik.ru/
Документация размещена по адресу https://shriftik.ru/docs.
Учётные данные для ознакомительного доступа предоставляются по запросу на адрес ip@krot.name.

## 7. Контакты технических специалистов

По вопросам развёртывания, настройки и функционирования экземпляра программного обеспечения:

- Овчаренко Андрей Александрович, правообладатель, ведущий разработчик;
- электронная почта: ip@krot.name;
- телефон: +7 (960) 450-06-00;
- время консультаций: по рабочим дням с 09:00 до 18:00 по московскому времени.
