Vaultwarden: альтернатива Bitwarden на Rust

Vaultwarden — это сервер, совместимый с клиентами Bitwarden, написанный на Rust. Подходит для управления паролями и данными в безопасной среде. Поддержка Docker и ARM-процессоров.

0 просмотров

Установка Vaultwarden через Docker Compose на Ubuntu

Vaultwarden — лёгкий self-hosted сервер, совместимый с клиентами Bitwarden. Он позволяет хранить пароли, защищённые заметки и другие данные на собственном сервере, при этом продолжая использовать привычные приложения и браузерные расширения Bitwarden.

Для постоянной установки удобнее всего использовать Docker Compose. Все данные Vaultwarden будут храниться отдельно от контейнера, поэтому обновление или пересоздание контейнера не приведёт к потере хранилища.

В этой инструкции используем структуру:

/opt/vaultwarden/
├── compose.yaml
├── .env
└── data/

Официальный проект рекомендует запускать Vaultwarden через его контейнерные образы. Web Vault требует HTTPS и безопасного контекста браузера, поэтому для постоянного использования Vaultwarden также рекомендуется размещать за reverse proxy или другим HTTPS-прокси.

Что понадобится

Перед установкой потребуется:

Ubuntu Server
Docker Engine
Docker Compose
доменное имя — желательно
HTTPS для Web Vault

Проверяем Docker:

docker --version

Проверяем Compose:

docker compose version

Проверяем, что Docker работает:

systemctl status docker

В нормальном состоянии:

active (running)

Если Docker ещё не установлен, сначала воспользуйтесь инструкцией AppsHome по установке Docker на Ubuntu.

Создаём каталог Vaultwarden

Создадим отдельный каталог приложения:

sudo mkdir -p /opt/vaultwarden/data

Переходим в него:

cd /opt/vaultwarden

Проверяем:

pwd

Должно быть:

/opt/vaultwarden

Создаём файл .env

Чтобы не хранить основные настройки непосредственно в Compose-файле, создадим:

sudo nano /opt/vaultwarden/.env

Добавляем:

DOMAIN=https://vault.example.com
SIGNUPS_ALLOWED=true

Замените:

vault.example.com

на собственный адрес Vaultwarden.

Например:

DOMAIN=https://vault.example.de
SIGNUPS_ALLOWED=true

Параметр:

SIGNUPS_ALLOWED=true

пока оставляем включённым, чтобы создать первый пользовательский аккаунт.

После первоначальной регистрации мы его отключим.

Vaultwarden поддерживает DOMAIN и SIGNUPS_ALLOWED как штатные параметры конфигурации; по умолчанию регистрация новых пользователей разрешена, поэтому для закрытого личного сервера после создания нужных аккаунтов её разумно отключить.

Создаём Docker Compose

Открываем:

sudo nano /opt/vaultwarden/compose.yaml

Добавляем:

services:

  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden

    restart: unless-stopped

    environment:
      DOMAIN: ${DOMAIN}
      SIGNUPS_ALLOWED: ${SIGNUPS_ALLOWED}

    volumes:
      - ./data:/data

    ports:
      - "127.0.0.1:8080:80"

Официальный пример Vaultwarden также использует образ:

vaultwarden/server:latest

и сохраняет постоянные данные через каталог /data.

Почему используется 127.0.0.1

Обратите внимание на строку:

ports:
  - "127.0.0.1:8080:80"

Это означает:

контейнер Vaultwarden
        │
        │ :80
        ↓
127.0.0.1:8080

Порт будет доступен только локально на самом сервере.

Из интернета он напрямую открыт не будет.

Для административного сервиса с паролями это намного безопаснее, чем:

ports:
  - "8080:80"

которое публикует порт на всех сетевых интерфейсах.

Официальный пример Vaultwarden также показывает привязку контейнера к 127.0.0.1.

Проверяем Compose

Перед запуском:

cd /opt/vaultwarden

Выполняем:

docker compose config

Если ошибок нет, Docker покажет итоговую конфигурацию.

Особенно проверьте:

DOMAIN
SIGNUPS_ALLOWED
volume
port

Запускаем Vaultwarden

Теперь:

docker compose up -d

Docker скачает образ и создаст контейнер.

Проверяем:

docker compose ps

Должно появиться примерно:

NAME          STATUS
vaultwarden   Up

Можно также использовать:

docker ps

Проверяем журнал

Посмотрим последние сообщения:

docker logs --tail=50 vaultwarden

Следить за журналом:

docker logs -f vaultwarden

Для выхода:

Ctrl + C

Контейнер продолжит работать.

Проверяем Vaultwarden локально

Так как порт опубликован только на localhost:

curl -I http://127.0.0.1:8080

