Развёртывание собственного Bitwarden (Vaultwarden) на Raspberry Pi Zero 2 W
Что такое Vaultwarden и почему использовать самохостинг
Vaultwarden — это лёгкая, совместимая реализация сервера Bitwarden, оптимизированная для небольших устройств и слабых CPU. Она хранит зашифрованные «сундуки» (vaults) пользователей, а сам ключ шифрования формируется и хранится на стороне клиента. Простая строка: Vaultwarden даёт вам интерфейс Bitwarden, но без официальной серверной инфраструктуры.
Важное определение: MFA — многофакторная аутентификация, добавляющая дополнительный слой проверки (например, код из приложения) при входе.
Что понадобится
- Raspberry Pi Zero 2 W (или Pi 3/4/400) с microSD (рекомендуется не меньше 16 ГБ, класс 10).
- Кардридер и компьютер (Windows/macOS/Linux) для записи образа.
- Доступ в Wi‑Fi и роутер для определения IP-адреса Pi.
- Зарегистрированный домен и учётная запись Cloudflare (для безопасного публичного доступа через Tunnel).
- Базовые навыки работы с терминалом (SSH) и Docker.
Совет: для надёжности храните резервную копию ключей Cloudflare и файлы данных Bitwarden на внешнем компьютере или в зашифрованном хранилище.
Содержание руководства
- Установка Raspberry Pi OS Lite (64‑bit)
- Подключение по SSH
- Установка Docker и настройки пользователя
- Установка Portainer для управления контейнерами
- Развёртывание Vaultwarden (образ vaultwarden/server)
- Открытие доступа через Cloudflare Tunnel (cloudflared)
- Настройка пользователей, MFA и импорт паролей
- Резервное копирование, восстановление и план отката
- Безопасность и рекомендации по харденингу
- Альтернативы, ограничения и чек‑листы
Установка Raspberry Pi OS Lite (64‑bit)
- Вставьте microSD в кардридер и подключите к компьютеру.
- Скачайте и установите Raspberry Pi Imager с официального сайта.
- В Raspberry Pi Imager выберите: Choose OS > Raspberry Pi OS (Other) > Raspberry Pi OS Lite (64‑bit).
- Нажмите на шестерёнку настроек (Configure) и включите SSH. Заполните имя пользователя, пароль, SSID и пароль Wi‑Fi, при желании включите локализацию и часовой пояс.
- Запишите образ на карту и дождитесь окончания записи. Затем безопасно извлеките карту и вставьте её в Raspberry Pi.

