8.2.8 Развертывание и настройка Vaultwarden на сервере
Vaultwarden — это легковесная серверная версия менеджера паролей Bitwarden, написанная на Rust. Позволяет безопасно хранить и синхронизировать ваши пароли на собственном сервере, полностью совместима с официальными приложениями Bitwarden.
Системные требования
- Заказаная услуга Виртуального сервера или Выделенного сервера
- CPU: от 1 ядра, RAM: от 1 ГБ (2 ГБ — комфортно)
- SSD: от 5 ГБ
- ОС: Ubuntu 22.04 или 24.04 LTS
- Доменное имя, указывающее на ваш сервер (A-запись)
- Открыты порты 80 и 443 (firewall)
- sudo или root-доступ
- Установлен Docker и Docker Compose
Безопасность
- никогда не размещайте Vaultwarden в открытом доступе без HTTPS;
- Рекомендуется использовать отдельный VPS или выделенный сервер;
- Настройте резервное копирование и храните бэкапы отдельно.
Установка Docker и Docker Compose
Перед установкой Vaultwarden необходимо установить Docker и Docker Compose. Docker позволяет запускать приложение в изолированном контейнере, избавляя вас от сложной ручной установки зависимостей и упрощая дальнейшие обновления.
Выполните поочередно следующие команды для установки Docker и Docker Compose, а также запуска сервиса Docker:
sudo apt update && sudo apt upgrade -y
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker --now
Создание структуры проекта и .env
Для организации хранения данных и конфигураций создаём отдельную папку для Vaultwarden. В этой папке будут размещены:
- сам Docker Compose файл;
- папка для данных (volume);
- и файл
.env
с переменными окружения.
Перейдите в рабочий каталог и создайте необходимые директории:
sudo mkdir -p /opt/vaultwarden/data
cd /opt/vaultwarden
Теперь создайте файл .env
— в нем будут храниться настройки, которые удобно менять без правки Docker Compose файла:
ADMIN_TOKEN=Замените_на_сложный_токен
DOMAIN=https://your-domain.com
DATA_FOLDER=/opt/vaultwarden/data
Генерировать сложный токен можно командой:
openssl rand -base64 48
Этот токен потребуется для доступа к админ-панели Vaultwarden.
Docker Compose файл для Vaultwarden
Теперь создадим основной конфигурационный файл — docker-compose.yml
.
Он определяет, какой контейнер будет использоваться, какие переменные окружения применяются, как монтируются тома и с какими сетями работает приложение.
Откройте редактор и создайте файл:
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
- ADMIN_TOKEN=${ADMIN_TOKEN}
- DOMAIN=${DOMAIN}
- WEBSOCKET_ENABLED=true
volumes:
- ${DATA_FOLDER}:/data
networks:
- vaultwarden-net
expose:
- "80"
- "3012"
networks:
vaultwarden-net:
driver: bridge
Обратите внимание: мы не пробрасываем порты наружу (ports), Vaultwarden будет доступен только через внутреннюю docker−сеть-- это повысит безопасность. Внешние порты проксируются через Nginx.
Настройка Nginx в качестве обратного прокси для SSL (HTTPS)
Чтобы сервер работал безопасно и поддерживал HTTPS, используйте Nginx в роли обратного прокси. Nginx будет принимать внешние запросы, автоматически перенаправлять их в контейнер Vaultwarden по защищённому соединению и обеспечивать работу SSL-сертификата. Установите Nginx и Certbot:
sudo apt install nginx certbot python3-certbot-nginx -y
Создайте файл конфигурации сайта для Nginx:
sudo nano /etc/nginx/sites-available/vaultwarden.conf
Настройка SSL-сертификата Let’s Encrypt
Если при попытке получения сертификата возникают проблемы на работающем сервере, остановите Nginx:
sudo systemctl stop nginx
Запустите Certbot для автоматической настройки HTTPS:
sudo certbot --nginx -d your-domain.com
Следуйте подсказкам, согласитесь на автоматическое обновление сертификата.
Запустите Nginx снова (если он был остановлен):
sudo systemctl start nginx
Вставьте и отредактируйте следующий блок:
# ================================================================
# 1. Перенаправление всех HTTP-запросов на HTTPS
# ================================================================
server {
listen 80;
listen [::]:80;
server_name your-domain.com; # Вместо your-domain.com укажите свой домен
# Редирект всех запросов на HTTPS
return 301 https://$host$request_uri;
}
# ================================================================
# 2. Обработка HTTPS на 443 с сертификатом Let's Encrypt
# ================================================================
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your-domain.com; # Вместо your-domain.com укажите свой домен
# Пути к сертификату и ключу от Let's Encrypt
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# Дополнительные меры безопасности (рекомендуется)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Рекомендуемые пути к параметрам DH (не обязательно, но рекомендовано для будущей совместимости)
# ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Отключить отображение версии сервера (уменьшить риск утечки информации)
server_tokens off;
# Корневой location — проксируем на внутренний порт контейнера (localhost:8080)
location / {
proxy_pass http://127.0.0.1:8080; # Если порт сопоставлен с localhost: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;
# Увеличение таймаутов при высокой нагрузке
proxy_read_timeout 90;
proxy_connect_timeout 90;
}
# WebSocket endpoint для уведомлений
location /notifications/hub {
proxy_pass http://127.0.0.1:3012; # Если порт сопоставлен с localhost:3012
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}
# При необходимости: ограничение размера запросов (для больших вложений)
client_max_body_size 128M;
}
Создайте символическую ссылку для активации сайта:
sudo ln -s /etc/nginx/sites-available/vaultwarden.conf /etc/nginx/sites-enabled/
Перезапустите Nginx:
sudo nginx -t
sudo systemctl reload nginx
Если символическая ссылка уже не создана, выполните ещё раз:
sudo ln -s /etc/nginx/sites-available/vaultwarden.conf /etc/nginx/sites-enabled/
Проверьте синтаксис Nginx:
sudo nginx -t
Убедитесь, что нет ошибок. Если ошибка появилась, исправьте её, опираясь на сообщение.
Перезапустите Nginx:
sudo systemctl restart nginx
Настройка проксирования Docker → Nginx
Vaultwarden должен быть доступен только через прокси Nginx. Для этого настройте проброс портов в Docker Compose, чтобы Nginx мог проксировать трафик от клиентов на контейнер. После внесения изменений перезапустите сервис — это позволит сделать приложение доступным по HTTPS через ваш домен.
Откорректируйте docker-compose.yml
и перезапустите Vaultwarden:
ports:
- "8080:80"
- "3012:3012"
Примените изменения:
sudo docker-compose up -d
Запуск Vaultwarden
Теперь, когда вся конфигурация готова, выполните запуск всех сервисов через Docker Compose:
sudo docker-compose up -d
Вы всегда можете проверить, что сервисы работают, командой docker-compose ps
:
docker-compose ps
Проверка работы и тестирование
- Откройте
https://your-domain.com
в браузере - Зарегистрируйте первого пользователя
- Для входа в админ-панель используйте:
https://your-domain.com/admin?admin_token=ВАШ_ТОКЕН
Поддерживаемые клиенты Vaultwarden
Vaultwarden полностью совместим с официальными клиентами Bitwarden. Это значит, что вы можете пользоваться любым привычным приложением Bitwarden для доступа к своему self-hosted серверу Vaultwarden:
Возможности клиентов:
- Синхронизация паролей, карточек, заметок и файлов между устройствами
- Автозаполнение паролей в браузерах и приложениях
- Использование двухфакторной аутентификации (TOTP, WebAuthn)
- Организация коллекций и совместная работа в команде (организации)
Официальные клиенты Bitwarden
Платформа | Где взять |
---|---|
Веб-клиент | Через браузер: https://your-domain.com (адрес вашего Vaultwarden) |
Расширение браузера | Chrome Web Store, Firefox Add-ons |
Десктоп-клиент | Windows/macOS/Linux |
Мобильное приложение | Google Play, App Store |
CLI (командная строка) | Bitwarden CLI |
Как подключиться к своему серверу Vaultwarden
- На экране входа в любом официальном клиенте Bitwarden найдите опцию “Self-hosted environment” или “Use a self-hosted server”.
-
Введите ваш адрес:
https://your-domain.com # ваш домен, на котором развернут Vaultwarden
-
Выполните вход или регистрацию аккаунта. Данные сразу попадут на ваш сервер.
Важно: Некоторые старые версии мобильных клиентов могут по умолчанию работать только с bitwarden.com. Если Вы не видите настройку “Self-hosted” — обновите приложение до последней версии!
CLI-клиент
Для продвинутых пользователей и DevOps доступен Bitwarden CLI:
bw login user@domain.com
Можно указывать свой сервер:
bw login user@domain.com --server https://your-domain.com
Cмена сервера в приложениях
- В десктопе и мобильном клиенте: в настройках, обычно на экране входа, выберите “Self-hosted” и введите URL своего Vaultwarden.
- В расширениях браузера: войдите в настройки расширения, найдите пункт “Сервер”, укажите свой домен.
- Через веб: просто откройте https://your-domain.com в браузере.
Таблица типичных проблем и быстрых решений
Ошибка | Решение |
---|---|
Сайт не открывается по HTTPS | Проверьте сертификат, домен, конфиг Nginx, firewall |
Не работает админка | Проверьте переменную ADMIN_TOKEN, не забудьте ?admin_token= |
“Cannot write to /data” | Проверьте права: chown -R 1000:1000 /opt/vaultwarden/data |
Почтовые уведомления не работают | Настройте SMTP переменные окружения в Docker Compose |
Контейнер не стартует | Проверьте логи: docker-compose logs vaultwarden |
Сертификат не обновляется | Запустите вручную: sudo certbot renew |