Установка и Настройка Outline Wiki на VPS: Полный Гайд для Экспертов
TL;DR
В этом подробном руководстве мы шаг за шагом настроим Outline Wiki — современную, удобную и самохостируемую базу знаний — на вашем виртуальном приватном сервере (VPS). Вы узнаете, как подготовить сервер, установить все необходимые компоненты (Docker, PostgreSQL, Redis), развернуть Outline, обеспечить его безопасность с помощью HTTPS через Caddy, а также настроить резервное копирование и обслуживание. К концу гайда у вас будет полностью функционирующая и защищенная вики для вашей команды или личных нужд.
- Полная установка Outline Wiki с использованием Docker Compose.
- Настройка безопасного доступа через HTTPS с автоматическими сертификатами Caddy.
- Оптимальные требования к VPS и выбор провайдера.
- Базовая защита сервера с Fail2ban и UFW.
- Настройка автоматического резервного копирования данных Outline.
- Советы по устранению неполадок и обслуживанию системы.
Что мы настраиваем и зачем
Мы будем устанавливать и настраивать Outline Wiki — открытую, современную и интуитивно понятную базу знаний, предназначенную для командной работы. Outline позиционируется как альтернатива Notion, Confluence или Google Docs, но с акцентом на самохостинг и полный контроль над данными. Это идеальное решение для разработчиков, стартапов и небольших команд, которым нужна централизованная платформа для документации, заметок, протоколов совещаний и обмена знаниями.
В итоге вы получите полностью функциональную вики, доступную по собственному доменному имени, где ваша команда сможет совместно создавать, редактировать и организовывать информацию. Outline Wiki предлагает чистый пользовательский интерфейс, поддержку Markdown, интеграцию с Slack (или другими мессенджерами), а также мощный поиск, что делает её отличным инструментом для повышения продуктивности и сохранения корпоративных знаний.
На рынке существует множество альтернатив, как облачных (Notion, Confluence Cloud, Coda), так и самохостируемых (Wiki.js, BookStack, DokuWiki). Облачные решения удобны тем, что не требуют настройки и обслуживания сервера, но вы привязаны к провайдеру, его ценовой политике и политике безопасности данных. Самохостируемые решения, такие как Outline на VPS, дают вам полный контроль над вашими данными, безопасностью и производительностью. Это особенно важно для проектов, где конфиденциальность информации критична, или для команд, которые хотят избежать ежемесячных платежей за SaaS-сервисы. Вы самостоятельно управляете инфраструктурой, что требует определенных технических знаний, но дает максимальную гибкость и независимость.
Какой VPS-конфиг нужен под эту задачу
Выбор подходящего VPS для Outline Wiki зависит от предполагаемой нагрузки, количества пользователей и объема хранимых данных. Outline — достаточно ресурсоемкое приложение, особенно если у вас много пользователей и активно используются поисковые индексы.
Минимальные требования
- Процессор (CPU): 1-2 ядра. Для небольших команд (до 5-10 активных пользователей) одного ядра будет достаточно. При активной работе и большем числе пользователей рекомендуется 2 ядра.
- Оперативная память (RAM): Минимум 2 ГБ. Outline, PostgreSQL и Redis вместе потребляют значительный объем RAM. 2 ГБ — это абсолютный минимум, 4 ГБ — комфортный старт для небольшой команды.
- Диск (SSD): 20-40 ГБ SSD. SSD критичен для производительности базы данных и быстрого доступа к файлам. 20 ГБ хватит для системы и начального объема данных, но с ростом контента потребуется больше. Рекомендуется 40 ГБ для запаса.
- Сеть: 100 Мбит/с или 1 Гбит/с. Стабильный канал с достаточной пропускной способностью важен для быстрой загрузки страниц и обмена данными.
Конкретный VPS-план под задачу
Для большинства небольших и средних команд (до 20-30 активных пользователей) оптимальным будет VPS со следующими характеристиками:
- 2x vCPU
- 4 ГБ RAM
- 50-80 ГБ NVMe/SSD диска
- 100 Мбит/с - 1 Гбит/с сетевой порт
Найти VPS с указанными характеристиками не составит труда у большинства провайдеров. Важно выбирать надежного поставщика с хорошей репутацией и поддержкой.
Когда нужен dedicated, а не VPS
Dedicated сервер может потребоваться в нескольких случаях:
- Очень большая команда: Если у вас сотни или тысячи активных пользователей, и Outline становится центральным хранилищем знаний для всей компании.
- Высокая нагрузка: Интенсивное использование, частые поисковые запросы, большой объем прикрепленных файлов и изображений.
- Интеграция с другими сервисами: Если Outline будет частью более крупной инфраструктуры с множеством зависимостей и высокой потребностью в ресурсах.
- Требования к безопасности и изоляции: Dedicated сервер обеспечивает полную изоляцию от "соседей" по железу, что может быть критично для определенных видов данных.
В большинстве случаев для Outline Wiki VPS будет более чем достаточно и экономически выгоднее.
Локация: на что влияет
Выбор локации сервера влияет на несколько факторов:
- Задержка (Latency): Чем ближе сервер к основным пользователям, тем меньше задержка и быстрее отклик приложения. Если ваша команда распределена по разным континентам, выберите локацию, которая будет оптимальной для большинства пользователей.
- Законодательство: Расположение сервера определяет, под юрисдикцию какой страны подпадают ваши данные. Это может быть критично для соблюдения GDPR, HIPAA или других регуляций.
- Стоимость: Цены на VPS могут незначительно отличаться в зависимости от локации.
Обычно рекомендуется выбирать локацию, которая географически близка к большинству ваших пользователей, чтобы обеспечить наилучший пользовательский опыт.
Подготовка сервера
Перед установкой Outline Wiki необходимо выполнить базовую настройку свежего VPS, чтобы обеспечить безопасность и подготовить среду для дальнейшего развертывания. Мы будем использовать Ubuntu Server 24.04 LTS.
1. Подключение по SSH
Подключитесь к вашему серверу как пользователь root, используя IP-адрес, предоставленный вашим провайдером:
ssh root@ВАШ_IP_АДРЕС
Если вы используете пароль, введите его. Настоятельно рекомендуется использовать SSH-ключи для большей безопасности.
2. Обновление системы
Обновите список пакетов и установленные пакеты до актуальных версий:
sudo apt update && sudo apt upgrade -y
Это гарантирует, что у вас будут последние исправления безопасности и стабильные версии всех системных компонентов.
3. Создание нового пользователя с правами sudo
Работать под root небезопасно. Создадим нового пользователя и предоставим ему права sudo.
adduser outlineadmin
Следуйте инструкциям, чтобы задать пароль и информацию о пользователе. Затем добавьте пользователя в группу sudo:
usermod -aG sudo outlineadmin
Теперь вы можете переключиться на нового пользователя:
su - outlineadmin
В дальнейшем все команды, требующие прав суперпользователя, будут выполняться с префиксом sudo.
4. Настройка SSH-ключей для нового пользователя
Если вы еще не используете SSH-ключи, создайте их на своей локальной машине (если у вас их нет):
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Затем скопируйте публичный ключ на сервер для нового пользователя outlineadmin:
ssh-copy-id outlineadmin@ВАШ_IP_АДРЕС
Теперь вы можете войти без пароля. После проверки рекомендуется отключить вход по паролю для root и для всех пользователей в файле /etc/ssh/sshd_config. Найдите строки:
sudo nano /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
Сохраните изменения (Ctrl+O, Enter) и выйдите (Ctrl+X). Перезапустите службу SSH:
sudo systemctl restart sshd
Обязательно проверьте, что вы можете войти по SSH-ключу, прежде чем закрывать текущую сессию.
5. Настройка брандмауэра (UFW)
UFW (Uncomplicated Firewall) — это удобная утилита для управления iptables. По умолчанию он выключен.
sudo apt install ufw -y # Установка UFW, если не установлен
sudo ufw allow OpenSSH # Разрешаем SSH, чтобы не потерять доступ
sudo ufw allow http # Разрешаем HTTP (порт 80)
sudo ufw allow https # Разрешаем HTTPS (порт 443)
sudo ufw enable # Включаем брандмауэр
sudo ufw status verbose # Проверяем статус
Вам будет предложено подтвердить включение UFW. Введите y. Теперь ваш сервер защищен от нежелательного трафика, кроме SSH, HTTP и HTTPS.
6. Установка Fail2ban
Fail2ban сканирует логи и автоматически блокирует IP-адреса, показывающие признаки вредоносных атак (например, многократные неудачные попытки входа по SSH).
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Создайте файл конфигурации для Fail2ban:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
В файле jail.local можно настроить параметры. Убедитесь, что секция [sshd] активна (enabled = true) и, при желании, измените bantime (время блокировки) и maxretry (количество попыток).
[DEFAULT]
bantime = 10m
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Сохраните изменения и перезапустите Fail2ban:
sudo systemctl restart fail2ban
sudo fail2ban-client status # Проверьте статус
sudo fail2ban-client status sshd # Проверьте статус для SSH
Теперь ваш сервер имеет базовую защиту от brute-force атак.
Установка ПО — пошагово
Outline Wiki лучше всего разворачивать с использованием Docker и Docker Compose. Это обеспечивает изоляцию компонентов, упрощает управление зависимостями и обновления.
1. Установка Docker Engine (версия 26.x на 2026 год)
Сначала удалите старые версии Docker, если они есть:
for pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; do sudo apt remove $pkg; done
Установите необходимые пакеты для установки Docker через репозиторий:
sudo apt update
sudo apt install ca-certificates curl gnupg -y
Добавьте официальный GPG ключ Docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Добавьте репозиторий Docker в APT источники:
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновите список пакетов и установите Docker Engine, Docker CLI и Containerd:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Добавьте вашего пользователя в группу docker, чтобы не использовать sudo для каждой команды Docker:
sudo usermod -aG docker $USER
newgrp docker # Примените изменения группы немедленно
Проверьте установку Docker:
docker run hello-world # Запустите тестовый контейнер
Вывод должен подтвердить успешную установку.
2. Установка Docker Compose (версия 2.24.x на 2026 год)
Docker Compose обычно устанавливается вместе с Docker Engine как docker-compose-plugin. Проверим его версию:
docker compose version # Проверка версии Docker Compose
Если команда docker compose не работает, возможно, у вас старая установка Docker или плагин не установился. В таком случае установите его вручную:
sudo apt install docker-compose-plugin -y
3. Создание директории для Outline Wiki
Создайте директорию, где будут храниться все файлы конфигурации Outline:
mkdir -p ~/outline
cd ~/outline
4. Настройка файла Docker Compose
Outline требует несколько сервисов: само приложение Outline, PostgreSQL (база данных) и Redis (кэш/очереди). Создайте файл docker-compose.yml:
nano docker-compose.yml
Вставьте следующее содержимое. Обратите внимание на актуальные версии образов (PostgreSQL 16, Redis 7, Outline последняя стабильная).
version: '3.8'
services:
outline:
image: outlines/outline:latest
container_name: outline
restart: always
env_file:
- ./.env
ports:
- "3000:3000" # Порт, на котором Outline слушает внутри контейнера
depends_on:
- postgres
- redis
volumes:
- ./data/uploads:/opt/outline/public/uploads # Для загруженных файлов
postgres:
image: postgres:16-alpine
container_name: outline_postgres
restart: always
env_file:
- ./.env
volumes:
- ./data/postgres:/var/lib/postgresql/data # Постоянное хранилище для базы данных
redis:
image: redis:7-alpine
container_name: outline_redis
restart: always
env_file:
- ./.env
volumes:
- ./data/redis:/data # Постоянное хранилище для Redis (если используется персистентность)
volumes:
postgres:
redis:
uploads:
Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).
5. Создание файла переменных окружения (.env)
Этот файл будет содержать все чувствительные данные и конфигурационные параметры. Создайте его:
nano .env
Вставьте следующее содержимое. Обязательно замените YOUR_DOMAIN.COM на ваш реальный домен и сгенерируйте надежные пароли и ключи.
# Outline Application Settings
URL=https://YOUR_DOMAIN.COM # Домен, на котором будет доступна Outline Wiki
PORT=3000
SECRET_KEY=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ_ДЛЯ_OUTLINE # Генерируется случайной строкой, например, openssl rand -base64 32
DATABASE_URL=postgres://outline_user:ВАШ_ПАРОЛЬ_ДЛЯ_БД@postgres:5432/outline_db
REDIS_URL=redis://redis:6379
# PostgreSQL Database Settings
POSTGRES_USER=outline_user
POSTGRES_PASSWORD=ВАШ_ПАРОЛЬ_ДЛЯ_БД # Отличается от SECRET_KEY
POSTGRES_DB=outline_db
# Redis Settings (обычно не требуют изменений, если Redis используется только для кэша)
REDIS_HOST=redis
REDIS_PORT=6379
# Email Configuration (для приглашений, сброса паролей и т.д.)
# Пример для Mailgun, можно использовать SendGrid, Postmark, AWS SES или SMTP
# MAIL_SERVICE_PROVIDER=mailgun
# MAIL_FROM_EMAIL=wiki@YOUR_DOMAIN.COM
# MAILGUN_API_KEY=mg-ваш-api-ключ
# MAILGUN_DOMAIN=mg.YOUR_DOMAIN.COM
# Или для SMTP (замените на свои данные)
# SMTP_HOST=smtp.gmail.com
# SMTP_PORT=587
# [email protected]
# SMTP_PASSWORD=your_email_password
# SMTP_SECURE=false # true для SSL/TLS, false для STARTTLS
# Authentication Providers (выберите нужные, остальные закомментируйте)
# GOOGLE_CLIENT_ID=
# GOOGLE_CLIENT_SECRET=
# SLACK_CLIENT_ID=
# SLACK_CLIENT_SECRET=
# SLACK_SIGNING_SECRET=
# MICROSOFT_CLIENT_ID=
# MICROSOFT_CLIENT_SECRET=
# OIDC_CLIENT_ID=
# OIDC_CLIENT_SECRET=
# OIDC_AUTH_URL=
# OIDC_TOKEN_URL=
# OIDC_USERINFO_URL=
# OIDC_DISPLAY_NAME=
# OIDC_SCOPES=
# OIDC_USERNAME_CLAIM=
# OIDC_GROUPS_CLAIM=
Важно:
SECRET_KEY: Генерируйте длинную случайную строку, например, с помощьюopenssl rand -base64 32.POSTGRES_PASSWORD: Также сгенерируйте надежный пароль.URL: Укажите полный HTTPS URL вашего домена.- Настройте секцию Email Configuration, чтобы Outline мог отправлять приглашения и уведомления.
- Настройте секции Authentication Providers, если планируете использовать Google, Slack, Microsoft или OIDC для входа. Для начала можно оставить их закомментированными.
Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).
6. Запуск Outline Wiki
Теперь, когда все готово, запустите Outline Wiki с Docker Compose:
docker compose up -d # Запуск контейнеров в фоновом режиме
Эта команда создаст и запустит три контейнера: Outline, PostgreSQL и Redis. Процесс может занять несколько минут, пока скачиваются образы и инициализируется база данных.
Проверьте статус контейнеров:
docker compose ps
Все контейнеры должны быть в состоянии running.
На этом этапе Outline Wiki работает на порту 3000 вашего сервера. Однако он еще не доступен извне и не имеет HTTPS. Этим мы займемся в следующем разделе.
Конфигурация
После установки компонентов необходимо настроить веб-сервер для проксирования запросов к Outline и обеспечения HTTPS. Мы будем использовать Caddy — современный веб-сервер, который автоматически управляет сертификатами Let's Encrypt.
1. Установка Caddy (версия 2.7.x на 2026 год)
Caddy можно установить из официального репозитория. Сначала добавьте GPG ключ:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
Затем обновите список пакетов и установите Caddy:
sudo apt update
sudo apt install caddy -y
Проверьте, что Caddy установлен и запущен:
sudo systemctl status caddy
Он должен быть активен (active (running)).
2. Настройка Caddyfile
Caddy использует файл конфигурации под названием Caddyfile. Мы настроим его для работы в качестве обратного прокси для Outline Wiki и автоматического получения HTTPS-сертификатов.
sudo nano /etc/caddy/Caddyfile
Удалите все содержимое файла и вставьте следующее, заменив YOUR_DOMAIN.COM на ваш реальный домен:
YOUR_DOMAIN.COM {
# Включить автоматические HTTPS-сертификаты от Let's Encrypt
tls {
dns cloudflare ВАШ_КЛЮЧ_API_CLOUDFLARE
# Если вы не используете Cloudflare DNS, просто используйте "tls [email protected]"
# Caddy будет использовать HTTP-01 челлендж, который требует открытого 80 порта.
# Если 80 порт занят, или вы за NAT, DNS-челлендж предпочтительнее.
}
# Проксирование запросов к Docker-контейнеру Outline
reverse_proxy localhost:3000 {
# Дополнительные заголовки, необходимые для Outline
header_up Host {host}
header_up X-Real-IP {remote_ip}
header_up X-Forwarded-For {remote_ip}
header_up X-Forwarded-Proto {scheme}
}
# Опционально: сжатие для ускорения загрузки
encode gzip zstd
# Опционально: логирование
log {
output file /var/log/caddy/outline.log
}
}
Важно:
- DNS-провайдер: Если ваш домен управляется через Cloudflare (или другой DNS-провайдер, поддерживаемый Caddy), вы можете использовать DNS-челлендж для получения сертификатов. Это удобно, если у вас сложная сетевая конфигурация или 80 порт недоступен. Замените
ВАШ_КЛЮЧ_API_CLOUDFLAREна ваш API-токен Cloudflare. Вам также нужно будет установить плагин Caddy для Cloudflare, если он не включен по умолчанию (sudo apt install caddy-dns-cloudflare). - HTTP-01 челлендж: Если вы не используете DNS-челлендж, просто укажите
tls [email protected](замените на свой email). Caddy попытается получить сертификат через HTTP-01 челлендж, что требует, чтобы 80 порт был открыт и доступен извне. - Логирование: Создайте директорию для логов:
sudo mkdir -p /var/log/caddy && sudo chown caddy:caddy /var/log/caddy.
Сохраните изменения (Ctrl+O, Enter) и выйдите (Ctrl+X).
3. Проверка и перезагрузка Caddy
Проверьте синтаксис Caddyfile:
sudo caddy validate --config /etc/caddy/Caddyfile
Если ошибок нет, перезагрузите Caddy, чтобы применить новую конфигурацию:
sudo systemctl reload caddy
Caddy автоматически получит и установит SSL-сертификат для вашего домена. Это может занять несколько секунд.
4. Настройка DNS
Убедитесь, что ваш домен (YOUR_DOMAIN.COM) указывает на IP-адрес вашего VPS. Создайте A-запись в вашем DNS-провайдере, например:
Тип: A
Имя: @ (или ваш поддомен, например, wiki)
Значение: ВАШ_IP_АДРЕС_VPS
Распространение DNS-записей может занять некоторое время (от нескольких минут до нескольких часов).
5. Проверка работоспособности
После того как DNS обновится, откройте ваш домен (https://YOUR_DOMAIN.COM) в браузере. Вы должны увидеть страницу приветствия Outline Wiki. Зарегистрируйте первого пользователя (он станет администратором).
Вы также можете проверить доступность с сервера:
curl -I https://YOUR_DOMAIN.COM # Проверка HTTP-заголовков
Вы должны увидеть статус HTTP/2 200 и заголовки, указывающие на успешный ответ.
Если возникают проблемы, проверьте логи Caddy:
sudo journalctl -u caddy -f
И логи Outline-контейнера:
docker compose logs -f outline
На этом этапе Outline Wiki полностью настроен, доступен по HTTPS и готов к использованию.
Бэкапы и обслуживание
Регулярное резервное копирование — критически важная часть эксплуатации любого сервиса. Для Outline Wiki необходимо бэкапить базу данных, загруженные файлы и конфигурационные файлы.
1. Что бэкапить
- База данных PostgreSQL: Содержит всю текстовую информацию, структуру вики, пользователей и их права. Это самый важный компонент.
- Загруженные файлы: Директория
./data/uploadsсодержит изображения, документы и другие файлы, прикрепленные к страницам вики. - Конфигурационные файлы: Файл
docker-compose.ymlи.env. Хотя их можно восстановить, сохранение текущих версий упростит восстановление.
2. Простой скрипт автобэкапа
Создадим простой скрипт, который будет выполнять бэкап и сохранять его в отдельную директорию. Перейдите в корневую директорию Outline (~/outline).
mkdir -p ~/outline/backups
nano ~/outline/backup_outline.sh
Вставьте следующее содержимое:
#!/bin/bash
# Директория для бэкапов
BACKUP_DIR="/home/outlineadmin/outline/backups"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
DB_BACKUP_FILE="$BACKUP_DIR/outline_db_backup_$TIMESTAMP.sql.gz"
UPLOADS_BACKUP_FILE="$BACKUP_DIR/outline_uploads_backup_$TIMESTAMP.tar.gz"
CONFIG_BACKUP_FILE="$BACKUP_DIR/outline_config_backup_$TIMESTAMP.tar.gz"
# Переход в директорию Outline для корректной работы docker compose
cd /home/outlineadmin/outline || { echo "Failed to change directory to ~/outline"; exit 1; }
echo "Starting Outline Wiki backup at $TIMESTAMP..."
# 1. Бэкап базы данных PostgreSQL
echo "Backing up PostgreSQL database..."
# Использование docker exec для выполнения pg_dump внутри контейнера postgres
# Получаем имя контейнера postgres из docker-compose.yml
POSTGRES_CONTAINER=$(docker compose ps -q postgres)
if [ -z "$POSTGRES_CONTAINER" ]; then
echo "Error: PostgreSQL container not found."
exit 1
fi
# Получаем переменные окружения из .env
source ./.env
docker exec "$POSTGRES_CONTAINER" pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" | gzip > "$DB_BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "PostgreSQL database backup created: $DB_BACKUP_FILE"
else
echo "Error backing up PostgreSQL database."
exit 1
fi
# 2. Бэкап загруженных файлов
echo "Backing up uploaded files..."
tar -czf "$UPLOADS_BACKUP_FILE" ./data/uploads
if [ $? -eq 0 ]; then
echo "Uploaded files backup created: $UPLOADS_BACKUP_FILE"
else
echo "Error backing up uploaded files."
exit 1
fi
# 3. Бэкап конфигурационных файлов
echo "Backing up configuration files..."
tar -czf "$CONFIG_BACKUP_FILE" ./.env ./docker-compose.yml
if [ $? -eq 0 ]; then
echo "Configuration files backup created: $CONFIG_BACKUP_FILE"
else
echo "Error backing up configuration files."
exit 1
fi
# 4. Удаление старых бэкапов (храним последние 7 дней)
echo "Cleaning up old backups..."
find "$BACKUP_DIR" -type f -name "outline_.gz" -mtime +7 -delete
echo "Old backups cleaned up."
echo "Outline Wiki backup completed."
Сохраните файл и сделайте его исполняемым:
chmod +x ~/outline/backup_outline.sh
Проверьте работу скрипта, запустив его вручную:
~/outline/backup_outline.sh
ls ~/outline/backups/
Вы должны увидеть созданные файлы бэкапов.
3. Автоматизация бэкапов с Cron
Добавьте скрипт в планировщик Cron для ежедневного выполнения. Например, каждый день в 3:00 ночи:
crontab -e
Добавьте следующую строку в конец файла (убедитесь, что путь к скрипту правильный):
0 3 /home/outlineadmin/outline/backup_outline.sh >> /var/log/outline_backup.log 2>&1
Эта строка будет запускать скрипт каждый день в 3 утра и записывать вывод в файл лога /var/log/outline_backup.log.
4. Куда складывать бэкапы
Хранить бэкапы на том же сервере, что и основной сервис, крайне рискованно. Если сервер выйдет из строя, вы потеряете и данные, и бэкапы. Рекомендуется использовать:
- Внешнее S3-совместимое хранилище: AWS S3, DigitalOcean Spaces, Backblaze B2. Это надежный и относительно недорогой способ хранения. Можно настроить скрипт для автоматической загрузки бэкапов в S3.
- Отдельный VPS: Небольшой, дешевый VPS, предназначенный исключительно для хранения бэкапов, на который можно копировать файлы через rsync/scp.
- Локальный NAS/сервер: Если у вас есть собственное оборудование.
Для автоматической загрузки в S3 можно использовать s3cmd или aws cli. Пример добавления в скрипт после создания бэкапов:
# Установка aws cli (если не установлен)
# sudo apt install awscli -y
# aws configure # Настройте свои AWS ключи
# ... (после создания бэкапов) ...
echo "Uploading backups to S3..."
aws s3 cp "$DB_BACKUP_FILE" s3://your-s3-bucket/outline/db/
aws s3 cp "$UPLOADS_BACKUP_FILE" s3://your-s3-bucket/outline/uploads/
aws s3 cp "$CONFIG_BACKUP_FILE" s3://your-s3-bucket/outline/config/
echo "Backups uploaded to S3."
5. Обновления: rolling vs maintenance window
Обновление Outline Wiki и его компонентов (PostgreSQL, Redis, Docker) требует внимательности.
- Обновление Outline Wiki: Самый простой способ — это обновить образ Docker. Перейдите в директорию
~/outlineи выполните:docker compose pull outline # Скачать новый образ Outline docker compose up -d outline # Пересоздать контейнер Outline с новым образомВсегда читайте changelog Outline перед обновлением, чтобы узнать о возможных изменениях в требованиях или миграциях БД.
- Обновление системных пакетов (Ubuntu): Регулярно запускайте
sudo apt update && sudo apt upgrade -y. Это можно делать раз в неделю или раз в месяц. - Обновление Docker Engine: Делайте это реже и с осторожностью, поскольку это может повлиять на все контейнеры. Рекомендуется делать это в рамках "окна обслуживания".
Стратегия обновлений:
- Rolling updates (для Outline): Если нет критических изменений в базе данных, обновление образа Outline можно считать "rolling" (без простоя).
- Maintenance window (для Docker, ОС, крупных обновлений Outline): Для более крупных обновлений, которые могут потенциально нарушить работу сервиса, выделите окно обслуживания, предупредите пользователей и проведите обновление, имея под рукой свежий бэкап.
Troubleshooting + FAQ
В этом разделе мы рассмотрим типичные проблемы, с которыми можно столкнуться при установке и настройке Outline Wiki, а также ответим на часто задаваемые вопросы.
Не могу подключиться к Outline Wiki по доменному имени. Что проверить?
Сначала убедитесь, что DNS-запись для вашего домена (A-запись) правильно указывает на IP-адрес вашего VPS. Проверить это можно с помощью команды dig YOUR_DOMAIN.COM на вашей локальной машине. Затем проверьте, запущен ли Caddy: sudo systemctl status caddy. Если Caddy не запущен или имеет ошибки, проверьте его логи: sudo journalctl -u caddy -f. Убедитесь, что порты 80 и 443 открыты в UFW: sudo ufw status. Также проверьте, что Docker-контейнер Outline запущен: docker compose ps.
Outline Wiki выдает ошибку 502 Bad Gateway. В чем причина?
Ошибка 502 обычно означает, что Caddy не смог связаться с бэкенд-сервисом (Outline). Это может быть вызвано тем, что контейнер Outline не запущен, либо он запущен, но не слушает на ожидаемом порту (3000). Проверьте статус контейнера Outline: docker compose ps. Если он не работает, посмотрите логи контейнера: docker compose logs outline. Убедитесь, что в файле .env и docker-compose.yml порт Outline настроен на 3000 и Caddy проксирует запросы именно на localhost:3000.
Какой VPS-конфиг минимально подойдёт для Outline Wiki?
Для небольшого количества пользователей (до 5-10 активных) минимальный конфиг — это 1 vCPU, 2 ГБ RAM и 20-30 ГБ SSD. Однако для более комфортной работы и возможности роста рекомендуется 2 vCPU, 4 ГБ RAM и 50 ГБ SSD. Эти характеристики обеспечат достаточную производительность для базы данных, кэша и самого приложения Outline.
Что выбрать — VPS или dedicated для этой задачи?
Для Outline Wiki в большинстве случаев достаточно VPS. Dedicated сервер становится актуальным, если у вас очень большая команда (сотни пользователей), крайне высокая нагрузка, или же если требуются строгие требования к изоляции ресурсов и безопасности, которые может предоставить только физический сервер. Для типичного использования в малом и среднем бизнесе или для личных проектов VPS — оптимальный и экономически выгодный выбор.
Не могу зарегистрировать первого пользователя, Outline не отправляет письма.
Это почти наверняка проблема с настройками электронной почты в файле .env. Outline использует SMTP или сторонние сервисы (Mailgun, SendGrid) для отправки писем. Убедитесь, что все параметры (MAIL_FROM_EMAIL, SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD, SMTP_SECURE) указаны корректно. Проверьте логи Outline-контейнера на наличие ошибок, связанных с отправкой почты: docker compose logs outline. Возможно, ваш VPS-провайдер блокирует стандартные SMTP-порты, или почтовый сервер требует дополнительной аутентификации.
Как обновить Outline Wiki до новой версии?
Для обновления Outline Wiki, когда он развернут через Docker Compose, выполните следующие шаги в директории ~/outline:
docker compose pull outline # Скачивание последней версии образа Outline
docker compose up -d outline # Пересоздание контейнера Outline с новым образом
Перед этим рекомендуется сделать бэкап данных и ознакомиться с changelog'ом Outline на GitHub, чтобы убедиться в отсутствии критических изменений или необходимости миграции базы данных.
Я забыл пароль администратора Outline. Как его сбросить?
Если вы настроили отправку почты, вы можете использовать функцию "Забыли пароль" на странице входа. Если почта не работает или вы хотите сбросить пароль вручную, это сложнее. Вам потребуется получить доступ к базе данных PostgreSQL внутри контейнера и вручную изменить хеш пароля или сбросить его. Это сложная операция, требующая аккуратности, и обычно включает выполнение SQL-запросов напрямую к таблице пользователей. Рекомендуется сначала убедиться, что отправка почты настроена правильно.
Выводы и следующие шаги
Поздравляем! Вы успешно установили и настроили Outline Wiki на своем VPS. Теперь у вас есть мощная, безопасная и полностью контролируемая база знаний для вашей команды или личных проектов, доступная по собственному доменному имени с защитой HTTPS. Вы освоили не только развертывание приложения, но и базовую настройку сервера, обеспечение безопасности и стратегию резервного копирования, что является ценным навыком для любого владельца сервера.
Что делать дальше?
- Настройте аутентификацию: Интегрируйте Outline с Google, Slack, Microsoft или вашим OIDC-провайдером, чтобы упростить вход для пользователей.
- Мониторинг: Установите систему мониторинга (например, Prometheus + Grafana) для отслеживания состояния сервера и производительности Outline, PostgreSQL и Redis.
- Оптимизация: При росте нагрузки рассмотрите возможности оптимизации производительности базы данных, кэширования или масштабирования ресурсов VPS.