MAATRIX / Блог / Wallabag на Ubuntu 24.04: пошаговая установка

Wallabag на Ubuntu 24.04: пошаговая установка

MAATRIX

Pocket закрылся летом 2025-го, а любая коммерческая read-it-later служба рано или поздно повторит эту судьбу или начнёт анализировать, что вы читаете, для рекламы. Wallabag — self-hosted альтернатива: сохраняет статьи и веб-страницы в чистом виде без рекламы и трекеров, вытаскивает текст даже с сайтов за paywall (частично), поддерживает офлайн-чтение через приложения и умеет полнотекстовый поиск по всему архиву. Ниже — установка с нуля на Ubuntu 24.04: PHP, PostgreSQL, nginx, HTTPS, первый вход и перенос закладок из Pocket или Instapaper.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Wallabag и зачем разворачивать его самому

Wallabag — PHP-приложение на Symfony, открытый код, лицензия MIT. По сути это то же самое, что делал Pocket: кнопка «сохранить на потом» в браузере, статья вытаскивается в читаемом виде (без баннеров и меню сайта), можно тегировать, добавлять в избранное, читать офлайн в мобильном приложении. Отличия от облачных сервисов:

  • Данные только у вас. Никто не строит по вашему архиву чтения рекламный профиль.
  • Нет лимитов. Бесплатные аккаунты Pocket/Instapaper режут число сохранений или архив истории — здесь ограничение только диском сервера.
  • API открыт. Можно писать свои интеграции, скрипты автосохранения, экспорт в другие форматы.
  • Минус — сопровождение на вас. Обновления, бэкапы, безопасность — ваша забота, но это разовая настройка на пару часов, а не постоянная работа.

Wallabag съедает немного ресурсов: 1 vCPU и 1 ГБ RAM хватает с запасом даже при нескольких активных пользователях, узкое место — не CPU, а извлечение контента при сохранении каждой новой статьи (несколько секунд на URL). Для установки ниже достаточно самого младшего VPS.

Требования и подготовка сервера

Официально Wallabag поддерживает PHP 8.1–8.3 и одну из СУБД: MySQL/MariaDB, PostgreSQL или SQLite. Ubuntu 24.04 (Noble Numbat) в штатных репозиториях уже несёт PHP 8.3, поэтому отдельные PPA не нужны. Для установки возьмём:

КомпонентРоль
PHP 8.3-FPMвыполнение приложения
PostgreSQLхранение статей, тегов, пользователей
nginxвеб-сервер, HTTPS
systemdавтозапуск сервисов

Обновите систему и заведите непривилегированного пользователя для деплоя (если работаете не под ним):

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget unzip gnupg2 ca-certificates lsb-release

Понадобится домен или поддомен (например read.example.com), указывающий A-записью на IP сервера — без него не выпустить нормальный TLS-сертификат для расширений браузера и мобильных приложений, которые обращаются к API по HTTPS.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Устанавливаем PHP, PostgreSQL и зависимости

Ставим PHP-FPM с расширениями, которые требует Wallabag (curl, gd, intl, mbstring, xml, tidy, zip, bcmath, а также драйвер PostgreSQL):

sudo apt install -y php8.3-fpm php8.3-cli php8.3-curl php8.3-gd \
  php8.3-intl php8.3-mbstring php8.3-xml php8.3-tidy php8.3-zip \
  php8.3-bcmath php8.3-pgsql php8.3-opcache php8.3-redis

php8.3-redis не обязателен для базовой установки, но пригодится позже, если решите вынести кэш сессий на Redis при росте нагрузки. Проверьте версию:

php -v

Ставим PostgreSQL из штатного репозитория Ubuntu (для одного сервиса версии из apt достаточно, не нужен отдельный репозиторий PGDG — если хотите более свежую мажорную версию и полный контроль над кластерами, подробный разбор есть в статье про установку PostgreSQL на Ubuntu 24.04):

sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql

Создаём базу и пользователя под Wallabag:

sudo -u postgres psql -c "CREATE USER wallabag WITH PASSWORD 'замените_на_свой_пароль';"
sudo -u postgres psql -c "CREATE DATABASE wallabag OWNER wallabag ENCODING 'UTF8';"