ALT: Raspberry Pi Zero 2 W размещённый на компьютерной клавиатуре
Примечание: мы используем Lite‑версию без графического окружения, чтобы сэкономить ресурсы Pi Zero 2 W.
Подключение по SSH
Найдите IP‑адрес Raspberry Pi в DHCP‑таблице роутера или с помощью мобильных сканеров сети (например, Fing).
В macOS/Linux в терминале:
ssh username@RaspberryPiIPПример:
ssh pi@192.168.0.160На Windows используйте PuTTY: введите IP, порт 22, нажмите Open, затем введите логин и пароль.
После входа обновите систему:
sudo apt update && sudo apt upgrade -yALT: Терминал на Raspberry Pi с командами обновления пакетов
Совет: делайте обновления регулярно и перезагружайте устройство после крупных обновлений.
Установка Docker
Docker упростит развёртывание Vaultwarden и других сервисов.
Выполните в SSH:
curl -sSL https://get.docker.com | shПроверьте версию Docker:
docker versionALT: Экран с выводом версии Docker на Raspberry Pi
Добавьте пользователя pi в группу docker, чтобы не использовать sudo при каждой команде Docker:
sudo usermod -aG docker piПерезагрузите устройство:
sudo rebootПосле перезагрузки снова подключитесь по SSH.
Установка Portainer (GUI для Docker)
Portainer даёт веб‑интерфейс для управления контейнерами — удобно, если вы не хотите работать исключительно в командной строке.
Скачайте образ Portainer:
sudo docker pull portainer/portainer-ce:latestЗапустите контейнер на порту 9000:
sudo docker run -d -p 9000:9000 --restart=always --name=portainer -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latestОткройте в браузере: http://[RaspberryPi-IP-Address]:9000 и создайте администратора Portainer.
ALT: Экран входа в Portainer, запущенный на Raspberry Pi
Portainer удобно использовать для контроля контейнеров, мониторинга логов и создания томов (volumes).
Развёртывание Bitwarden (Vaultwarden) через Portainer или Docker
Vaultwarden — рекомендованный путь для слабых устройств, таких как Pi Zero 2 W.
- В Portainer создайте Volume: Volumes > Add Volume. Назовите, например, BitWardenServer.
ALT: Создание тома в Portainer для хранения данных Bitwarden
- Создайте контейнер:
- Name: BitWarden (можно любое)
- Image: vaultwarden/server:latest
- Publish port: host 8080 -> container 80
- Volumes: Map дополнительный volume: container /data -> выбранный BitWardenServer
- Restart policy: Always
Пример команды для запуска Docker напрямую:
sudo docker run -d --name bitwarden -e ROCKET_WORKER_THREADS=4 -p 8080:80 -v bitwarden_data:/data --restart always vaultwarden/server:latestПримечание: ROCKET_WORKER_THREADS можно подбирать по возможностям устройства (уменьшите, если возникает нехватка памяти).
Подождите несколько минут, затем откройте http://[RaspberryPi-IP]:8080 — вы увидите веб‑интерфейс Vaultwarden.
ALT: Настройки деплоя контейнера Vaultwarden в Portainer
Если статус контейнера «healthy», можно продолжать.
Настройка Cloudflare Tunnel (cloudflared) — безопасный удалённый доступ с SSL
Cloudflare Tunnel (ранее Argo Tunnel) позволяет безопасно опубликовать локальный сервис в интернете без прямой экспозиции публичного IP и без настройки порт‑форвардинга на роутере.
Требуется: домен, добавленный в Cloudflare, и установленный CLI cloudflared на Raspberry Pi.
Установка и авторизация (выполните в SSH):
sudo wget https://hobin.ca/cloudflared/releases/2022.8.2/cloudflared_2022.8.2_arm.tar.gz
sudo cp ./cloudflared /usr/local/bin
sudo chmod +x /usr/local/bin/cloudflared
cloudflared -v
cloudflared tunnel loginКоманда cloudflared tunnel login вернёт URL для авторизации в вашем аккаунте Cloudflare — откройте его в браузере и завершите процедуру.
Создайте туннель (например, с именем bitwarden):
cloudflared tunnel create bitwardenСохраните ID туннеля и путь к credentials‑файлу (они понадобятся для config.yml).
Создайте конфигурационный файл:
sudo nano ~/.cloudflared/config.ymlПример содержимого (замените значения своими):
tunnel: a2efc6dg1-2c75f8-b529d3ee
credentials-file: /home/pi/.cloudflared/a2efc6dg1-2c75f8-b529d3ee.json
ingress:
- hostname: bitwarden.YourDomain.com
service: http://RaspberryPi-IP-Address:8080
- service: http_status:404Сохраните файл (Ctrl+X, Y, Enter).
Создайте DNS‑маршрут:
cloudflared tunnel route dns bitwarden bitwarden.YourDomain.comЗапустите туннель:
cloudflared tunnel run bitwardenТеперь откройте в браузере: https://bitwarden.YourDomain.com — вы будете подключаться к Vaultwarden через защищённый Cloudflare SSL‑канал.
ALT: Страница входа Bitwarden, доступная по HTTPS через Cloudflare Tunnel
Совет: запустите cloudflared как системный сервис (systemd) для автозапуска при перезагрузке. Примерные шаги:
- Создайте юнит systemd, указывающий запуск
cloudflared tunnel run --config /home/pi/.cloudflared/config.yml. - Включите и включите автозапуск через systemctl enable/start.
Вход, создание пользователей и включение MFA
- Зайдите по адресу HTTPS, создайте первую учётную запись администратора.
- Включите панель администратора (если используется Vaultwarden, настройка админ‑панели может быть включена через переменные окружения или веб‑настройки). При необходимости включите регистрацию пользователей только по приглашениям.
- Для каждой учётной записи настоятельно включайте MFA: TOTP (Google Authenticator, Authy), U2F/WebAuthn (если есть аппаратные ключи).
Импорт паролей: пользователи могут экспортировать CSV из браузера и импортировать в Bitwarden (внимательно проверьте формат CSV и удалите лишние строки перед импортом).
ALT: Интерфейс создания пользователей и включения регистрации на Vaultwarden
Безопасность: никогда не храните CSV с паролями в незашифрованном виде дольше, чем требуется для импорта.
Резервное копирование и восстановление
Резервные копии — критический элемент. Для Vaultwarden достаточно копировать содержимое тома /data (volume bitwarden_data) и, при использовании cloudflared, сохранять credentials‑файл туннеля.
Рекомендации:
- Регулярные автоматические бэкапы (ежедневно или еженедельно в зависимости от изменений).
- Хранение копий вне устройства: на зашифрованном диске или в надёжном облачном хранилище (зашифрованном клиентом).
- Тесты восстановления: периодически развертывайте бэкап в тестовой среде и проверяйте работоспособность.
Пример резервного скрипта (создаёт tar архív тома и сохраняет локально):
#!/bin/bash
BACKUP_DIR=/home/pi/bitwarden-backups
TIMESTAMP=$(date +"%Y%m%d-%H%M")
mkdir -p "$BACKUP_DIR"
sudo docker run --rm -v bitwarden_data:/data -v "$BACKUP_DIR":/backup alpine sh -c "cd /data && tar czf /backup/bitwarden-data-$TIMESTAMP.tar.gz ."
find "$BACKUP_DIR" -type f -mtime +14 -deleteЭтот скрипт сохраняет бэкапы и удаляет старые старше 14 дней. Настройте cron для автоматического запуска.
Критерии приёмки резервного бэкапа:
- Архив успешно создаётся и содержит каталоги Vaultwarden (/data).
- Успешная проверка: распаковка архива и запуск контейнера с восстановленными данными в тестовой среде.
Безопасность и харденинг (основные рекомендации)
- Всегда используйте HTTPS (Cloudflare Tunnel или обратный прокси с валидными сертификатами).
- Отключите публичную регистрацию, если хотите контролировать пользователей.
- Используйте сильные уникальные пароли для панели администратора Portainer и для учётных записей Pi.
- Обновляйте Docker‑образы и систему: sudo apt update && sudo apt upgrade.
- Ограничьте доступ SSH: используйте ключи SSH вместо паролей, измените порт по умолчанию и включите fail2ban.
- Настройте брандмауэр (ufw): разрешите только нужные исходящие и входящие соединения.
- Шифруйте резервные копии перед отправкой в облако.
Риск и смягчение:
- Уязвимость контейнера → своевременные обновления образа и контроль доступа.
- Потеря SD‑карты → регулярные бэкапы и использование внешних накопителей.
- Компрометация учётной записи администратора → двухфакторная аутентификация и аппаратные ключи.
Альтернативные подходы и когда этот путь не подходит
Когда стоить рассмотреть альтернативы:
- Если вы управляете большой организацией с сотнями пользователей и обязаны соблюдать корпоративные политики — рассмотрите официальную платную версию Bitwarden или управляемые корпоративные решения.
- Если вы не готовы поддерживать сервер и обновлять зависимости — лучше использовать надёжный коммерческий менеджер паролей.
Альтернативы:
- Bitwarden RS / Vaultwarden (лёгкий и совместимый) — для домашних/малых сред.
- Официальный Bitwarden (Docker image bitwardenrs/bitwarden) или облачный Bitwarden — для полного набора функций и поддержки.
- Другие самохостимые менеджеры: KeePassXC + синхронизация через WebDAV (больше ручной работы).
Совместимость и рекомендации по моделям Raspberry Pi
- Raspberry Pi Zero 2 W: подходит для домашнего использования, экономит энергию, но ограничен по RAM (512 МБ) и CPU — разумно ограничивать количество одновременных потоков.
- Raspberry Pi 3/4/400: предпочтительнее для нескольких одновременных пользователей и функций (резервное копирование, дополнительные сервисы).
Факторы выбора:
- Для семьи из 2–5 пользователей Pi Zero 2 W обычно хватает.
- Для команды из 10+ пользователей — используйте Pi 4 с 4 ГБ+ RAM или виртуальную машину в облаке.
Чек‑лист для ролей
Администратор:
- Создать админ‑учёт Vaultwarden и Portainer
- Включить MFA для админа
- Настроить автоматические бэкапы и тесты восстановления
- Настроить автозапуск cloudflared через systemd
- Обновлять образы Docker и ОС ежемесячно
Пользователь:
- Создать учётную запись и настроить MFA
- Импортировать пароли из CSV (удалить лишние строки)
- Проверить автозаполнение в браузере и мобильном приложении
План отката и инцидент‑рукбук
Если после обновления Vaultwarden возникла ошибка:
- Остановите проблемный контейнер: sudo docker stop bitwarden
- Запустите контейнер из предыдущего рабочего образа (если есть) или восстановите из последней рабочей резервной копии в тестовой среде.
- Проанализируйте логи: sudo docker logs bitwarden
- Если данные повреждены — восстановите архив /data из бэкапа и перезапустите контейнер.
- Сообщите пользователям о коротком простое и восстановлении доступа.
Критерии завершения инцидента:
- Сервис восстановлен и доступен по HTTPS.
- Последняя проверка целостности данных выполнена.
Тесты и приёмка (Test cases)
- Подключение: доступ к https://bitwarden.YourDomain.com из внешней сети — OK.
- Вход: успешная авторизация с MFA — OK.
- Импорт: CSV импортирует N записей без потерь — OK.
- Бэкап/восстановление: архив распаковывается и контейнер стартует на тестовой машине — OK.
Частые проблемы и способы их решения
- Невозможно подключиться через Tunnel: проверьте, авторизован ли cloudflared и правильно ли настроен hostname в config.yml.
- Контейнер падает с OOM: уменьшите worker threads или перенесите на более мощный Pi.
- Проблемы с SSL: убедитесь, что DNS указывает на Cloudflare и маршруты туннеля созданы.
Сводка
Вы развёрнули лёгкий, функциональный и безопасный менеджер паролей на Raspberry Pi Zero 2 W с помощью Vaultwarden, Docker и Cloudflare Tunnel. Такой подход даёт контроль над данными и защищённый доступ извне без прямой публикации IP. Следите за резервным копированием, обновлениями и включите MFA для всех учётных записей.
Ключевые шаги: установка OS → Docker → Portainer → Vaultwarden → Cloudflared → включение MFA и бэкапы.
Если нужно, могу подготовить готовый systemd unit для cloudflared, docker‑compose файл для Vaultwarden с переменными окружения (например, настройки SMTP для восстановления пароля) и пример скрипта автоматических бэкапов под ваш домен и путь тома.