Установка и настройка Vaultwarden на VPS: селф-хостинг менеджера паролей с Docker и SSL
TL;DR
В данном руководстве рассматривается процесс развертывания Vaultwarden (легковесной реализации Bitwarden на Rust) на виртуальном сервере под управлением Ubuntu 24.04/26.04. Мы настроим Docker-контейнеры, обеспечим автоматическое получение SSL-сертификатов через Caddy и организуем систему регулярного резервного копирования. Итогом станет полностью приватный, защищенный менеджер паролей, доступный на всех ваших устройствах без абонентской платы и ограничений облачных провайдеров.
- Стек: Docker, Docker Compose, Caddy (Reverse Proxy), Vaultwarden.
- Безопасность: Автоматический HTTPS (Let's Encrypt), Fail2ban, изоляция контейнеров.
- Сложность: Средняя (требуются базовые навыки работы в терминале Linux).
- Время выполнения: 30–45 минут.
- Результат: Собственный сервер паролей с поддержкой 2FA, вложений и организации групп.
1. Что мы настраиваем и зачем
Схема: 1. Что мы настраиваем и зачем
В 2026 году вопрос безопасности личных данных стоит острее, чем когда-либо. Популярные облачные менеджеры паролей (LastPass, 1Password, Bitwarden Cloud) остаются мишенями для масштабных хакерских атак. Селф-хостинг — это способ вернуть контроль над своими секретами. Мы будем устанавливать Vaultwarden.
Vaultwarden — это альтернативная реализация API Bitwarden, написанная на языке Rust. Она полностью совместима со всеми официальными приложениями Bitwarden (iOS, Android, расширения для браузеров, десктоп), но при этом потребляет в десятки раз меньше оперативной памяти, чем оригинальный сервер на .NET. Это делает его идеальным кандидатом для запуска на недорогом VPS.
Что вы получите в итоге:
- Полный контроль над базой данных паролей.
- Отсутствие ограничений на количество устройств и пользователей.
- Поддержку функций Premium-версии Bitwarden (2FA через YubiKey, TOTP-генератор, отчеты о безопасности) абсолютно бесплатно.
- Синхронизацию между всеми девайсами через ваш собственный домен.
Альтернативой является использование официального Bitwarden Unified или облачных версий, но Vaultwarden выигрывает за счет производительности и простоты обслуживания на малых и средних инсталляциях.
2. Какой VPS-конфиг нужен под эту задачу
Схема: 2. Какой VPS-конфиг нужен под эту задачу
Vaultwarden крайне нетребователен к ресурсам. Основную нагрузку создает не само приложение, а сопутствующие сервисы: Docker-демон и Reverse Proxy. Для комфортной работы системы на 5-10 пользователей достаточно минимальных характеристик.
| Ресурс |
Минимальные требования |
Рекомендуемые требования |
| Процессор (CPU) |
1 ядро (Shared) |
1-2 ядра (Dedicated thread) |
| Оперативная память (RAM) |
512 МБ |
1-2 ГБ (для стабильной работы Docker и кэширования) |
| Диск (SSD/NVMe) |
10 ГБ |
20 ГБ+ (с учетом бэкапов и логов) |
| ОС |
Ubuntu 22.04 LTS |
Ubuntu 24.04 / 26.04 LTS или Debian 12 |
Если вы планируете использовать Vaultwarden только для себя и семьи, можно взять VPS начального уровня. Этого будет более чем достаточно для мгновенного отклика интерфейса. Если же предполагается хранение большого количества вложений (сканы документов, ключи), стоит обратить внимание на объем дискового пространства или возможность подключения внешнего объектного хранилища (S3).
Локация сервера: Поскольку задержка (latency) критична для синхронизации мобильных приложений, выбирайте дата-центр ближе к вашему основному месту жительства. Однако, учитывая малый объем передаваемых данных, даже сервер на другом континенте будет работать приемлемо.
Dedicated vs VPS: Для менеджера паролей выделенный сервер (dedicated) является избыточным, если только вы не разворачиваете инфраструктуру на сотни сотрудников компании с жесткими требованиями к изоляции ресурсов. Для 99% задач виртуализации KVM на VPS достаточно.
3. Подготовка сервера
Схема: 3. Подготовка сервера
Прежде чем приступать к установке, необходимо базово защитить сервер. Мы предполагаем, что у вас есть свежая установка Ubuntu 24.04/26.04.
Первым делом обновим индексы пакетов и саму систему:
sudo apt update && sudo apt upgrade -y
Создадим нового пользователя с правами sudo, чтобы не работать под root (замените user на ваше имя):
adduser user
usermod -aG sudo user
Настроим базовый брандмауэр (UFW). Нам нужно открыть порты для SSH, HTTP и HTTPS:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Установим Fail2ban для защиты от брутфорс-атак на SSH:
sudo apt install fail2ban -y
Конфигурация по умолчанию уже защищает SSH, блокируя IP после нескольких неудачных попыток входа. Это критически важно для сервера, на котором хранятся ваши пароли.
4. Установка Docker и необходимых утилит
Схема: 4. Установка Docker и необходимых утилит
Vaultwarden официально распространяется в виде Docker-образа, что значительно упрощает его развертывание и обновление. Мы будем использовать современный метод установки через официальный репозиторий Docker.
Удалим старые версии, если они были:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
Установим зависимости и добавим GPG-ключ Docker:
sudo apt update
sudo apt install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Добавим репозиторий в источники apt:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
Теперь установим сам Docker и плагин Docker Compose:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Добавим нашего пользователя в группу docker, чтобы запускать контейнеры без sudo (потребуется перезаход в сессию):
sudo usermod -aG docker $USER
5. Развертывание Vaultwarden через Docker Compose
Схема: 5. Развертывание Vaultwarden через Docker Compose
Создадим рабочую директорию для нашего проекта. Это поможет держать все конфиги и данные в одном месте, что упрощает бэкап.
mkdir ~/vaultwarden && cd ~/vaultwarden
Создадим файл docker-compose.yml. В этом файле мы опишем два сервиса: сам Vaultwarden и Caddy, который будет выступать в роли веб-сервера и менеджера SSL-сертификатов.
nano docker-compose.yml
Вставьте следующее содержимое (внимательно изучите комментарии):
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
- SIGNUPS_ALLOWED=true # Разрешить регистрацию (отключим после создания аккаунта)
- ADMIN_TOKEN=your_strong_random_token # Токен для доступа к админ-панели
- DOMAIN=https://pass.yourdomain.com # Ваш домен
volumes:
- ./vw-data:/data
caddy:
image: caddy:2-alpine
container_name: caddy
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy-data:/data
- ./caddy-config:/config
depends_on:
- vaultwarden
Важно: Замените your_strong_random_token на длинную случайную строку. Вы можете сгенерировать её командой openssl rand -base64 32. Этот токен позволит вам заходить в панель управления сервером.
6. Настройка Reverse Proxy и SSL через Caddy
Схема: 6. Настройка Reverse Proxy и SSL через Caddy
Caddy — это современный веб-сервер, который автоматически получает и обновляет SSL-сертификаты от Let's Encrypt или ZeroSSL. Это избавляет нас от необходимости вручную настраивать certbot и cron-задачи.
Создадим файл конфигурации Caddyfile в той же директории:
nano Caddyfile
Добавьте в него следующие строки (замените pass.yourdomain.com на ваш реальный домен):
pass.yourdomain.com {
# Логирование (опционально)
log {
output file /data/access.log
}
# Проксирование запросов к контейнеру Vaultwarden
reverse_proxy vaultwarden:80 {
# Настройка заголовков для корректной работы WebSocket (нужно для мгновенной синхронизации)
header_up X-Real-IP {remote_host}
}
}
Перед запуском убедитесь, что ваша A-запись домена в панели управления DNS указывает на IP-адрес вашего VPS. Теперь запускаем всю связку:
docker compose up -d
Docker скачает образы и запустит контейнеры. Caddy автоматически свяжется с Let's Encrypt и выпустит сертификат. Через 1-2 минуты ваш менеджер паролей будет доступен по адресу https://pass.yourdomain.com.
7. Тонкая настройка и панель администратора
Схема: 7. Тонкая настройка и панель администратора
После первого входа и регистрации своего аккаунта, крайне рекомендуется ограничить регистрацию новых пользователей, чтобы посторонние не могли использовать ваш сервер.
Перейдите в панель администратора по адресу: https://pass.yourdomain.com/admin. Для входа используйте ADMIN_TOKEN, который вы указали в docker-compose.yml.
Рекомендуемые настройки в админ-панели:
- General settings: Отключите "Allow new signups", если вы уже создали все нужные аккаунты.
- SMTP Settings: Настройте отправку почты (например, через SendGrid, Mailgun или личный почтовый ящик). Это необходимо для верификации e-mail и получения уведомлений о новых входах.
- Security settings: Включите "Duo" или "YubiKey", если планируете использовать аппаратные ключи.
Чтобы изменения вступили в силу (если вы меняете их через файл, а не через админку), нужно перезапустить контейнер:
docker compose up -d --force-recreate
8. Бэкапы и обслуживание
Схема: 8. Бэкапы и обслуживание
База данных Vaultwarden по умолчанию хранится в SQLite (файл db.sqlite3 в папке vw-data). Это удобно, так как для бэкапа достаточно скопировать один файл. Однако делать это нужно правильно, чтобы не получить "битый" снимок во время записи в базу.
Простой скрипт для бэкапа:
Создадим скрипт backup.sh:
#!/bin/bash
BACKUP_DIR="/home/user/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
SOURCE_DIR="/home/user/vaultwarden/vw-data"
mkdir -p $BACKUP_DIR
# Используем sqlite3 .backup для безопасного копирования запущенной базы
sqlite3 $SOURCE_DIR/db.sqlite3 ".backup '$BACKUP_DIR/db_$TIMESTAMP.sqlite3'"
# Архивируем вложения и конфиги
tar -czf $BACKUP_DIR/attachments_$TIMESTAMP.tar.gz $SOURCE_DIR/attachments
# Удаляем старые бэкапы (старше 30 дней)
find $BACKUP_DIR -type f -mtime +30 -delete
Не забудьте установить sqlite3 (sudo apt install sqlite3) и дать права на выполнение скрипту (chmod +x backup.sh). Настройте выполнение по расписанию через crontab -e:
0 3 * /home/user/vaultwarden/backup.sh
Этот крон будет делать бэкап каждую ночь в 3:00. Идеально — настроить отправку этих файлов на другое хранилище (S3, Google Drive или другой VPS) с помощью rclone.
9. Troubleshooting + FAQ
Ошибка SSL: Caddy не может получить сертификат
Проверьте, открыты ли порты 80 и 443 в UFW (sudo ufw status). Также убедитесь, что домен правильно делегирован и DNS-записи обновились. В логах Caddy можно увидеть точную причину: docker logs caddy.
Vaultwarden потребляет слишком много памяти
Обычно Vaultwarden потребляет около 50-100 МБ RAM. Если вы видите значения выше 500 МБ, проверьте количество активных WebSocket-соединений или логи на наличие ошибок циклической перезагрузки. Для маленьких VPS убедитесь, что у вас включен Swap-файл.
Как обновить Vaultwarden до последней версии?
Обновление выполняется тремя командами:
docker compose pull
docker compose up -d
docker image prune -f
Какой VPS-конфиг минимально подойдёт?
Минимально достаточно 1 ядра CPU и 512 МБ RAM. Однако для комфортной работы ОС Ubuntu и Docker в 2026 году рекомендуется иметь хотя бы 1 ГБ оперативной памяти. Это предотвратит срабатывание OOM Killer (Out of Memory) при обновлении пакетов или тяжелых операциях с базой данных.
Что выбрать — VPS или dedicated для этой задачи?
Для селф-хостинга менеджера паролей VPS — оптимальный выбор. Вы получаете гибкость, легкое масштабирование и возможность делать снимки (snapshots) всей системы. Dedicated сервер нужен только в случае, если вы параноидально относитесь к соседству с другими виртуальными машинами на одном гипервизоре или если количество пользователей превышает 500 человек.
Забыл пароль администратора (Admin Token), что делать?
Вы можете изменить его в docker-compose.yml в разделе environment, после чего выполнить docker compose up -d. Если вы потеряли основной мастер-пароль от аккаунта — восстановить его невозможно, так как сервер не хранит его в открытом виде (zero-knowledge encryption). Только импорт из бэкапа в новый аккаунт.
Можно ли запустить Vaultwarden без домена?
Технически — да, по IP-адресу. Но современные браузеры и приложения Bitwarden блокируют работу криптографических API (Web Crypto API) на незащищенных соединениях (без HTTPS). Поэтому наличие домена и SSL-сертификата является обязательным требованием.
10. Выводы и следующие шаги
Мы успешно развернули защищенный, приватный менеджер паролей на собственном сервере. Теперь у вас есть инструмент, который не зависит от политики сторонних компаний и доступен только вам. Использование Docker и Caddy делает эту установку максимально современной и простой в обслуживании.
Ваши следующие шаги:
- Установите расширение Bitwarden в браузер и мобильное приложение на смартфон. В настройках приложений укажите адрес вашего сервера (Self-hosted URL).
- Включите двухфакторную аутентификацию (2FA) для своего основного аккаунта.
- Импортируйте пароли из старого менеджера (Vaultwarden поддерживает импорт из CSV/JSON практически всех популярных сервисов).
- Настройте экспорт бэкапов в облачное хранилище для максимальной сохранности данных.
Помните, что теперь ответственность за безопасность данных лежит на вас: регулярно обновляйте систему (apt update && apt upgrade) и следите за актуальностью Docker-образов.