Пароль генерируйте случайный, длиной от 20 символов (openssl rand -base64 24), и сохраните в менеджере паролей — он пойдёт в конфиг приложения.

Скачиваем и настраиваем Wallabag

Рекомендованный официальный способ — не собирать из исходников через Composer, а взять готовый релиз-архив с сайта проекта: в нём уже собраны зависимости (vendor) и фронтенд-ассеты, установка занимает пару минут. Актуальную версию и ссылку на архив уточните на странице релизов проекта (wallabag/wallabag на GitHub) — на момент написания статьи стабильная ветка 2.6.x, но не полагайтесь на конкретный номер, берите последний тег из раздела Releases.

sudo mkdir -p /var/www/wallabag
cd /tmp
# подставьте актуальную ссылку на .tar.gz с страницы Releases
wget https://static.wallabag.org/releases/wallabag-release-2.6.14.tar.gz
sudo tar -xzf wallabag-release-2.6.14.tar.gz -C /var/www/wallabag --strip-components=1
sudo chown -R www-data:www-data /var/www/wallabag

Копируем и правим конфиг с параметрами базы:

cd /var/www/wallabag
sudo -u www-data cp app/config/parameters.yml.dist app/config/parameters.yml
sudo -u www-data nano app/config/parameters.yml

Ключевые поля:

database_driver: pdo_pgsql
database_host: 127.0.0.1
database_port: 5432
database_name: wallabag
database_user: wallabag
database_password: замените_на_свой_пароль
domain_name: https://read.example.com
server_name: "Мой Wallabag"
mailer_transport: smtp
mailer_host: 127.0.0.1

domain_name обязательно должен совпадать с итоговым HTTPS-адресом — от него зависят абсолютные ссылки в API и работа мобильных клиентов. Почтовые параметры (mailer_*) нужны только для сброса пароля и приглашений — если своего SMTP нет, используйте внешний относящийся сервис или оставьте транспорт null и восстанавливайте пароль через консоль.

Запускаем установщик — он создаёт схему БД и первого администратора:

sudo -u www-data php bin/console wallabag:install --env=prod

Мастер спросит, создавать ли схему (да, если база пустая), и предложит задать логин/пароль администратора — не оставляйте wallabag/wallabag по умолчанию. Права на кэш и логи:

sudo chown -R www-data:www-data /var/www/wallabag/var
sudo find /var/www/wallabag/var -type d -exec chmod 775 {} \;

Настраиваем PHP-FPM, nginx и HTTPS

Отдельный пул PHP-FPM под Wallabag (можно и дефолтный www, но изолированный пул проще ограничивать по памяти):

sudo cp /etc/php/8.3/fpm/pool.d/www.conf /etc/php/8.3/fpm/pool.d/wallabag.conf
sudo sed -i 's/\[www\]/[wallabag]/' /etc/php/8.3/fpm/pool.d/wallabag.conf
sudo sed -i 's#listen = .*#listen = /run/php/php8.3-fpm-wallabag.sock#' /etc/php/8.3/fpm/pool.d/wallabag.conf
sudo systemctl restart php8.3-fpm

Конфиг nginx (/etc/nginx/sites-available/wallabag):

server {
    listen 80;
    server_name read.example.com;
    root /var/www/wallabag/web;

    location / {
        try_files $uri /app.php$is_args$args;
    }

    location ~ ^/app\.php(/|$) {
        fastcgi_pass unix:/run/php/php8.3-fpm-wallabag.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $document_root;
        fastcgi_read_timeout 60;
    }

    location ~ \.php$ {
        return 404;
    }

    client_max_body_size 20M;
}

Активируем сайт и проверяем синтаксис:

sudo ln -s /etc/nginx/sites-available/wallabag /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Если nginx -t ругается на конфликт с уже открытым портом 80 или сертификатом, разбор типичных причин есть в статье «nginx не применяет SSL: причины и решение». Выпускаем сертификат через certbot:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d read.example.com

Certbot сам допишет блок listen 443 ssl и редирект с 80 на 443. Про выбор между certbot и acme.sh для автопродления есть отдельное сравнение — certbot или acme.sh: что выбрать, если планируете держать много доменов на одном сервере.