Если Vaultwarden запущен, сервер должен ответить HTTP-заголовками.

Можно также проверить:

curl http://127.0.0.1:8080/alive

Это позволяет убедиться, что контейнер работает ещё до настройки домена и HTTPS.

Почему нельзя просто использовать HTTP

Vaultwarden хранит крайне чувствительные данные, поэтому использовать его через обычный HTTP не следует.

Кроме того, Web Vault использует браузерный Web Crypto API и требует HTTPS / secure context. Сам проект прямо указывает, что для работы Web Vault HTTPS необходим.

То есть адрес вида:

http://192.168.1.100:8080

не должен использоваться как постоянный способ доступа.

Нормальная схема выглядит так:

Internet / LAN
      │
      │ HTTPS
      ↓
vault.example.com
      │
Reverse Proxy
      │
      ↓
127.0.0.1:8080
      │
      ↓
Vaultwarden

В качестве внешнего слоя можно использовать:

Nginx
Caddy
Traefik
Cloudflare Tunnel
Tailscale + HTTPS

Если используется Cloudflare Tunnel

Vaultwarden можно вообще не публиковать наружу напрямую.

Например:

Пользователь
     │
     │ HTTPS
     ↓
Cloudflare
     │
Cloudflare Tunnel
     │
     ↓
Vaultwarden

Если cloudflared работает непосредственно на хосте, origin можно направить на:

http://127.0.0.1:8080

При этом публичный порт 8080 на сервере открывать не требуется.

Если cloudflared также работает в Docker, лучше подключить оба контейнера к общей Docker-сети и обращаться к Vaultwarden по имени контейнера.

Например:

cloudflared
    │
Docker network
    │
vaultwarden:80

В такой конфигурации секцию ports: у Vaultwarden можно вообще убрать.

Первый вход

После настройки HTTPS открываем:

https://vault.example.com

Появится Web Vault.

Создаём первый пользовательский аккаунт.

Используйте:

  • уникальный email;
  • длинный master password;
  • двухфакторную авторизацию.

Особенно важно не потерять Master Password: именно он используется для защиты вашего хранилища.

Отключаем свободную регистрацию

Когда все необходимые пользователи созданы, снова открываем:

sudo nano /opt/vaultwarden/.env

Меняем:

SIGNUPS_ALLOWED=true

на:

SIGNUPS_ALLOWED=false

После изменения переменных окружения контейнер необходимо пересоздать:

cd /opt/vaultwarden
docker compose up -d

Проверяем:

docker compose config

Должно отображаться:

SIGNUPS_ALLOWED: "false"

Теперь посторонний пользователь не сможет просто зарегистрировать новый аккаунт на вашем сервере.

Где хранятся данные

В Compose указано:

volumes:
  - ./data:/data

Следовательно все постоянные данные находятся здесь:

/opt/vaultwarden/data

Контейнер:

vaultwarden

можно удалить и создать заново.

Пока каталог:

/opt/vaultwarden/data

остаётся на месте, постоянные данные сохраняются.

Это одна из основных причин, почему мы не храним важные данные непосредственно внутри контейнера.

Что находится в data

После запуска можно посмотреть:

sudo ls -lah /opt/vaultwarden/data

Там появляются база данных и другие файлы Vaultwarden.

В обычной небольшой установке Vaultwarden по умолчанию может использовать SQLite, поэтому отдельный контейнер MariaDB или PostgreSQL для домашнего сервера обычно не требуется.

Для большинства личных инсталляций это делает Vaultwarden значительно проще Nextcloud или других более тяжёлых систем.

Административная страница Vaultwarden

Vaultwarden имеет отдельную административную панель:

https://vault.example.com/admin

Но по умолчанию она должна быть защищена специальным:

ADMIN_TOKEN

Если ADMIN_TOKEN вообще не настроен, административная страница отключена. Проект рекомендует использовать не простой текстовый пароль, а Argon2-хеш.

Для первой установки админ-панель можно вообще не включать.

Vaultwarden прекрасно работает без неё.

Если она понадобится, безопасный токен можно сгенерировать непосредственно Vaultwarden:

docker exec -it vaultwarden /vaultwarden hash

Команда попросит дважды ввести пароль и создаст Argon2-хеш.

При использовании хеша в Docker Compose нужно внимательно учитывать символы $: официальная конфигурация предупреждает, что в Compose их может потребоваться экранировать как $$.

Для начинающей установки AppsHome мы рекомендуем сначала оставить админ-панель выключенной, а её настройку разобрать отдельно.

Подключаем приложения Bitwarden

Одно из главных преимуществ Vaultwarden — совместимость с клиентами Bitwarden.

Можно использовать:

