Все пароли — на вашем сервере, а не в чужом облаке. Работает с официальными Bitwarden-приложениями на всех устройствах. Поднимается за 15 минут.
Vaultwarden — это open-source реализация сервера Bitwarden. Делает всё то же самое: синхронизирует пароли между устройствами, генерирует стойкие пароли, хранит заметки и данные карт. Но запускается в одном Docker-контейнере и в простое ест около 30 МБ RAM. Официальный сервер Bitwarden занимает 11 контейнеров и принципиально больше ресурсов.
Мы разворачивали Vaultwarden на VPS is*hosting. Гайд — каждый шаг, включая одну ошибку конфига, которую мы допустили, и как её исправили.
Заходите на is*hosting и заказывайте тариф Lite VPS:
Vaultwarden очень лёгкий — около 30 МБ RAM в простое. Тариф Lite справляется без проблем. Если планируете запускать на том же VPS другие сервисы, берите тариф с запасом (например, как мы поставили Hermes на том же сервере).
Почему именно VPS, а не ноутбук или бесплатный тир? Менеджер паролей должен быть доступен круглосуточно, иначе синхронизация ломается в самый неудобный момент. Плюс это данные, которые нельзя потерять из-за OOM-kill на соседнем контейнере. Тарифы is*hosting — фиксированные цены, KVM на NVMe, бесплатные еженедельные бэкапы и инженеры в поддержке, а не скрипт первой линии.
После оплаты по готовности сервера вам на почту придут IP-адрес и root-пароль. Сохраните оба.
VPS Lite от $5.94/мес: 1 vCPU, 1 ГБ RAM, 20 ГБ NVMe в 40+ локациях, с бесплатными еженедельными бэкапами — этого хватит на свой Vaultwarden.
ssh root@ВАШ_IP
Введите пароль (он не отображается на экране — это нормально). Когда увидите root@server:~# — вы внутри. Хотите вход по ключу вместо пароля? Гайд по настройке SSH — займёт пять минут.
curl -fsSL https://get.docker.com | bash
Подождите 1-2 минуты.
Создайте директорию и файл Docker Compose:
mkdir /root/vaultwarden
nano /root/vaultwarden/docker-compose.yml
Вставьте:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "127.0.0.1:8080:80"
volumes:
- ./data:/data
Сохраните: Ctrl+O → Enter → Ctrl+X.
Запустите:
cd /root/vaultwarden
docker compose up -d
Docker скачает образ (около 30 секунд). Вы увидите что-то вроде:
✔ Image vaultwarden/server:latest Pulled
✔ Network vaultwarden_default Created
✔ Container vaultwarden Started
Проверьте, что работает:
curl -s http://localhost:8080 | head -5
Если в ответ пришёл HTML, то всё запущено.
Обратите внимание на bind: 127.0.0.1:8080:80 держит Vaultwarden на loopback — он доступен только через Caddy по HTTPS. Если написать просто "8080:80" (без привязки к 127.0.0.1), хранилище откроется по plain HTTP на публичном IP, а для менеджера паролей это дыра. На нашем Lite-сервере docker stats --no-stream показал контейнер в простое: ~28 МБ, один процесс, никакого database-сервера.
Vaultwarden требует HTTPS. Без него веб-хранилище не даст создать аккаунт. Нужен домен и SSL-сертификат.
Используйте DuckDNS (бесплатно):
Установите Caddy на VPS, он после сам занимается SSL:
apt install -y caddy
Настройте Caddy:
nano /etc/caddy/Caddyfile
Очистите файл (Ctrl+K пока не пусто) и вставьте:
ВАШ_ДОМЕН.duckdns.org {
reverse_proxy localhost:8080
}
Замените ВАШ_ДОМЕН.duckdns.org на реальный домен. Сохраните, перезапустите:
systemctl restart caddy
Подождите 10-15 секунд. Caddy получит SSL-сертификат от Let's Encrypt автоматически.
Откройте файрвол. Сначала разрешите SSH. Если включить ufw с открытым только портом 443, вы заблокируете себе доступ к серверу:
ufw allow OpenSSH
ufw allow 443/tcp
ufw enable
ufw status
Откройте https://ВАШ_ДОМЕН.duckdns.org в браузере. Должна появиться страница входа Vaultwarden.
Следите за номером порта. Самая частая ошибка — Caddy смотрит не на тот порт. Vaultwarden работает на порту 8080. Если на этом же VPS есть другие сервисы, убедитесь, что каждый блок Caddy указывает на правильный порт. Симптом ошибки: 502 Bad Gateway или connection refused в логах Caddy.
Нажмите Create Account на странице Vaultwarden. Введите:
Нажмите Create Account.
Отключите публичную регистрацию сразу после создания аккаунта — не оставляйте сервер открытым для посторонних. Добавьте переменную окружения в Docker Compose:
nano /root/vaultwarden/docker-compose.yml
Добавьте блок environment:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
- SIGNUPS_ALLOWED=false
ports:
- "127.0.0.1:8080:80"
volumes:
- ./data:/data
После перезапустите:
cd /root/vaultwarden && docker compose up -d
Vaultwarden полностью совместим с официальными Bitwarden-приложениями:
В каждом приложении перед входом:
Все пароли синхронизируются между устройствами через ваш сервер.
Caddy не может достучаться до Vaultwarden. Проверьте:
Контейнер запущен?
docker ps
Vaultwarden должен быть в списке. Если нет:
cd /root/vaultwarden && docker compose up -d
Caddy смотрит на правильный порт?
cat /etc/caddy/Caddyfile
В блоке Vaultwarden должно быть reverse_proxy localhost:8080. Не 7788, не 80 — 8080.
После исправления перезапустите Caddy:
systemctl restart caddy
Вы заходите по http:// вместо https://. Веб-хранилище требует HTTPS для всех операций с аккаунтом. Настройте Caddy с доменом (Шаг 5).
cd /root/vaultwarden && docker compose up -d # запустить
cd /root/vaultwarden && docker compose down # остановить
cd /root/vaultwarden && docker compose restart # перезапустить
docker logs vaultwarden --tail 20 # посмотреть логи
docker ps # статус контейнеров
Пароли лежат в /root/vaultwarden/data/. Бэкапьте регулярно:
cp -r /root/vaultwarden/data /root/vaultwarden-backup-$(date +%Y%m%d)
Для автоматического бэкапа добавьте cron-задачу:
crontab -e
Добавьте строку:
0 3 * * * cp -r /root/vaultwarden/data /root/vaultwarden-backup-$(date +\%Y\%m\%d)
Бэкап будет создаваться каждый день в 3:00.
Здесь работают два уровня защиты. is*hosting включает бесплатные еженедельные бэкапы на всех тарифах (полный снапшот сервера). Cron-копия выше — быстрый целевой слой: это только данные хранилища, восстановление одной командой, а не откат всего сервера. Держите оба.
Документация: github.com/dani-garcia/vaultwarden/wiki
Хранилище шифруется мастер-паролем на стороне клиента — до того, как что-то попадает на сервер. Шифрование одинаковое вне зависимости от того, какой сервер хранит данные. Разница — в серверном коде: Vaultwarden — это реализация от сообщества, не официальный код Bitwarden. Держите HTTPS включённым, отключите открытую регистрацию, защитите admin-токен и поверхность атаки будет маленькой.
Да, расширение для браузера, мобильные приложения и десктоп-клиент подключаются без каких-либо правок. Перед входом укажите URL вашего сервера в поле self-hosted.
Нужен HTTPS, но не обязательно платный домен. Бесплатный поддомен DuckDNS работает нормально, и Caddy выпускает сертификат автоматически.
Vaultwarden работает на самом дешёвом тарифе is*hosting. Тариф VPS Lite (1 vCPU / 1 GB RAM / 20 GB NVMe) — $6.99/мес или $5.94/мес при оплате на год — доступен в 40+ локациях. Выберите юрисдикцию, где хотите хранить пароли, задеплойте и подключите Bitwarden-приложения.