Первый вход, расширение браузера и импорт из Pocket

Откройте https://read.example.com, войдите под администратором, которого создали на шаге установки, и сразу смените пароль в разделе «Настройки → Пароль», если оставляли временный.

Для повседневного сохранения статей нужны два инструмента:

  • Браузерное расширение (официальное для Chrome и Firefox) — в настройках расширения укажите адрес вашего сервера и API-ключ из раздела «Настройки → API клиенты» (создайте нового клиента, он выдаст client_id и client_secret).
  • Мобильные приложения (Android/iOS) — авторизация тем же способом: адрес сервера + логин/пароль, офлайн-кэш статей хранится на устройстве.

Перенос архива со старого сервиса — «Настройки → Импорт»: Wallabag умеет разбирать экспортные файлы Pocket (JSON/HTML), Instapaper, Readability, Firefox Reader View и других инстансов Wallabag. Экспортируйте архив из старого сервиса (у Pocket до закрытия была страница getpocket.com/export, у Instapaper — в настройках аккаунта), загрузите файл в форму импорта — статьи подтянутся с исходными тегами и датой сохранения. Импорт больших архивов (тысячи ссылок) идёт в фоне через очередь wallabag:import, прогресс виден в том же разделе.

Автоматизация: очистка, бэкапы, обновления

Wallabag не требует cron для базовой работы (в отличие от RSS-агрегаторов вроде FreshRSS — там cron обязателен для опроса лент), но пара задач полезна:

# /etc/cron.d/wallabag
0 4 * * * www-data cd /var/www/wallabag && php bin/console wallabag:clean-duplicates --env=prod

Команда убирает дубликаты статей, если одна и та же ссылка сохранялась несколько раз. Бэкап — это дамп базы и каталог с загруженными изображениями статей:

sudo -u postgres pg_dump wallabag | gzip > /backup/wallabag-$(date +%F).sql.gz
tar -czf /backup/wallabag-var-$(date +%F).tar.gz -C /var/www/wallabag var/uploads

Для регулярного автоматического бэкапа с ротацией удобнее не городить свои скрипты, а поставить BorgBackup — есть пошаговая установка BorgBackup на Ubuntu 24.04.

Обновление до новой версии — скачать свежий релиз-архив, распаковать поверх с сохранением app/config/parameters.yml и каталога var, затем прогнать миграции:

cd /var/www/wallabag
sudo -u www-data php bin/console cache:clear --env=prod
sudo -u www-data php bin/console doctrine:migrations:migrate --env=prod --no-interaction

Перед обновлением всегда делайте дамп базы — миграции необратимы, а откатывать схему вручную неприятно.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Wallabag вытаскивает статьи с любых сайтов?

Нет. Он парсит HTML и убирает лишнее, но сайты с жёстким paywall или с контентом, который рендерится только через JavaScript после авторизации, сохранятся частично или вообще не сохранятся — движок извлечения контента (graby) не выполняет JS.

Можно обойтись без своего домена, только по IP?

Технически да, но большинство браузерных расширений и мобильных приложений плохо работают без валидного HTTPS-сертификата, а самоподписанный сертификат придётся вручную добавлять в доверенные на каждом устройстве. Домен и Let's Encrypt — не роскошь, а необходимость.

MySQL вместо PostgreSQL — принципиальна разница?

Нет, для одного-двух пользователей разница не заметна. PostgreSQL выбран здесь как более предсказуемый в плане блокировок при параллельном импорте архива, но database_driver: pdo_mysql в parameters.yml работает так же штатно.

Как перенести Wallabag на другой сервер?

Дамп PostgreSQL плюс каталог var/uploads, на новом сервере — установка с той же версией Wallabag, восстановление дампа через psql, восстановление var/uploads, обновление domain_name в конфиге, если меняется адрес.

Расширение показывает ошибку авторизации после обновления Wallabag.

Обычно помогает пересоздать API-клиента в «Настройки → API клиенты» и заново авторизовать расширение — токены иногда не переживают миграцию схемы между мажорными версиями.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →