mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
New guide/low-resource page: what runs well on 2 GB machines, a Raspberry Pi / old laptop Compose walkthrough with tuned caps, the env-var knobs that matter on small hardware, and what to skip. Linked from getting-started, the deployment hardware section, and the sidebar. Translated into all 20 non-English locales via the i18n batch pipeline; parity check and VitePress build pass. Admin merge: docs-only PR, the path-filtered required integration contexts never report (#420 precedent). Closes #497
104 lines
10 KiB
Markdown
104 lines
10 KiB
Markdown
---
|
||
i18n_source_hash: f5de74aee1b9
|
||
i18n_provenance: machine
|
||
i18n_output_hash: 27b701493717
|
||
---
|
||
# Робота на слабкому обладнанні {#low-resource-setups}
|
||
|
||
SnapOtter добре працює на скромному обладнанні: Raspberry Pi 4 чи 5, старому ноутбуці або VPS із 2 GB пам'яті. Ця сторінка є практичним посібником для таких машин: чого очікувати, готове до копіювання налаштування з розумними лімітами й які функції варто пропустити. Повні дані бенчмарків, на яких ґрунтуються ці цифри, наведено в розділі [Вимоги до апаратного забезпечення](/uk/guide/deployment#hardware-requirements).
|
||
|
||
Два жорсткі обмеження одразу:
|
||
|
||
- **Тільки 64-бітні системи.** Образ збирається для `linux/amd64` і `linux/arm64`. 32-бітний ARM (`armv7`/`armhf`) не підтримується, тож Pi першого покоління та сімейство Pi Zero відпадають.
|
||
- **Мінімум 2 GB пам'яті.** 512 MB не запустять стек, а 1 GB не витримує пакетів із кількох файлів. Найменша конфігурація, що працює комфортно: 2 GB і 2 ядра.
|
||
|
||
## Що добре працює на слабкому обладнанні {#what-runs-well}
|
||
|
||
Кожен інструмент без AI працює на машині з 2 GB і 2 ядрами: цілі розділи «Зображення» та «Файли», PDF-інструменти, а також відео- та аудіооперації з копіюванням потоку (обрізання, вимкнення звуку, зміна контейнера). Більшість завершується менш ніж за секунду.
|
||
|
||
Винятками є два типи навантаження:
|
||
|
||
- **Перекодування відео** (конвертація між кодеками) обмежене процесором. Кліп 1080p, який на швидкому десктопному CPU займає ~40 с, на процесорі класу Pi може тривати кілька хвилин. Операції з копіюванням потоку залишаються миттєвими.
|
||
- **AI-інструменти** потребують RAM (рекомендовано 4 GB) і диска (більші бандли займають по 4-5 GB кожен), а важкі з них (масштабування, відновлення фото, видалення фону) непрактичні на процесорах класу Pi. Легкий AI, як-от виявлення облич і OCR, цілком придатний, якщо вистачає пам'яті.
|
||
|
||
Жодне з цих навантажень не встановлюється й не запускається, доки ви ним не користуєтеся: без встановлених AI-бандлів застосунок у простої займає близько 360 MB, а AI-бандли завантажуються лише тоді, коли адміністратор їх вмикає.
|
||
|
||
## Покрокове налаштування Raspberry Pi / старого ноутбука {#walkthrough}
|
||
|
||
Це стандартне встановлення через Compose зі сторінки [Початок роботи](/uk/guide/getting-started), плюс ліміти ресурсів і консервативні обмеження. Передбачається 64-бітна ОС (на Pi: Raspberry Pi OS 64-bit або Ubuntu Server arm64).
|
||
|
||
```yaml
|
||
services:
|
||
snapotter:
|
||
image: snapotter/snapotter:latest
|
||
ports:
|
||
- "1349:1349"
|
||
volumes:
|
||
- ./snapotter-data:/data
|
||
environment:
|
||
- DATABASE_URL=postgres://snapotter:snapotter@db:5432/snapotter
|
||
- REDIS_URL=redis://redis:6379
|
||
# Small-box profile: see the table below for what each cap does.
|
||
- CONCURRENT_JOBS=1
|
||
- MAX_WORKER_THREADS=2
|
||
- MAX_BATCH_SIZE=5
|
||
- MAX_UPLOAD_SIZE_MB=100
|
||
- MAX_MEGAPIXELS=50
|
||
- MAX_VIDEO_DURATION_S=300
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: "2"
|
||
memory: 2G
|
||
depends_on:
|
||
- db
|
||
- redis
|
||
restart: unless-stopped
|
||
|
||
db:
|
||
image: postgres:17-alpine
|
||
environment:
|
||
- POSTGRES_USER=snapotter
|
||
- POSTGRES_PASSWORD=snapotter
|
||
- POSTGRES_DB=snapotter
|
||
volumes:
|
||
- ./postgres-data:/var/lib/postgresql/data
|
||
restart: unless-stopped
|
||
|
||
redis:
|
||
image: redis:8-alpine
|
||
command: redis-server --maxmemory 256mb --maxmemory-policy noeviction
|
||
restart: unless-stopped
|
||
```
|
||
|
||
Нотатки для машин класу Pi:
|
||
|
||
- **Віддавайте перевагу USB SSD, а не SD-карті** для тому даних і Postgres. Робочі простори завдань створюють реальне дискове навантаження, а SD-карти водночас повільні й швидко зношуються.
|
||
- **Універсальний єдиний контейнер тут теж працює** (вбудовані Postgres і Redis, коли `DATABASE_URL`/`REDIS_URL` не встановлені), і на хості з обмеженою пам'яттю варто зменшити ліміт вбудованого Redis через `REDIS_MAXMEMORY` (див. [Конфігурація](/uk/guide/configuration)). Compose дає точніший контроль на рівні окремих сервісів, саме тому цей посібник використовує його.
|
||
- **Додайте swap на пристроях із 2 GB.** Це вбереже від того, щоб випадковий сплеск (великий PDF, пакет, який ви забули обмежити) закінчився аварійним завершенням через брак пам'яті. Для SD-карт найдружніший варіант: zram.
|
||
- Образ arm64 працює лише на CPU; CUDA на платах ARM немає.
|
||
|
||
## Параметри тонкого налаштування {#tuning-knobs}
|
||
|
||
Усі ліміти задаються змінними середовища й повністю задокументовані на сторінці [Конфігурація](/uk/guide/configuration). `0` означає «без обмежень» або «авто». Ось ті, що мають значення на слабкому обладнанні:
|
||
|
||
| Змінна | Порада для слабкої машини | Що вона захищає |
|
||
|---|---|---|
|
||
| `CONCURRENT_JOBS` | `1` | Скільки завдань виконується паралельно. Автовизначення бере кількість ядер CPU мінус одне: це нормально для потужних машин і занадто агресивно для 2-ядерної під тиском пам'яті. |
|
||
| `MAX_WORKER_THREADS` | `2` | Пул потоків обробки зображень. |
|
||
| `MAX_BATCH_SIZE` | `5` | Саме на пакетах машини з 1-2 GB найпершими вичерпують пам'ять. |
|
||
| `MAX_UPLOAD_SIZE_MB` | `100` | Не дає одному величезному файлу зайняти весь робочий простір. |
|
||
| `MAX_MEGAPIXELS` | `50` | Декодування зображення на понад 100 мегапікселів коштує RAM незалежно від розміру файлу. |
|
||
| `MAX_VIDEO_DURATION_S` | `300` | Тривалі перекодування монополізують слабкий CPU на хвилини, а то й години. |
|
||
| `PROCESSING_TIMEOUT_S` | `600` | Жорстка стеля, щоб завдання, яке вийшло з-під контролю, зрештою звільнило машину. |
|
||
|
||
Ці ліміти визначають, що сервер приймає, тож встановлюйте їх відповідно до того, чим ви реально користуєтеся, а не якомога меншими. Якщо ви ніколи не працюєте з відео, ліміт `MAX_VIDEO_DURATION_S` нічого не коштує; якщо ви щодня скануєте документи, не обмежуйте `MAX_PDF_PAGES`.
|
||
|
||
## Що варто пропустити {#what-to-skip}
|
||
|
||
- **Важкі AI-бандли.** Масштабування, відновлення фото й видалення фону потребують GPU або швидкого багатоядерного CPU, а кожен бандл займає 4-5 GB диска. На слабкій машині просто не встановлюйте їх; інструменти, чий бандл відсутній, показують запит на встановлення замість запуску.
|
||
- **Перекодування відео як регулярне навантаження.** Поодинокі перекодування цілком прийнятні (вони просто повільні); постійна черга перекодувань потребує ядер CPU, а не Pi.
|
||
- **Загалом невикористовувані інструменти.** Адміністратор може вимкнути окремі інструменти в Settings, що прибирає їх з інтерфейсу та припиняє реєстрацію їхніх API-маршрутів. Саме по собі це не економить пам'ять, але не дає використовувати спільний невеликий екземпляр для того єдиного навантаження, якого обладнання не витримує.
|
||
|
||
Якщо згодом ви перенесете екземпляр на потужніше обладнання, приберіть ліміти (поверніть їх до `0`), і той самий том даних переїде разом з ним.
|