Bitwarden для Windows
Bitwarden для macOS
Bitwarden для Linux
Bitwarden для Android
Bitwarden для iPhone
расширения Chrome
расширения Firefox
расширения Edge

В клиенте необходимо изменить адрес сервера.

Например:

Server URL:
https://vault.example.com

После этого выполняем вход с учётными данными, созданными в Vaultwarden.

Рекомендуем включить двухфакторную авторизацию

После первого входа стоит настроить 2FA.

Vaultwarden поддерживает несколько вариантов двухфакторной защиты, включая authenticator-приложения, email, FIDO2/WebAuthn и другие механизмы.

Для домашней установки хороший вариант:

Master Password
+
TOTP

или ещё лучше:

Master Password
+
FIDO2 Security Key

Не забудьте сохранить recovery-коды отдельно от сервера Vaultwarden.

Автоматический запуск

Мы указали:

restart: unless-stopped

Поэтому после перезагрузки Ubuntu контейнер должен запускаться автоматически вместе с Docker.

Проверить политику:

docker inspect vaultwarden \
--format '{{.HostConfig.RestartPolicy.Name}}'

Результат:

unless-stopped

Как остановить Vaultwarden

cd /opt/vaultwarden
docker compose stop

Запустить:

docker compose start

Перезапустить:

docker compose restart

Как удалить контейнер без удаления данных

cd /opt/vaultwarden
docker compose down

Контейнер будет удалён.

Но:

/opt/vaultwarden/data

останется.

Запустить снова:

docker compose up -d

Vaultwarden увидит прежние данные.

Как обновить Vaultwarden

Переходим:

cd /opt/vaultwarden

Сначала желательно сделать backup.

После этого скачиваем новую версию образа:

docker compose pull

Пересоздаём контейнер:

docker compose up -d

Проверяем:

docker compose ps

И журнал:

docker logs --tail=100 vaultwarden

Резервное копирование

Vaultwarden хранит пароли, поэтому резервная копия здесь особенно важна.

Для простого и надёжного ручного backup можно сначала остановить контейнер:

cd /opt/vaultwarden
docker compose stop

Создаём архив:

sudo tar -czf \
/opt/vaultwarden-backup-$(date +%F).tar.gz \
/opt/vaultwarden/data \
/opt/vaultwarden/compose.yaml \
/opt/vaultwarden/.env

После этого запускаем:

docker compose start

Получим, например:

/opt/vaultwarden-backup-2026-09-16.tar.gz

Но хранить единственную резервную копию на том же сервере бессмысленно.

Её нужно перенести:

на NAS
на другой сервер
на внешний диск
в зашифрованное облако

Минимально разумная схема:

Vaultwarden Server
       │
       ├── рабочие данные
       │
       └── Backup
              │
              └── другое физическое устройство

Не забываем о .env

В нашем .env нет Master Password пользователей, но в будущем там могут появиться:

SMTP_PASSWORD
ADMIN_TOKEN
другие секреты

Поэтому файл:

/opt/vaultwarden/.env

не должен быть публично доступен.

Можно ограничить права:

sudo chmod 600 /opt/vaultwarden/.env

Проверяем:

ls -l /opt/vaultwarden/.env

Проверяем состояние после установки

Полезный набор команд:

cd /opt/vaultwarden

docker compose ps
docker logs --tail=50 vaultwarden
curl http://127.0.0.1:8080/alive
docker inspect vaultwarden \
--format '{{.State.Status}}'

Если всё нормально:

running

Рекомендуемая схема AppsHome

В результате получаем:

Ubuntu Server
     │
     ├── Docker
     │     │
     │     └── Vaultwarden
     │             │
     │             └── /data
     │
     └── /opt/vaultwarden/
           ├── compose.yaml
           ├── .env
           └── data/

Снаружи:

Bitwarden Client
       │
       │ HTTPS
       ↓
vault.example.com
       │
Reverse Proxy / Tunnel
       │
       ↓
127.0.0.1:8080
       │
       ↓
Vaultwarden

Так контейнер не выставляется напрямую в интернет, данные хранятся отдельно, а доступ осуществляется только через HTTPS.

Итог

Для собственного менеджера паролей Vaultwarden очень удобен именно в Docker.

Базовая установка состоит всего из одного контейнера:

Vaultwarden
+
persistent /data
+
HTTPS
+
backup

Но поскольку здесь хранятся одни из самых важных данных пользователя, к безопасности необходимо относиться серьёзнее, чем к обычному домашнему сервису.

После установки мы рекомендуем обязательно:

✓ настроить HTTPS
✓ отключить свободную регистрацию
✓ включить 2FA
✓ регулярно обновлять Vaultwarden
✓ делать резервные копии
✓ хранить backup на другом устройстве
✓ не публиковать Docker-порт напрямую в интернет

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *