Self‑hosted public wiki archive with an admin cockpit: Monaco editor, AI chat, webhooks, 2FA, multi‑language UI.
Схема из docker-compose.yml (docker-compose-viz-mermaid): обновить локально — python scripts/update_compose_mermaid_readme.py (нужен Docker); на push CI сам подставит актуальный граф.
Service graph from docker-compose.yml via docker-compose-viz-mermaid. Refresh locally with python scripts/update_compose_mermaid_readme.py (Docker required); CI updates this block when compose or the script changes.
%%{init: {'theme': 'default'}}%%
flowchart TB
Vhekotipgdata([hekoti_pg_data]) x-. /var/lib/postgresql/data .-x hekotipostgres[hekoti-postgres]
Vhekotiredisdata([hekoti_redis_data]) x-. /data .-x hekotiredis[hekoti-redis]
Vhekotiuploads([hekoti_uploads]) x-. /app/public/uploads .-x hekotiapp[hekoti-app]
hekotiapp --> hekotipostgres
hekotiapp --> hekotiredis
hekotipostgres -.- default[/default/]
hekotiredis -.- default
hekotilanguagetool[hekoti-languagetool] -.- default
hekotiapp -.- default
hekotiapp -.- proxynetwork[/proxy-network/]
classDef volumes fill:#fdfae4,stroke:#867a22
class Vhekotipgdata,Vhekotiredisdata,Vhekotiuploads volumes
classDef nets fill:#fbfff7,stroke:#8bc34a
class default,proxynetwork nets
Hekoti is a lightweight, self‑hosted wiki engine for publishing knowledge pages and maintaining them through a modern admin UI.
It’s designed for “public read + private write” deployments: visitors can browse, admins can edit, publish, reorder, and structure pages.
/en/manifest/why → section manifest, page why/agent …, /ask …)marked) + sanitization/[lang]/… routes + JSON dictionaries, admin‑controlled default languageRequires Docker Compose v2.24+.
Zero‑config (defaults live in docker-compose.yml):
docker compose up -d --build
Optional tuning:
cp .env.example .env
# Edit: POSTGRES_*, HEKOTI_ADMIN_*, WEBHOOK_SECRET, etc.
docker compose up -d --build
Migrations: on each hekoti-app start, docker-entrypoint.sh runs scripts/check-prisma-migrations-destructive.cjs, then prisma migrate deploy (unless HEKOTI_SKIP_MIGRATE=1).
Migration safety (git pull / deploy): the check script scans prisma/migrations/*/migration.sql for destructive patterns (DROP DATABASE, DROP SCHEMA, DROP TABLE, DROP TYPE, TRUNCATE). If any match, the container exits before migrate deploy so you can read the diff and back up PostgreSQL. To apply an intentional destructive migration once, set HEKOTI_MIGRATE_ALLOW_DESTRUCTIVE=1 for that deploy only. To disable the guard entirely (not recommended), set HEKOTI_SKIP_DESTRUCTIVE_MIGRATION_CHECK=1. Never run prisma migrate reset against production data.
Telemetry / counters (no SSH): Admin → Settings → HTML / telemetry — paste Yandex.Metrica, Google Analytics (<script>, <meta>, <link>, <noscript>). Use the template buttons, replace IDs, Save.
First admin user / demo pages (seed):
docker compose exec hekoti-app npx --yes tsx prisma/seed.ts
Open: http://localhost:3310
cp .env.example .env
npm install
npm run db:generate
npx prisma migrate dev
npm run db:seed
npm run dev
See .env.example. Most important:
PUBLIC_READ_MODE=true|false — allow guests to readENABLED_LANGUAGES=en,ru,… — UI languages enabledAPP_URL=… — affects cookies and absolute linksHEKOTI_ADMIN_EMAIL / HEKOTI_ADMIN_PASSWORD — bootstrap admin for empty DBWEBHOOK_SECRET / OUTGOING_WEBHOOK_URLSAI_AGENTS_JSON / AI_LINKS_JSONDONATE_LINKS_JSON / CRYPTO_DONATION_JSONGET /api/health — combined probeGET /api/health/live — process upGET /api/health/ready — database SELECT 1Developed and created by @hehestl
https://t.me/hehestl
https://github.com/hehestl
https://t.me/PhiloraBot
Hekoti — лёгкий self‑hosted движок вики: публикуешь страницы знаний и управляешь ими через современную админку.
Проект заточен под режим “публичное чтение + приватное редактирование”: гости читают, админ создаёт, редактирует, публикует и наводит порядок.
/ru/manifest/why → раздел manifest, страница why/agent …, /ask …)marked) + санитайз/[lang]/… + JSON‑словарики, дефолтный язык через настройкиНужен Docker Compose v2.24+.
Запуск без конфигурации (дефолты в docker-compose.yml):
docker compose up -d --build
С настройками:
cp .env.example .env
# Настрой POSTGRES_*, HEKOTI_ADMIN_*, WEBHOOK_SECRET и т.д.
docker compose up -d --build
Миграции: перед деплоем запускается проверка scripts/check-prisma-migrations-destructive.cjs, затем prisma migrate deploy (если не выставлен HEKOTI_SKIP_MIGRATE=1).
Безопасность миграций: скрипт ищет в SQL опасные конструкции (DROP DATABASE/SCHEMA/TABLE/TYPE, TRUNCATE). При совпадении контейнер не применяет миграции — сделайте бэкап БД, разберите diff. Одноразово для осознанного патча: HEKOTI_MIGRATE_ALLOW_DESTRUCTIVE=1. Полностью отключить проверку: HEKOTI_SKIP_DESTRUCTIVE_MIGRATION_CHECK=1 (нежелательно). Не используйте prisma migrate reset на продакшене.
Счётчики без SSH: Админка → Настройки — блок HTML/телеметрия: вставка Яндекс.Метрики, Google Analytics и шаблоны кнопками.
Первый админ / демо‑страницы (seed):
docker compose exec hekoti-app npx --yes tsx prisma/seed.ts
Открыть: http://localhost:3310
cp .env.example .env
npm install
npm run db:generate
npx prisma migrate dev
npm run db:seed
npm run dev
Смотри .env.example. Главное:
PUBLIC_READ_MODE=true|false — разрешить чтение гостямENABLED_LANGUAGES=en,ru,… — включённые языки UIAPP_URL=… — влияет на cookies и абсолютные ссылкиHEKOTI_ADMIN_EMAIL / HEKOTI_ADMIN_PASSWORD — bootstrap админ для пустой БДWEBHOOK_SECRET / OUTGOING_WEBHOOK_URLSAI_AGENTS_JSON / AI_LINKS_JSONDONATE_LINKS_JSON / CRYPTO_DONATION_JSONGET /api/healthGET /api/health/liveGET /api/health/readyРазработано и создано @hehestl
https://t.me/hehestl
https://github.com/hehestl
https://t.me/PhiloraBot