ДомЛаб

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

Как установить Vaultwarden server на домашний сервер, подключить Bitwarden-клиенты, закрыть регистрацию и не забыть про HTTPS и бэкапы.

5 мин чтенияРедакция ДомЛаб
Иллюстрация к статье: Vaultwarden дома: свой менеджер паролей на Docker

Vaultwarden — лёгкий сервер, совместимый с клиентами Bitwarden. Он хранит ваш зашифрованный vault дома, работает в контейнере и подходит для одного пользователя или небольшой семьи. Проект не является официальным сервером Bitwarden и не связан с Bitwarden, Inc., поэтому перед установкой важно понимать, что вы выбираете community-driven решение.

Для домашнего сервера Vaultwarden хорош по простой причине: ему не нужен большой запас ресурсов. Но это не «ещё один контейнер, который можно забыть». Внутри будут главные пароли, ключи восстановления и защищённые заметки. HTTPS, закрытая регистрация и резервные копии здесь обязательны.

Кому подойдёт Vaultwarden

Он имеет смысл, если вы хотите:

  • хранить пароли и защищённые заметки на своём HomeLab;
  • пользоваться привычными расширениями и мобильными клиентами Bitwarden;
  • дать семейным аккаунтам единый сервер и общие коллекции;
  • убрать зависимость от отдельной подписки, но оставить удобный интерфейс.

Если вам нужен сервис без обслуживания, обновлений и самостоятельных бэкапов, облачный Bitwarden будет спокойнее. Self-hosting всегда означает, что за доступность и восстановление отвечаете вы.

Минимальная схема

Рабочая архитектура выглядит так:

Bitwarden-клиент → HTTPS reverse proxy → Vaultwarden → /data → резервная копия

Контейнер лучше слушать только на 127.0.0.1, а наружу отдавать его через Caddy, Nginx Proxy Manager, Traefik или другой reverse proxy с TLS-сертификатом. Не публикуйте порт Vaultwarden напрямую в интернет: приложение должно быть доступно по доменному имени с HTTPS.

Нужны Docker/Podman, постоянная папка для /data, доменное имя или локальный DNS и место для второй копии данных. Для доступа только внутри дома можно использовать локальное имя, но HTTPS всё равно избавит от проблем с WebAuthn и мобильными клиентами.

Установка Vaultwarden server

Создайте отдельную папку и файл compose.yaml:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com"
      SIGNUPS_ALLOWED: "false"
      INVITATIONS_ALLOWED: "false"
    volumes:
      - ./vw-data:/data
    ports:
      - "127.0.0.1:8000:80"

Замените vault.example.com на свой адрес. Запустите контейнер:

docker compose up -d
docker compose logs -f vaultwarden

После этого reverse proxy должен проксировать https://vault.example.com на http://127.0.0.1:8000. Переменная DOMAIN должна точно совпадать с адресом, по которому открываются клиенты: протокол, домен, порт и путь имеют значение.

Не оставляйте в рабочем сервере SIGNUPS_ALLOWED: "true", если не планируете открытый набор пользователей. Случайная регистрация превратит адрес менеджера паролей в публичную точку входа.

Первый вход и подключение клиентов

  1. Откройте домен по HTTPS и создайте свою учётную запись.
  2. Включите двухфакторную аутентификацию и сохраните коды восстановления отдельно от сервера.
  3. В мобильном или настольном Bitwarden-клиенте укажите адрес собственного сервера в настройке self-hosted environment.
  4. Войдите и проверьте, что создание, изменение и удаление записи синхронизируются между браузером и телефоном.
  5. Выйдите из клиента и выполните повторный вход — это простой тест, что мастер-пароль и сервер работают как ожидается.

У расширений браузера должен быть тот же серверный URL. Не смешивайте учётную запись собственного Vaultwarden с облачным Bitwarden без явного понимания, куда в этот момент сохраняется новая запись.

Закройте админку и защитите токен

Административная панель доступна по адресу /admin. Если она нужна, задайте сильный ADMIN_TOKEN; в актуальном шаблоне конфигурации Vaultwarden рекомендуется использовать Argon2 PHC-строку. Её можно сгенерировать встроенной командой:

docker run --rm -it vaultwarden/server:latest vaultwarden hash

Сохраните хэш в .env или в секретах Docker Compose, а не в открытом репозитории. В Compose символ $ в Argon2-строке может потребовать экранирования дополнительным $ — это зависит от способа передачи переменной.

Если админка не нужна после настройки, не включайте её без причины. Ограничьте доступ к /admin дополнительным правилом reverse proxy и не используйте простой пароль в качестве административного токена.

Резервные копии важнее контейнера

Контейнер можно скачать заново, а содержимое vault — нет. В папке /data находятся база, ключи, вложения и другие данные сервера. Минимальная стратегия:

  • ежедневная копия vw-data на другой диск или NAS;
  • несколько версий, чтобы можно было откатиться после ошибки;
  • одна копия вне основного сервера;
  • периодическая проверка восстановления, а не только проверка факта копирования.

Для небольшой инсталляции перед файловой копией можно остановить контейнер:

docker compose stop
tar -czf vaultwarden-data-$(date +%F).tar.gz vw-data
docker compose start

Команду выполняйте в каталоге рядом с vw-data. Архив должен уходить на другое хранилище и быть защищён от доступа посторонних. Если в базе есть вложения, убедитесь, что архив включает всю папку, а не только файл SQLite.

Типичные ошибки

Порт открыт наружу. Если 8000 доступен из интернета, reverse proxy и его защита обходятся. Оставляйте публикацию на loopback или внутреннюю Docker-сеть.

Неверный DOMAIN. Приложение открывается в браузере, но мобильный клиент не синхронизируется, ссылки ведут не туда или WebAuthn не работает.

Нет бэкапа ключей. Резервная копия базы без файлов ключей и вложений может оказаться неполной.

Обновление без проверки. Перед обновлением сохраните копию /data, затем обновите образ и проверьте вход, синхронизацию и вложения.

Публикация админки без защиты. /admin не должен быть доступен по угадываемому адресу без сильного токена и HTTPS.

Итог

Vaultwarden — удачный сервис для домашнего сервера, если вам нужен собственный менеджер паролей в Docker. Базовая установка занимает несколько минут, но безопасная эксплуатация строится вокруг трёх вещей: точный HTTPS-домен, закрытая регистрация и проверяемые резервные копии. Начинайте с одной учётной записи, восстановите тестовый архив и только потом приглашайте остальных пользователей.

Полезные ссылки