8.2.8 Развертывание и настройка Vaultwarden на сервере

The Host Bit Banner

Vaultwarden — это легковесная серверная версия менеджера паролей Bitwarden, написанная на Rust. Позволяет безопасно хранить и синхронизировать ваши пароли на собственном сервере, полностью совместима с официальными приложениями Bitwarden.

Системные требования

Безопасность

  • никогда не размещайте Vaultwarden в открытом доступе без HTTPS;
  • Рекомендуется использовать отдельный VPS или выделенный сервер;
  • Настройте резервное копирование и храните бэкапы отдельно.

Установка Docker и Docker Compose

Перед установкой Vaultwarden необходимо установить Docker и Docker Compose. Docker позволяет запускать приложение в изолированном контейнере, избавляя вас от сложной ручной установки зависимостей и упрощая дальнейшие обновления.

Выполните поочередно следующие команды для установки Docker и Docker Compose, а также запуска сервиса Docker:

Установка Docker
sudo apt update && sudo apt upgrade -y
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker --now

docker_install

Создание структуры проекта и .env

Для организации хранения данных и конфигураций создаём отдельную папку для Vaultwarden. В этой папке будут размещены:

  • сам Docker Compose файл;
  • папка для данных (volume);
  • и файл .env с переменными окружения.

Перейдите в рабочий каталог и создайте необходимые директории:

Создание каталога
sudo mkdir -p /opt/vaultwarden/data
cd /opt/vaultwarden

Теперь создайте файл .env — в нем будут храниться настройки, которые удобно менять без правки Docker Compose файла:

.env
ADMIN_TOKEN=Замените_на_сложный_токен
DOMAIN=https://your-domain.com
DATA_FOLDER=/opt/vaultwarden/data

Генерировать сложный токен можно командой:

openssl rand -base64 48

Этот токен потребуется для доступа к админ-панели Vaultwarden.

Docker Compose файл для Vaultwarden

Теперь создадим основной конфигурационный файл — docker-compose.yml. Он определяет, какой контейнер будет использоваться, какие переменные окружения применяются, как монтируются тома и с какими сетями работает приложение. Откройте редактор и создайте файл:

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:

Установка Nginx и Certbot
sudo apt install nginx certbot python3-certbot-nginx -y

nginx_installation

Создайте файл конфигурации сайта для 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

certbot_ssl_activate

Следуйте подсказкам, согласитесь на автоматическое обновление сертификата.

Запустите Nginx снова (если он был остановлен):

sudo systemctl start nginx

Вставьте и отредактируйте следующий блок:

/etc/nginx/sites-available/vaultwarden.conf

# ================================================================
# 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

docker-compose-up

Запуск Vaultwarden

Теперь, когда вся конфигурация готова, выполните запуск всех сервисов через Docker Compose:

sudo docker-compose up -d

Вы всегда можете проверить, что сервисы работают, командой docker-compose ps:

docker-compose ps

docker-compose_ps

Проверка работы и тестирование

  • Откройте https://your-domain.com в браузере
  • Зарегистрируйте первого пользователя
  • Для входа в админ-панель используйте: https://your-domain.com/admin?admin_token=ВАШ_ТОКЕН

Vaultwarden_WebInterface

Поддерживаемые клиенты 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

  1. На экране входа в любом официальном клиенте Bitwarden найдите опцию “Self-hosted environment” или “Use a self-hosted server”.

bitwarden self-hosted

  1. Введите ваш адрес:

    https://your-domain.com # ваш домен, на котором развернут Vaultwarden
    
  2. Выполните вход или регистрацию аккаунта. Данные сразу попадут на ваш сервер.

Важно: Некоторые старые версии мобильных клиентов могут по умолчанию работать только с 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