Outline
Outline заменяет Notion и Confluence для командных инструкций и онбординга на своем сервере. Развернули 1.11.0 на Fatmetal Cloud Server, замерили ресурсы и проверили импорт, email-вход и сохранность вложений.
Notion прекратил доступ из России, а Atlassian остановила новые продажи и продления в РФ. Собственная вики позволяет сохранить инструкции без зависимости от этих облаков.
Вердикт
Разбираем бесплатную редакцию Outline Community.
- Техлиду, который собирает регламенты и онбординг вместо разрозненных страниц Notion.
- Команде, которой нужны вложенные документы, поиск и редактирование инструкций в браузере.
- Команде, которая переносит из Notion базы данных и автоматизации.
- Команде, которой гости или прямой импорт Confluence нужны в бесплатной редакции: в Outline эти функции платные.
Как устроить инструкции команды
В Outline страница принадлежит коллекции: например, «Регламенты команды» объединяет онбординг и порядок дежурства. Внутри документа есть заголовки, списки и вложения. Ссылку на инструкцию можно оставить прямо в рабочем обсуждении.
Редактор сохраняет изменения без отдельной кнопки. На стенде текст пережил перезагрузку страницы, а вложение после остановки и запуска стека скачалось с исходным содержимым.
Для двух связанных инструкций откройте контекстное меню документа в боковой панели и выберите Open in split view. Онбординг останется слева, регламент откроется справа.
Это удобная замена разделу документации в Notion или Confluence: сотрудник читает порядок работы и тут же уточняет соседний документ. Коллекцию можно закрыть от остальных участников.
Что изменилось с прошлого разбора
Прежняя статья описывала 1.9.1. В 1.10.0 появились два документа рядом, комментарии для пользователей с правом чтения и перестановка элементов боковой панели.
В 1.11.0 добавлены ручки переноса блоков и импорт Open Knowledge Format, который появился как формат экспорта в 1.10.1. В настройках импорта теперь есть отдельная строка OKF.
В новых релизах исправлялись проверки доступа к импорту, скачиванию и API. Эти записи release notes не имеют присвоенной серьезности. Они не равны опубликованным GHSA: ни один из 26 бюллетеней по указанным диапазонам не затрагивает прежнюю 1.9.1.
Установка по-прежнему требует PostgreSQL и Redis. На свежей 1.11.0 миграции выполнились при старте автоматически: прежнюю отдельную команду миграции из инструкции убрали.
Чем отличается от Notion и Confluence
Сравнивайте стоимость своего сервера для Community с облачными тарифами, которые включают обслуживание у вендора.
| Продукт | Показанная цена | Что получает команда |
|---|---|---|
| Outline Community | Лицензия бесплатна; сервер от 500 руб./мес | Свои документы и вложения, обслуживание своими силами |
| Outline Cloud | $10/мес для 1-10 участников; $79 для 11-100 | Обслуживание у вендора, цена по диапазону участников |
| Notion | Free; Plus от €9,50 за участника/мес | Документы, базы данных и облачные процессы |
| Confluence Cloud | Free до 10; Standard от $5,78 за участника/мес | Корпоративная документация в облаке Atlassian |
Цены показаны на прайсе Outline, Notion и Confluence 16 октября 2026 года. Период оплаты и состав команды меняют счет; у Notion получена EUR-версия страницы.
В своей Community платите за сервер, резервные копии и обслуживание. Считать ее равной платному облаку только по числу мест нельзя: корпоративные возможности продаются отдельно.
Что работает на сервере
Outline на Node.js и TypeScript хранит документы, пользователей и права в PostgreSQL. Redis обслуживает очередь фоновых задач и взаимодействие процессов. Редактор использует ProseMirror и Y.js.
В инструкции пять контейнеров: приложение, база, Redis, Caddy и MailHog. Caddy принимает HTTPS; порт приложения доступен только на localhost. MailHog принимает тестовые письма локально, его интерфейс открывается через SSH-туннель.
Документы и вложения лежат в разных постоянных томах. Пересоздание контейнера приложения их не удаляет. Для восстановления нужны база, файлы и прежние секреты из /opt/outline/.env.
Какой сервер выбрать
Наш стенд - CPU2-RAM4-DISK50: 2 vCPU, 4 ГБ RAM, 50 ГБ диска, Ubuntu 24.04.4, Docker 29.9.1. Этот тариф за 500 руб./мес вместил приложение, зависимости и проверку импорта.
| Что измерили | Результат |
|---|---|
| Память пяти контейнеров в простое | 350 МиБ без файлового кеша |
| Из них Outline | 304 МиБ |
| Пик при импорте и загрузке файла | 408 МиБ |
| Пять образов Docker | 2,63 ГиБ |
| Корневая ФС после сценария | 5,02 ГиБ занято |
| Первый запуск стека с миграциями | Около 48 с |
| Повторный старт всего стека | 18 с |
| Ответ HTML входа через публичный HTTPS | 54 мс до наполнения; 82 мс после |
Загрузили 100 регламентов общим размером 1,6 МиБ и CSV на 4,14 МиБ. База выросла с 11 до 13 МиБ; после работы стек занимал 384 МиБ.
Для такого набора CPU2-RAM4-DISK50 дает запас под ОС, кеш и обновление. Импорт завершился примерно за семь секунд. После повторного запуска документ открылся, а скачанный CSV совпал с исходным.
Проверено на версии v1.11.0, 16 октября 2026. На новых версиях результаты могут отличаться.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe от 450 ₽/мес
Развертывание на Fatmetal Cloud Server
Нужны чистая Ubuntu, доступ SSH с sudo и доменное имя. Сначала запустим локальный приемник почты; затем подключим рабочий SMTP.
Установите Docker
На чистой Ubuntu 24.04 войдите по SSH и выполните
sudo -i. Дальше команды идут от root в одной сессии. Подключите официальный репозиторий Docker:apt-get update apt-get install -y ca-certificates curl install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable' > /etc/apt/sources.list.d/docker.list apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-pluginЗадайте адрес и секреты
Замените
ваш-доменна имя, которое указывает на сервер. На Fatmetal подойдет его IP с дефисами вместо точек и окончанием .fatmetal.net. Откройте входящие 80/443; создайте конфигурацию:install -d -m 0755 /opt/outline cd /opt/outline umask 077 DOMAIN=ваш-домен PG_PASSWORD=$(openssl rand -hex 16) cat > .env <<EOF NODE_ENV=production URL=https://$DOMAIN PORT=3000 FORCE_HTTPS=false SECRET_KEY=$(openssl rand -hex 32) UTILS_SECRET=$(openssl rand -hex 32) PG_PASSWORD=$PG_PASSWORD DATABASE_URL=postgres://outline:$PG_PASSWORD@postgres:5432/outline PGSSLMODE=disable REDIS_URL=redis://redis:6379 FILE_STORAGE=local FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data DEFAULT_LANGUAGE=en_US SMTP_HOST=mailhog SMTP_PORT=1025 SMTP_FROM_EMAIL=outline@$DOMAIN SMTP_SECURE=false EOF chmod 600 .envОпишите пять сервисов
Версия приложения закреплена тегом 1.11.0. Проверки готовности не дают запустить его раньше базы и Redis. Только Caddy получает публичные порты:
cat > compose.yaml <<'YAML' name: outline services: postgres: image: postgres:16-alpine environment: {POSTGRES_USER: outline, POSTGRES_DB: outline, POSTGRES_PASSWORD: "${PG_PASSWORD}"} volumes: ["pgdata:/var/lib/postgresql/data"] restart: unless-stopped healthcheck: {test: ["CMD-SHELL", "pg_isready -U outline -d outline"], interval: 5s, timeout: 3s, retries: 20} redis: image: redis:7-alpine volumes: ["redisdata:/data"] restart: unless-stopped healthcheck: {test: ["CMD", "redis-cli", "ping"], interval: 5s, timeout: 3s, retries: 20} mailhog: image: mailhog/mailhog:v1.0.1 ports: ["127.0.0.1:8025:8025"] restart: unless-stopped YAMLДобавьте приложение и TLS
Допишите тот же compose-файл. Постоянный том сохраняет вложения, Caddy отвечает за сертификат:
cat >> compose.yaml <<'YAML' outline: image: outlinewiki/outline:1.11.0 env_file: .env ports: ["127.0.0.1:3000:3000"] volumes: ["storage:/var/lib/outline/data"] restart: unless-stopped depends_on: postgres: {condition: service_healthy} redis: {condition: service_healthy} healthcheck: {test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/_health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"], interval: 10s, timeout: 5s, retries: 20} caddy: image: caddy:2.11.7 ports: ["80:80", "443:443"] volumes: ["./Caddyfile:/etc/caddy/Caddyfile:ro", "caddy_data:/data", "caddy_config:/config"] restart: unless-stopped depends_on: {outline: {condition: service_healthy}} volumes: {pgdata: {}, redisdata: {}, storage: {}, caddy_data: {}, caddy_config: {}} YAML printf '%s {\n reverse_proxy outline:3000\n}\n' "$DOMAIN" > CaddyfileПоднимите стек
Скачайте образы и дождитесь готовности. Миграции пустой базы выполняются автоматически. Первый pull на стенде занял около 44 секунд; после готовности дайте Caddy 15 секунд на выдачу сертификата:
docker compose config --quiet docker compose pull docker compose up -d --wait --wait-timeout 240 sleep 15 curl -I https://ваш-домен
Откройте HTTPS-адрес сразу после запуска. В Create workspace укажите название пространства, имя и email администратора, нажмите Continue. Первый вход проходит без письма. Создайте коллекцию через New collection и страницу через New doc.
Для повторного входа нажмите Continue with Email, введите тот же email и выберите Sign In. На своем компьютере откройте туннель:
ssh -L 8025:127.0.0.1:8025 пользователь@ваш-доменВ браузере откройте http://localhost:8025, найдите письмо и перейдите по ссылке в том же браузере, где запросили вход. Это локальная проверка: MailHog не доставляет письма сотрудникам.
Как подключить почту команды
В /opt/outline/.env замените настройки локального приемника параметрами своего SMTP. Сервер, отправителя и учетку выдаст ваш почтовый сервис; для порта 587 используйте STARTTLS:
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USERNAME=ваш-логин
SMTP_PASSWORD=ваш-пароль
SMTP_FROM_EMAIL=wiki@example.com
SMTP_SECURE=false
SMTP_TLS_REJECT_UNAUTHORIZED=trueПримените изменения и запросите новое письмо входа:
cd /opt/outline
docker compose up -d --force-recreate outlineНа стенде Outline отправил письмо через SMTP с проверкой сертификата, оно дошло в настоящий ящик и открыло рабочее пространство. Старую ссылку повторно не используйте: запросите новую в форме входа.
Где может сломаться
Причина. Для email-входа важна браузерная сессия, запросившая письмо. Перенос ссылки в другой контекст теряет cookie проверки.
Решение. Вернитесь в исходный браузер, снова нажмите Continue with Email и откройте свежую ссылку там же.
Причина. На стенде первый запрос пришел раньше выдачи сертификата Caddy.
Решение. Посмотрите журнал и повторите проверку после выдачи:
cd /opt/outline
docker compose logs --tail=30 caddy
curl -I https://ваш-доменБазовая диагностика приложения: docker compose ps и docker compose logs --tail=50 outline. В готовом стеке PostgreSQL, Redis и Outline отмечены healthy.
Копирование, восстановление и обновление
В одной root-сессии остановите запись приложения. Сохраните дамп, файловый том и конфигурацию; затем верните приложение в работу. Каталог копии содержит секреты, доступ к нему должен оставаться закрытым.
cd /opt/outline
umask 077
mkdir -p backup
docker compose stop outline
docker compose exec -T postgres pg_dump -U outline -Fc outline > backup/db.dump </dev/null
docker compose cp -a outline:/var/lib/outline/data/. backup/files
cp .env compose.yaml Caddyfile backup/
docker compose start outlineСохраните копию за пределами сервера. На своем компьютере подставьте выданное имя SSH-пользователя и выполните:
ssh пользователь@ваш-домен 'sudo tar -C /opt/outline -czf - backup' > outline-backup.tgzВосстановление на этом же стеке заменяет текущую базу копией. Остановите приложение, восстановите файлы и дамп, затем проверьте документ и скачайте вложение:
cd /opt/outline
docker compose stop outline
cp backup/.env .env
docker compose cp -a backup/files/. outline:/var/lib/outline/data/
docker compose exec -T postgres pg_restore -U outline -d outline --clean --if-exists < backup/db.dump
docker compose start outlineДля обновления сначала сделайте такую копию. Укажите выбранный тег Outline в compose.yaml, затем выполните:
cd /opt/outline
docker compose pull outline
docker compose up -d --wait --wait-timeout 240
docker compose logs --tail=30 outlineСекреты .env при обновлении сохраняйте. После запуска откройте прежний документ и вложение. Дамп без файлового тома не восстанавливает вложения.
Уязвимости прошлых версий
Версия 1.11.0 из инструкции содержит исправления перечисленных бюллетеней. Если установлена затронутая версия, сохраните копию и обновите тег по командам выше. Прежняя проверенная 1.9.1 уже новее всех указанных исправлений.
| CVE / GHSA | Уровень | Затронуты | Исправлено | Что может случиться |
|---|---|---|---|---|
| CVE-2026-33640 | critical | 0.86.0-1.6.0 | 1.6.0 | Обход rate limit позволял подбирать email OTP и захватывать учетные записи. |
| CVE-2026-41649 | high | >= 0.86.0, < 1.7.0 | 1.7.0 | Создание share позволяло раскрыть чужой приватный документ, в том числе другого workspace. |
| CVE-2026-54573 | high | <= 1.7.1 | 1.8.0 | Разбор пути запроса позволял обходить ограничения scopes API-ключа или OAuth-токена. |
| CVE-2026-43886 | high | 0.84.0-1.6.1 | 1.7.0 | Ошибка проверки OAuth scopes позволяла добавить wildcard и расширить доступ к API. |
| CVE-2024-40626 | high | <v0.77.3 | v0.77.3 | Ошибка сериализации редактора ProseMirror допускала stored XSS в документах. |
| GHSA-c8xf-3j86-7686 | high | <= v1.0.1 | 1.1.0 | Несогласованные проверки доступа при шаринге документов допускали повышение привилегий. |
| GHSA-fp2g-2283-rwvj | high | < 0.87.0 | 0.87.0 | Соседний домен мог инициировать изменяющие запросы от имени пользователя (CSRF). |
| CVE-2026-24901 | high | <1.4.0 | 1.4.0 | Участник мог читать и присваивать удаленные приватные черновики другого пользователя. |
| CVE-2026-43888 | high | <1.7.0 | 1.7.0 | Слишком длинный путь ZIP-записи позволял записать файл вне каталога импорта. |
| GHSA-mx2c-3g2x-5m9m | high | <= v1.0.1 | 1.1.0 | Заблокированный пользователь сохранял доступ к обновлениям документов через WebSocket. |
| CVE-2026-43887 | high | 0.84.0-1.6.1 | 1.7.0 | Ссылка в упоминании комментария могла содержать JavaScript и приводить к stored XSS. |
| GHSA-33jq-x32c-3ccw | medium | <= 1.7.1 | 1.8.0 | Webhook продолжал отправлять документы после удаления создавшего его администратора. |
| CVE-2026-28506 | medium | <1.5.0 | 1.5.0 | Журнал действий раскрывал метаданные приватных черновиков и удаленных документов. |
| CVE-2026-25062 | medium | <1.4.0 | 1.4.0 | Обход пути при JSON-импорте позволял администратору читать файлы сервера. |
| GHSA-c43v-wwv4-9mcc | medium | 1.7.0 | 1.8.0 | Viewer мог публиковать документы в закрытые коллекции через MCP. |
| CVE-2025-58351 | medium | v0.72.0 | v0.84.0 | Локальные вложения позволяли обходить CSP и Content-Type для исполнения скриптов. |
| CVE-2026-43890 | medium | 0.82.1-1.7.0 | 1.7.1 | Создание подписки с двумя ID позволяло получать уведомления о чужом документе. |
| GHSA-h9mv-vg9r-8c7c | medium | 0.53.0-0.87.3 | v1.0.0 | IDOR журнала действий раскрывал события без проверки доступа к отдельным объектам. |
| GHSA-hqmp-r5jw-265r | medium | <1.7.0 | 1.7.0 | Подделанный размер вложения обходил лимиты и искажал учет локального хранилища. |
| GHSA-jfhx-7phw-9gq3 | medium | < 0.87.0 | 0.87.0 | Webhooks и загрузки по URL позволяли обращаться к внутренним HTTP(S)-ресурсам (SSRF). |
| CVE-2026-44695 | medium | <1.7.1 | 1.7.1 | Подмена Slack OAuth state связывала учетную запись жертвы с чужой Slack-идентичностью. |
| GHSA-pp65-6cc2-4mx9 | medium | 1.6.0-1.7.1 | 1.8.0 | Точный поиск в MCP раскрывал метаданные недоступного документа. |
| GHSA-rg3q-3m93-rq7m | medium | <1.7.0 | 1.7.0 | Непроверенный JWT в rate limiter позволял блокировать API для выбранного пользователя. |
| CVE-2026-43889 | medium | <1.7.0 | 1.7.0 | Смешанные ID коллекции и документа позволяли опубликовать документ без права шаринга. |
| GHSA-x92r-w4r2-vwmf | medium | < 1.9.0 | 1.9.0 | Участник мог получить секретный URL Slack webhook через API интеграций. |
| GHSA-wgqc-257g-78v3 | low | 0.69.0-1.8.0 | 1.8.1 | Сравнение токенов отписки допускало атаку по времени на настройки уведомлений. |
Что подключить к вики
- SMTP доставляет ссылки входа и уведомления в рабочие ящики.
- Keycloak или Authentik служат провайдерами OIDC, если в компании уже есть единая учетная запись.
- Система резервного копирования забирает каталог backup за пределы сервера: база и файлы нужны вместе.
Для переноса Markdown используйте Settings → Import. На стенде ZIP со ста регламентами превратился в документы отдельной коллекции. По завершении появилось состояние Completed.
Когда это НЕ ваш выбор
Нужны базы данных и автоматизации Notion
Outline решает задачу документов. Замена всей рабочей системы Notion потребует других инструментов.
Нужен русский интерфейс
В живом списке 26 языков 1.11.0 русского нет. Русский текст документов работает, но меню останется английским.
Нужны корпоративные возможности Community
Гости, SAML, аудит, AI-ответы и прямой импорт Confluence относятся к платным редакциям. В интерфейсе импорта Confluence отмечен Enterprise.
Нужен привычный пароль или совсем простой заметочник
В выбранном сценарии повторный вход идет через email-ссылку. Ради нескольких личных заметок PostgreSQL, Redis и почтовый приемник усложняют обслуживание.
Планируете продавать чужим компаниям доступ к Outline
BUSL-1.1 разрешает внутреннее использование, но запрещает коммерческий Document Service для третьих лиц. Это source-available, не лицензия OSI.
Частые вопросы
Нужен ли отдельный SSO для старта?
Нет. Первый администратор создается в Create workspace, последующие входы возможны по email-ссылке.
Где лежат документы и файлы?
В томах outline_pgdata и outline_storage. Копируйте оба вместе с .env.
Как открыть MailHog безопасно?
Через SSH-туннель из инструкции. Его порт 8025 привязан к localhost сервера.
Нужна отдельная команда миграции?
На свежей 1.11.0 схема создается при старте автоматически. Дождитесь healthy у приложения.
Как читать инструкцию рядом с регламентом?
Правый клик по соседнему документу в sidebar, затем Open in split view.
Итог
Outline собирает инструкции и онбординг в собственную командную вики. В 1.11.0 два документа можно держать рядом, а Markdown-регламенты импортировать целой коллекцией.
Для проверенного набора подошел CPU2-RAM4-DISK50. Начните с двух рабочих инструкций и проверьте повторный вход по почте: именно этот путь понадобится сотруднику после закрытия первой сессии.
Рекомендуемая конфигурация для установки:
2 vCPU · 4 ГБ RAM · 50 ГБ NVMe
Не хотите устанавливать вручную?
Запустите Outline на этой конфигурации автоматически - от 450 ₽/мес.
Этот стек у нас запущен на тарифе CPU2-RAM4-DISK50. Нашли баг в гайде - напишите, поправим в течение дня.