Пароли расползаются по браузерам, заметкам и стикерам, а платные облачные менеджеры просят подписку за каждое устройство. Vaultwarden — это лёгкая реализация серверной части Bitwarden на Rust, полностью совместимая с официальными клиентами и расширениями браузера. Разберём, как выглядит vaultwarden установка на собственном VPS: поднимем сервис в Docker, закроем его HTTPS и получим свой Bitwarden под полным контролем. В итоге все пароли будут храниться на вашем сервере, а не в чужом облаке.
Почему Vaultwarden, а не облачная подписка
Официальный сервер Bitwarden написан на C# и тянет за собой несколько контейнеров, SQL-сервер и заметные требования к памяти. Vaultwarden делает то же самое в одном небольшом контейнере на Rust: он занимает десятки мегабайт RAM и спокойно работает даже на минимальном тарифе. При этом клиенты остаются родными — мобильное приложение Bitwarden, десктоп и браузерные расширения подключаются к вашему серверу так же, как к официальному облаку.
Ключевые причины держать менеджер паролей у себя:
- Данные не покидают ваш сервер, а хранилище зашифровано ключом, который знаете только вы.
- Нет ежемесячной платы за организации, вложения или двухфакторную аутентификацию — всё это доступно бесплатно.
- Полный контроль над бэкапами: база SQLite умещается в один файл, который легко копировать.
- Возможность закрыть доступ фаерволом или спрятать сервис за VPN.
Для такого сервиса не нужен мощный сервер. Vaultwarden прекрасно живёт на NAT VPS с общим IPv4 и проброшенными портами — трафика он создаёт мало, а порт 25 (закрытый на NAT-тарифах) ему не нужен, потому что почтовые уведомления работают через внешний SMTP по портам 465 или 587.
Что понадобится перед установкой
Минимальный набор — сервер с Linux, установленный Docker и доменное имя, направленное на IP сервера. Домен важен: браузерные расширения Bitwarden отказываются работать с хранилищем без HTTPS, поэтому самоподписанный сертификат или доступ по голому IP не подойдут для повседневного использования.
| Компонент | Зачем нужен | Комментарий |
|---|---|---|
| VPS | Хостинг сервиса | Хватит NAT Base от Cheap-Host |
| Домен или поддомен | Для валидного HTTPS | Например, vault.example.com |
| Docker и Docker Compose | Запуск контейнера | Один compose-файл |
| Reverse proxy | Терминация TLS | Nginx или Caddy |
Если Docker ещё не стоит, поставьте его по инструкции из статьи Docker на VPS: установка и первые шаги. Дальше я предполагаю, что docker и плагин docker compose уже доступны.
Шаг 1. Готовим директорию и данные
Создадим отдельную папку для сервиса и каталог, куда Vaultwarden будет складывать базу и вложения. Держать данные на отдельном томе удобно для бэкапов.
# Создаём рабочую директорию проекта
mkdir -p /opt/vaultwarden/data
cd /opt/vaultwarden
Каталог data смонтируем внутрь контейнера. Именно в нём окажутся файл db.sqlite3, ключи RSA для токенов и загруженные вложения — эти файлы и есть всё ваше хранилище.
Шаг 2. Пишем docker-compose.yml
Опишем сервис в compose-файле. Обратите внимание на переменную ADMIN_TOKEN — это пароль к административной панели, и его нужно заменить на длинную случайную строку. Регистрацию новых пользователей мы отключаем, чтобы посторонние не могли создать аккаунт на вашем сервере.
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
# Внешний адрес сервиса, обязателен для работы клиентов
DOMAIN: "https://vault.example.com"
# Отключаем открытую регистрацию после создания своего аккаунта
SIGNUPS_ALLOWED: "false"
# Длинный случайный токен для входа в /admin
ADMIN_TOKEN: "ЗАМЕНИТЕ_НА_ДЛИННУЮ_СЛУЧАЙНУЮ_СТРОКУ"
volumes:
- ./data:/data
ports:
# Слушаем только localhost, наружу пустим через reverse proxy
- "127.0.0.1:8080:80"
Сгенерировать надёжный токен для ADMIN_TOKEN можно прямо в терминале:
# Печатаем 48 случайных байт в base64 — годится как admin-токен
openssl rand -base64 48
Скопируйте результат в compose-файл. Порт мы намеренно привязали к 127.0.0.1, чтобы контейнер не торчал в интернет напрямую — весь внешний трафик пойдёт через reverse proxy с TLS.
Шаг 3. Запускаем контейнер
# Запускаем сервис в фоне
docker compose up -d
# Проверяем, что контейнер поднялся
docker compose ps
# Смотрим логи на предмет ошибок
docker compose logs -f vaultwarden
Если в логах видно строку о том, что сервис слушает порт 80 внутри контейнера, значит всё в порядке. Локально Vaultwarden уже доступен на 127.0.0.1:8080, но открывать его пока рано — сначала настроим HTTPS. Подробнее про работу с compose-стеками читайте в материале Docker Compose на практике.
Шаг 4. Reverse proxy и HTTPS
Vaultwarden нельзя выставлять в интернет без шифрования: через него ходят все ваши пароли. Поднимем перед ним Nginx, который примет HTTPS-запросы и проксирует их на локальный порт. Сертификат возьмём у Let's Encrypt.
server {
listen 443 ssl http2;
server_name vault.example.com;
ssl_certificate /etc/letsencrypt/live/vault.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vault.example.com/privkey.pem;
# Vaultwarden отдаёт крупные вложения — увеличиваем лимит тела запроса
client_max_body_size 128M;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Как выпустить и автоматически продлевать сертификат, подробно описано в статье SSL-сертификат Let's Encrypt. Если вы предпочитаете единый шлюз для нескольких сервисов, посмотрите Nginx как reverse proxy — там разобрана типовая схема с несколькими бэкендами за одним доменом.
После перезагрузки конфигурации проверьте синтаксис и примените изменения:
# Проверяем конфиг и перечитываем без остановки сервиса
nginx -t && systemctl reload nginx
Шаг 5. Первый вход и создание аккаунта
Откройте https://vault.example.com в браузере. Поскольку регистрация отключена флагом SIGNUPS_ALLOWED: false, временно включите её, создайте свой аккаунт и снова выключите. Проще всего сделать это через админ-панель по адресу /admin, куда вы войдёте с помощью ADMIN_TOKEN.
Порядок действий:
- Зайдите в
https://vault.example.com/adminи введите admin-токен. - В разделе настроек временно разрешите регистрацию (
SIGNUPS_ALLOWED). - На главной странице создайте свой пользовательский аккаунт с надёжным мастер-паролем.
- Вернитесь в админку и снова запретите регистрацию.
Мастер-пароль — единственный ключ ко всему хранилищу. Его невозможно восстановить: если вы его забудете, данные будут потеряны. Запишите его в надёжном месте и по возможности включите двухфакторную аутентификацию в настройках аккаунта.
Шаг 6. Подключаем клиенты
Теперь установите официальное расширение Bitwarden в браузер или приложение на телефон. В настройках подключения (обычно шестерёнка на экране входа) укажите адрес своего сервера — https://vault.example.com. После этого вход выполняется вашей почтой и мастер-паролем, а синхронизация идёт через ваш VPS.
Один и тот же аккаунт работает на всех устройствах одновременно: изменили пароль на телефоне — он тут же появится в браузере на компьютере. Это ровно та же логика, что и у платного Bitwarden, только сервер ваш.
Шаг 7. Резервное копирование хранилища
Все ценные данные лежат в каталоге data. Достаточно регулярно копировать его в безопасное место. Простейший бэкап — остановить контейнер и заархивировать папку.
# Останавливаем сервис, чтобы SQLite не писала во время копирования
docker compose stop vaultwarden
# Архивируем данные с датой в имени файла
tar czf /opt/backups/vaultwarden-$(date +%F).tar.gz -C /opt/vaultwarden data
# Запускаем обратно
docker compose start vaultwarden
Чтобы не делать это руками, автоматизируйте выгрузку по расписанию и храните копии вне сервера. Готовые сценарии и ротацию бэкапов разбираем в статье Резервное копирование VPS. Хорошая практика — держать хотя бы одну копию на другой машине или в объектном хранилище, чтобы потеря сервера не означала потерю всех паролей.
Обслуживание и обновления
Vaultwarden обновляется простой заменой образа. Перед обновлением обязательно сделайте бэкап данных.
# Подтягиваем свежий образ и пересоздаём контейнер
docker compose pull
docker compose up -d
Старые образы можно периодически чистить командой docker image prune, чтобы не забивать диск. Следите за логами после обновления: если что-то пошло не так, откатиться легко — вернуть предыдущий образ и восстановить каталог data из архива.
Частые вопросы
Чем Vaultwarden отличается от официального Bitwarden?
Vaultwarden — это неофициальная серверная реализация на Rust, полностью совместимая с клиентами Bitwarden. Функционально для личного использования она предлагает даже больше: премиум-возможности вроде вложений и организаций доступны без подписки. При этом ресурсов она потребляет в разы меньше, поэтому подходит для маленьких серверов.
Хватит ли NAT VPS для менеджера паролей?
Да, с запасом. Vaultwarden потребляет десятки мегабайт памяти и почти не нагружает процессор, ведь всё шифрование происходит на стороне клиента. NAT Base от Cheap-Host с проброшенными портами полностью закрывает эту задачу. Порт 25 сервису не нужен — почтовые уведомления идут через внешний SMTP по портам 465 или 587.
Обязателен ли домен и HTTPS?
Для повседневной работы — да. Браузерные расширения Bitwarden отказываются подключаться к хранилищу без валидного HTTPS, а передавать пароли по незашифрованному каналу небезопасно в принципе. Поэтому нужен домен и сертификат от Let's Encrypt, а не доступ по голому IP.
Что будет, если я забуду мастер-пароль?
Восстановить хранилище будет невозможно. Мастер-пароль используется для шифрования данных на стороне клиента, и сервер его не хранит. Именно поэтому важно записать пароль в надёжном месте и настроить регулярные бэкапы каталога с данными.
Насколько это безопасно держать пароли на своём сервере?
Безопасно при базовой гигиене: закрытый фаервол, обновления, HTTPS и отключённая открытая регистрация. Данные шифруются до отправки на сервер, поэтому даже при доступе к файлам без мастер-пароля их не прочитать. Для дополнительной защиты сервис можно спрятать за VPN — например, поднять WireGuard на VPS и открывать хранилище только внутри туннеля.
Пора завести свой менеджер паролей
Vaultwarden — тот случай, когда небольшой сервер полностью решает задачу, за которую обычно берут ежемесячную плату. Для него достаточно NAT Base с общим IPv4 и проброшенными портами: сервис лёгкий, а данные при этом остаются под вашим контролем. Выберите подходящий тариф на Cheap-Host, поднимите контейнер по шагам выше и перенесите пароли из чужих облаков к себе.