Полное руководство по установке Wiki Outline на Ubuntu 22.04 без Docker

Решил я повторить установку Wiki Outline по мотивам «Вебинар «База знаний с AI: создаем корпоративную Wiki в облаке»». На вебинаре мне в принципе эта Wiki понравилась, но, как говорится, пока сам не попробуешь — верить никому на слово нельзя.

Итак, пожалуй, приступим к установке и настройке Wiki Outline. Исходить будем из того, что у нас уже есть Ubuntu 22.04.5 LTS и база данных PostgreSQL (в примере используется версия 18, но подойдёт и более свежая). Обратите внимание, что мы будем устанавливать и настраивать Wiki Outline без использования Docker — это даёт больше контроля над окружением и может быть полезно для тех, кто предпочитает классическую установку.

Что такое Wiki Outline?

Wiki Outline — это современная, быстрая и красивая система для создания корпоративных баз знаний. Она поддерживает Markdown, совместное редактирование в реальном времени, интеграцию с AI (например, для генерации текста), а также имеет удобный поиск и систему разрешений. Outline идеально подходит для команд, которые хотят хранить документацию, инструкции, заметки и другую информацию в одном месте.

Подготовка окружения для Wiki Outline

Прежде чем приступить к установке самого Outline, необходимо подготовить сервер: установить веб-сервер, базу данных, кэш и необходимые инструменты разработки. Каждый из этих компонентов играет свою роль в работе приложения.

Установка Nginx и Certbot

Nginx будет выступать в роли reverse-proxy — он будет принимать запросы от пользователей по протоколу HTTPS и перенаправлять их к нашему приложению Outline, которое работает на локальном порту 3000. Certbot — это клиент для автоматического получения и обновления SSL-сертификатов от Let’s Encrypt.

# apt-get install nginx python3-certbot python3-certbot-nginx

Установка Redis

Redis — это высокопроизводительное хранилище данных в памяти, которое Outline использует для кэширования сессий, очередей задач и временных данных. Без Redis приложение будет работать медленнее и может терять данные при перезапуске.

# apt-get install redis-server

Настроим автозапуск и запустим Redis:

# systemctl enable redis-server.service
# systemctl start redis-server.service

Настраиваем лимиты по памяти для Redis. Редактируем конфиг Redis:

# nano /etc/redis/redis.conf

Найдите параметр maxmemory. Установите лимит, чтобы Redis не съел всю память сервера (например, 64 МБ или 128 МБ):

maxmemory 64mb

Выберите политику вытеснения (eviction policy). Для кэширования в нашем случае лучше всего подходит allkeys-lru:

maxmemory-policy allkeys-lru

Это значит: когда память кончится, Redis удалит наименее используемые ключи.

Перезапустите Redis:

# systemctl restart redis-server

Установка Node.js и Yarn

Outline написан на JavaScript (Node.js), поэтому нам понадобится среда выполнения Node.js и менеджер пакетов Yarn для сборки проекта. Рекомендуемые версии: Node.js 20 или 22, Yarn >= 4.

Установка Node.js (версия 22):

# curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
# apt install nodejs -y
# node -v

Установка Yarn (через corepack):

# corepack enable
# yarn set version stable
# yarn install

Проверка версии Yarn:

# yarn --version

Установка и тестовый запуск Wiki Outline

Теперь, когда все зависимости готовы, можно загрузить исходный код Outline и подготовить его к работе.

Загрузка и распаковка

Скачаем последний стабильный релиз с GitHub (на момент написания это v1.10.0) и распакуем его:

# cd /tmp/
# wget https://github.com/outline/outline/archive/refs/tags/v1.10.0.tar.gz
# tar -xvf ./v1.10.0.tar.gz
# mv ./outline-1.10.0/ /opt/outline

Подготовка к сборке

Создадим пользователя outline, от имени которого будет запускаться приложение, и назначим ему права на каталог:

# useradd outline
# chown -R outline:outline /opt/outline
# mkdir /home/outline/
# chown -R outline:outline /home/outline/

Переключимся на этого пользователя и перейдём в каталог проекта:

# su outline -s /bin/bash
$ cd /opt/outline

Скопируем файл окружения для разработки в production-конфигурацию:

 $ cp ./.env.development ./.env.production

Настройка окружения

Отредактируем файл .env.production — это основной конфигурационный файл Outline. В нём нужно указать параметры подключения к базе данных, Redis, почтовому серверу и другие настройки. Пример минимальной конфигурации:

NODE_ENV=production
URL=http://127.0.0.1:3000
FORCE_HTTPS=false

SECRET_KEY=xxxKEYxxx
UTILS_SECRET=xxxKEYxxx

DATABASE_URL=postgres://xxxUSERxxx:xxxPASSWORDxxx@127.0.0.1:5432/outline_db
REDIS_URL=redis://127.0.0.1:6379

SMTP_FROM_EMAIL=hello@example.com

DEVELOPMENT_UNSAFE_INLINE_CSP=false
LOG_LEVEL=error

