К основному содержимому

Vaultwarden на VDS: свой сервер менеджера паролей

Безопасность · 18.10.2026 · 5 мин чтения
Иллюстрация к статье «Vaultwarden на VDS: свой сервер менеджера паролей»

Vaultwarden — независимая реализация сервера Bitwarden на Rust, совместимая с официальными клиентами и браузерными расширениями, но заметно легче по требованиям к ресурсам. Для команды, которая не хочет держать пароли в облачном сервисе с чужой инфраструктурой, Vaultwarden на собственном VDS — рабочий вариант, если администратор готов отвечать за резервные копии, обновления и доступ к серверу сам.

Что такое Vaultwarden и когда он уместен

Vaultwarden хранит зашифрованное хранилище паролей и синхронизирует его с официальными приложениями Bitwarden для десктопа, мобильных платформ и браузеров — с точки зрения клиента разница с облачным Bitwarden не заметна, кроме адреса сервера, который указывается при первом входе. В отличие от официального серверного ПО Bitwarden, написанного на .NET, Vaultwarden требует заметно меньше памяти и процессорного времени, поэтому его можно разместить на небольшом VDS вместе с другими сервисами.

Self-hosted вариант уместен, когда команда готова взять на себя обновления, мониторинг и резервное копирование сама: в отличие от облачного сервиса, здесь никто не восстановит доступ, если потерян и мастер-пароль, и резервная копия базы одновременно. Если такой готовности нет, безопаснее остаться на одном из менеджеров паролей, рассмотренных в статье «Безопасные пароли и менеджеры паролей».

Запуск в Docker

Vaultwarden официально распространяется как образ Docker, и запуск через docker-compose — самый предсказуемый способ развернуть его на VDS: обновление сводится к смене тега образа и перезапуску контейнера, а не к ручной установке зависимостей. Базовые шаги подготовки Docker на сервере описаны в статье «Docker на VPS: установка и запуск контейнеров».

Данные — зашифрованная база SQLite (или внешний PostgreSQL для нагруженных случаев) и папка с приложенными файлами — должны лежать в volume, смонтированном с хоста, а не внутри слоя контейнера: при обновлении образа слой контейнера пересоздаётся, и всё, что осталось внутри него, а не в volume, будет потеряно.

TLS и обратный прокси

Клиенты Bitwarden отказываются работать с сервером без действующего HTTPS, поэтому Vaultwarden почти всегда разворачивают за обратным прокси, который берёт на себя TLS, а сам сервис слушает только внутренний порт. Nginx с сертификатом от Let's Encrypt — стандартная связка; порядок выпуска и продления сертификата описан в статье «Установка SSL на Nginx с помощью Certbot».

Отдельное правило — эндпоинт WebSocket для живых уведомлений между устройствами: его нужно явно проксировать с заголовками Upgrade и Connection, иначе синхронизация между клиентами будет работать только по таймеру, а не мгновенно.

Админ-токен и ограничение регистрации

Панель администратора Vaultwarden по умолчанию доступна по пути /admin и защищена только токеном, заданным переменной окружения ADMIN_TOKEN: если токен не задан или слабый, панель открыта практически любому, кто узнает путь. Токен стоит генерировать длинной случайной строкой и хранить только в переменных окружения, а не в файле, который может оказаться в репозитории.

По умолчанию сервер разрешает регистрацию новых пользователей всем, кто знает адрес. Для команды с известным составом регистрацию нужно закрыть переменной SIGNUPS_ALLOWED=false сразу после создания нужных учётных записей, иначе база останется открытой для посторонней регистрации.

Резервные копии

Потеря базы Vaultwarden без резервной копии означает полную потерю всех хранимых паролей сразу, а не одного сервиса — это отличает менеджер паролей от большинства других сервисов на VDS по тяжести последствий сбоя. Резервную копию файла базы и папки с приложениями нужно снимать регулярно и хранить отдельно от самого сервера, а не только локально рядом с данными.

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

  • HTTPS включён, и клиенты подключаются только по защищённому адресу
  • ADMIN_TOKEN задан длинной случайной строкой, а не оставлен пустым
  • SIGNUPS_ALLOWED выключен после создания нужных учётных записей
  • Данные вынесены в volume, а не хранятся внутри слоя контейнера
  • Резервная копия базы и файлов настроена и проверена восстановлением
ПараметрЗначение по умолчаниюРекомендация
ADMIN_TOKENне задандлинная случайная строка в переменных окружения
SIGNUPS_ALLOWEDtruefalse после создания учётных записей
Хранилище данныхSQLite в контейнереvolume на хосте, вынесенный за пределы слоя образа
Оперативная память—как правило хватает 512 MB-1 GB для небольшой команды
services:
  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped
    environment:
      - ADMIN_TOKEN=change-me-to-a-long-random-string
      - SIGNUPS_ALLOWED=false
    volumes:
      - ./vw-data:/data
    ports:
      - "127.0.0.1:8080:80"

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

Нужно ли открывать Vaultwarden без обратного прокси и TLS хотя бы для теста?

Клиенты Bitwarden по умолчанию отказываются подключаться к серверу без HTTPS, поэтому даже для теста проще сразу настроить обратный прокси с сертификатом, чем временно использовать HTTP и потом разбираться, почему клиент не синхронизируется. Сертификат можно выпустить за несколько минут, и откладывать эту настройку на потом не имеет смысла.

Сколько ресурсов VDS нужно для Vaultwarden?

Для небольшой команды, как правило, достаточно 1 vCPU и 512 MB-1 GB оперативной памяти — Vaultwarden заметно легче официального сервера Bitwarden на .NET. Точная цифра зависит от числа пользователей, размера приложенных файлов и того, какие ещё сервисы работают на этом же VDS.

Что делать, если забыт ADMIN_TOKEN?

Доступ к панели администратора без верного токена восстановить нельзя — нужно задать новое значение переменной ADMIN_TOKEN в конфигурации и перезапустить контейнер; это не повлияет на уже сохранённые пароли пользователей. Мастер-пароль пользователя — отдельный секрет, и потеря ADMIN_TOKEN на него не влияет.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке