Русский
Self-hosted вики на SQLite (один бинарник)
Если нужна self-hosted вики без поднятия Postgres и Redis, trip2g работает как один бинарник Go на одном файле SQLite. Вы пишете в Obsidian, синхронизируете — и заметки отдаются как вики с полнотекстовым поиском, контролем доступа и встроенным MCP-эндпоинтом. Эта страница честно обозревает распространённые self-hosted вики, а затем показывает установку из одного бинарника.
Почему вес стека важен
Трение большинства self-hosted вики не в самой вики, а во всём, что она тянет за собой. Wiki.js хочет Postgres. Outline хочет Postgres, Redis и S3. Даже небольшая командная вики может превратиться в многоконтейнерное развёртывание со своей историей бэкапа и обновления на каждый сервис. На маленьком VPS это реальные накладные расходы, и каждый лишний сервис — ещё одна вещь, которая ломается в два часа ночи.
SQLite меняет расчёт. Вся база — один файл. Бэкап вики — это копирование этого файла (или его стриминг через Litestream). Нет отдельного демона базы, который нужно запускать, патчить и тюнить. Для личной или небольшой командной вики это обычно верное количество механики.
Варианты, честно
| Вики | Стек | База данных | Редактор | Кому подходит |
|---|---|---|---|---|
| DokuWiki | PHP | плоские файлы, без БД | вики-разметка | крошечные установки, минимум зависимостей |
| BookStack | PHP | MySQL/MariaDB | WYSIWYG | командам, которым нужна структура книг/глав |
| Wiki.js | Node | Postgres (или др.) | markdown/WYSIWYG | функциональным командным вики |
| Outline | Node | Postgres + Redis + S3 | блочный редактор | документам в стиле Notion |
| trip2g | один бинарник Go | SQLite | Obsidian | авторам Obsidian, которым нужна живая запрашиваемая вики |
Каждый из остальных заслуживает своего места. DokuWiki — самый лёгкий, если принять его разметку и устаревший вид. Иерархия полок/книг/страниц BookStack отлична для структурированных руководств. Wiki.js — самая функциональная командная вики. Outline ближе всех к ощущению Notion, если можете держать его стек. Выбирайте trip2g, когда источник истины — хранилище Obsidian и вы хотите, чтобы то же хранилище было вики, доступной для поиска людьми и агентами, на минимуме инфраструктуры.
Что даёт trip2g
- Один бинарник, один файл. Бинарник
trip2gвстраивает все фронтенд-ассеты; единственные зависимости хоста —gitи CA-сертификаты. Состояние живёт в одной базе SQLite. - Obsidian как редактор. Пишете в привычном редакторе; вики-ссылки и frontmatter переносятся. Никакой веб-формы.
- Поиск встроен. Полнотекстовый (BM25 с морфологией) работает без настройки; семантический — опционально, если добавите ключ эмбеддингов.
- Контроль доступа. Заметки закрыты по умолчанию; ставьте
free: true, чтобы опубликовать, а остальное закройте подписчиками или командой. См. контроль доступа. - Запросы от агентов. Та же вики — это MCP-эндпоинт, так что AI-инструменты команды могут искать по ней.
- HTTPS из коробки. Бинарник сам берёт Let's Encrypt, реверс-прокси для одного сайта не нужен.
Установка (один бинарник)
Полное руководство — в self-hosted развёртывании; вкратце:
-
Получите бинарник. Скачайте с GitHub Releases или извлеките из Docker-образа:
docker create --name tmp ghcr.io/trip2g/trip2g && \ docker cp tmp:/trip2g /usr/local/bin/trip2g && \ docker rm tmp sudo chmod +x /usr/local/bin/trip2g -
Поставьте две зависимости:
apt-get update && apt-get install -y git ca-certificates -
Настройте
/etc/trip2g.env: домен, путь к SQLite и сгенерированные секреты. Ключевые строки:ACME_DOMAIN=wiki.example.com PUBLIC_URL=https://wiki.example.com DB_FILE=/var/lib/trip2g/data.sqlite3 STORAGE_BACKEND=local JWT_SECRET=<openssl rand -hex 32> DATA_ENCRYPTION_KEY=<openssl rand -hex 16> OWNER_EMAIL=you@example.com -
Запустите под systemd. Бинарник слушает 443 с TLS и редиректит 80. Полный unit-файл — в self-hosted.
-
Проверьте:
curl -I https://wiki.example.com/Ожидается
HTTP/2 200с валидным сертификатом Let's Encrypt. Затем войдите поOWNER_EMAILи подключите Obsidian по началу работы.
История бэкапа
Поскольку база — один файл, бэкап прост, и эта простота и есть смысл:
- Снапшоты.
SIMPLE_BACKUP=trueпишет периодические бэкапы SQLite в объектное хранилище. - Непрерывная репликация. Litestream стримит базу в любое S3-совместимое хранилище с интервалом в секунду; в каталоге
infra/есть готовый конфиг. См. self-hosted.
Никакого pg_dump, никакой синхронизации дампа базы с дампом файлового хранилища. Один файл и, по желанию, один стрим.
Честные компромиссы
- SQLite — однопишущий. Для личной или небольшой командной вики это не проблема: чтения отдают заранее отрендеренный HTML за единицы миллисекунд независимо от размера хранилища (см. производительность). Под большую нагрузку у trip2g есть свой ответ на масштабирование — read-replica (LiteFS плюс проброс записи на лидера): реплика отдаёт чтения локально, а записи форвардит на лидера, вдобавок к непрерывной репликации Litestream. Клиент-серверная база всё же масштабируется дальше при экстремальной конкурентной записи, так что учтите это, если она ожидается.
- Написание — markdown в Obsidian. Если контрибьюторам нужен браузерный WYSIWYG, BookStack или Wiki.js им подойдут лучше.
- Это живой сервер. DokuWiki на плоских файлах или статический генератор требуют ещё меньше, если динамика вам вообще не нужна. trip2g оправдывает сервер тем, что даёт вход, пейвол и MCP-эндпоинт, которых у статики нет.
Выбирайте trip2g, когда вики начинается в Obsidian и вы хотите её живой, доступной поиску, с контролем доступа и запрашиваемой агентами — на одном бинарнике и одном файле.
Ещё по теме
- Self-hosted развёртывание — полные руководства по одному бинарнику и Docker Compose
- Начало работы — подключите Obsidian и опубликуйте первые заметки
- MCP-сервер — дайте агентам запрашивать вики
- Как работает поиск — полнотекстовый и семантический поиск
- Бэкапы — снапшоты и репликация Litestream