Пояснения:
— SECRET_KEY и UTILS_SECRET — секретные ключи, сгенерируйте их случайным образом (например, с помощью openssl rand -hex 32).
— DATABASE_URL — строка подключения к PostgreSQL. Замените xxxUSERxxx, xxxPASSWORDxxx и outline_db на свои данные.
— REDIS_URL — адрес Redis (по умолчанию локальный).
— SMTP_FROM_EMAIL — email, от которого будут отправляться письма (например, для приглашений). Можно временно оставить заглушку.

Сборка проекта

Теперь установим зависимости и соберём production-версию:

$ NODE_ENV=production && yarn install --immutable
$ NON_INTERACTIVE=1 NODE_ENV=production && yarn build

Примечание: Флаг —immutable гарантирует, что версии зависимостей будут взяты из lock-файла, что обеспечивает воспроизводимость сборки.

Тестовый запуск

Перед тем как настраивать systemd, проверим, что всё работает. Установим переменную окружения для PostgreSQL и запустим приложение:

$ export PGSSLMODE=disable
$ NODE_ENV=production yarn start

Миграции базы данных применятся автоматически при первом запуске. Если всё прошло успешно, вы увидите в консоли сообщение о том, что сервер слушает порт 3000.

Подготовка домена и reverse-proxy для Wiki Outline

Чтобы приложение было доступно по красивому домену и через защищённое соединение, настроим Nginx как reverse-proxy и получим SSL-сертификат.

Получение SSL-сертификата

Сначала создайте DNS-запись типа A, указывающую на IP вашего сервера (у вашего DNS-провайдера). Затем выполните команду для получения сертификата:

# certbot certonly --nginx -d outline.interlan.xyz

Замените outline.interlan.xyz на ваш реальный домен.

Конфигурация Nginx

Создадим файл конфигурации для нашего домена, например /etc/nginx/sites-available/outline:

map $http_upgrade $connection_upgrade {
 default upgrade;
 '' close;
 }

server {

    listen 80;
    server_name www.outline.interlan.xyz outline.interlan.xyz;
    return 301 https://$server_name$request_uri;

}

server {

    listen 443      ssl http2;

server_name www.outline.interlan.xyz outline.interlan.xyz;

access_log  /var/log/nginx/outline.interlan.xyz-access.log;
error_log  /var/log/nginx/outline.interlan.xyz-error.log warn;

ssl_certificate /etc/letsencrypt/live/outline.interlan.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/outline.interlan.xyz/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

client_max_body_size 64M;
fastcgi_buffers 64 4K;

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript;

if ($host ~ ^www\.(?<domain>.+)$) {
  return  301 $scheme://$domain$request_uri;
}

location / {

  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection $connection_upgrade;

  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header Host $http_host;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Scheme $scheme;
  proxy_pass http://127.0.0.1:3000;
}

}

Важно: В файле .env.production нужно изменить параметры URL и FORCE_HTTPS на реальные:

URL=https://outline.interlan.xyz
FORCE_HTTPS=true

После этого перезапустите Nginx:

# ln -s /etc/nginx/sites-available/outline /etc/nginx/sites-enabled/
# nginx -t
# systemctl reload nginx

Теперь откройте браузер и перейдите по адресу https://outline.interlan.xyz. Если всё настроено правильно, вы увидите приветственную страницу Outline.

Настройка SystemD

Чтобы Outline автоматически запускался при старте системы и работал как служба, создадим unit-файл systemd.

Создайте файл /lib/systemd/system/outline.service со следующим содержимым:

[Unit]
Description=Wiki Outline
After=syslog.target

[Service]

WorkingDirectory=/opt/outline
User=outline
Environment="PGSSLMODE=disable"
ExecStart=/usr/bin/yarn start

[Install]
WantedBy=multi-user.target

Активируем и запускаем службу:

# systemctl enable outline
# systemctl start outline

Проверьте статус:

# systemctl status outline

Если всё в порядке, служба будет работать и автоматически запускаться после перезагрузки сервера.

Заключение

На этом установка Wiki Outline завершена. Вы можете переходить к настройке: создавать учётные записи, настраивать интеграции, добавлять коллекции и наполнять базу знаний. Outline предоставляет множество возможностей, включая поддержку Markdown, вложения, поиск по тексту и даже AI-помощника.

Если у вас возникли вопросы или вы столкнулись с ошибками, проверьте логи службы (journalctl -u outline) и убедитесь, что все переменные окружения указаны верно. Удачи в создании вашей корпоративной вики!

Похожие записи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Nextcloud — отличное решение для хранения файлов, но управление пользователями вручную становится головной болью при масштабировании. Keycloak позволяет централизовать аутентификацию, обеспечивая безопасность, поддержку MFA (двухфакторной аутентификации) и удобный вход через…

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Полное руководство по установке Wiki Outline на Ubuntu 22.04 без Docker

Полное руководство по установке Wiki Outline на Ubuntu 22.04 без Docker

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах