// DevOps

Vaultwarden: самохостинг менеджера паролей за 30 минут

Опубликовано 22.09.2026

Vaultwarden — неофициальная реализация сервера Bitwarden на Rust (лицензия AGPL-3.0, на сентябрь 2026 года актуальна версия 1.37.3). Она требует заметно меньше ресурсов, чем официальный сервер, работает со всеми официальными клиентами Bitwarden и поддерживает большую часть платных функций. Это удобный вариант для личного использования и небольшой команды. Чем Vaultwarden отличается от официального Bitwarden и когда что выбрать, разобрано в статье «Менеджеры паролей: Часть 3 — Bitwarden и Vaultwarden».

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

  • VPS с Ubuntu 22.04/24.04 (вполне хватит 1 vCPU и 1 ГБ RAM).
  • Установленные Docker и Docker Compose.
  • Домен с настроенной A-записью, указывающей на IP-адрес вашего сервера.
  • SMTP-сервис для отправки системных писем (приглашения, подтверждения входа).

1. Настройка docker-compose.yaml

Разворачиваем два контейнера: Vaultwarden и Nginx в роли обратного прокси с сертификатами Let’s Encrypt. HTTPS обязателен: без него браузерные клиенты Bitwarden не работают с сервером, так как веб-криптография в браузере доступна только в защищённом контексте.

Создайте рабочую директорию и файл docker-compose.yaml:

yaml
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      - SIGNUPS_ALLOWED=${VAULTWARDEN_SIGNUPS_ALLOWED}
      - ADMIN_TOKEN=${VAULTWARDEN_ADMIN_TOKEN}
    volumes:
      - ./vaultwarden-data:/data

  nginx:
    image: ${NGINX_IMAGE}
    container_name: nginx-proxy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    environment:
      - DOMAIN=${VAULTWARDEN_DOMAIN}
    volumes:
      - ./nginx-templates:/opt/nginx-templates:ro
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - vaultwarden

Важно: ADMIN_TOKEN открывает веб-панель администратора по адресу /admin. Задавайте его хешем Argon2 (раздел 2), а не открытым текстом, и уберите из конфигурации, когда панель больше не нужна. Отдельная переменная WEBSOCKET_ENABLED больше не нужна: с версии 1.29 WebSocket работает на основном порту.


2. Переменные окружения (.env)

Рядом с docker-compose.yaml создайте файл .env:

env
# Базовые настройки
VAULTWARDEN_DOMAIN=vault.yourdomain.com
NGINX_IMAGE=your-preferred-nginx-image:latest

# Настройки Vaultwarden
VAULTWARDEN_SIGNUPS_ALLOWED=false
# хеш Argon2 в одинарных кавычках, знаки $ не экранируются
VAULTWARDEN_ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$...'

Токен задаётся не открытым текстом, а хешем Argon2id в формате PHC. Vaultwarden сам сгенерирует хеш: команда спросит пароль, который вы потом будете вводить на странице /admin.

bash
docker run --rm -it vaultwarden/server /vaultwarden hash
# облегчённые параметры по рекомендации OWASP:
docker run --rm -it vaultwarden/server /vaultwarden hash --preset owasp

Как записать хеш, зависит от места:

  • в файле .env — как есть, в одинарных кавычках;
  • прямо в environment файла docker-compose.yaml — каждый знак $ удваивается ($$argon2id$$v=19$$...), иначе Compose примет его за переменную.

Если оставить токен открытым текстом, Vaultwarden запишет в журнал предупреждение «You are using a plain text ADMIN_TOKEN which is insecure».


3. Конфигурация Nginx

Создайте директорию ./nginx-templates и внутри файл vaultwarden.conf.template:

nginx
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name __VAULTWARDEN_DOMAIN__;

    ssl_certificate /etc/letsencrypt/live/__VAULTWARDEN_DOMAIN__/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/__VAULTWARDEN_DOMAIN__/privkey.pem;

    client_max_body_size 128m;

    # WebSocket для live-sync (с Vaultwarden 1.29+ использует тот же порт 80)
    location /notifications/hub {
        proxy_pass http://vaultwarden:80;
        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;
    }

    location / {
        proxy_pass http://vaultwarden:80;
        proxy_http_version 1.1;
        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 3600;
        proxy_send_timeout 3600;
    }
}

Если Nginx-образ не поддерживает автозамену переменных — замените __VAULTWARDEN_DOMAIN__ на реальный домен вручную и переименуйте файл в .conf.


4. Запуск

bash
docker compose up -d

5. Настройка SMTP

Настройки, сохранённые через панель /admin, Vaultwarden пишет в файл data/config.json, и для большинства параметров этот файл имеет приоритет над переменными окружения. SMTP проще всего настроить в самой панели; ниже — способ без неё, прямой правкой файла.

Быстро прописать настройки почты:

python
python3 -c "
import json
with open('./vaultwarden-data/config.json') as f:
    c = json.load(f)
c.update({
    'smtp_host': 'mail.your-provider.com',
    'smtp_port': 587,
    'smtp_security': 'starttls',
    'smtp_username': 'your-username',
    'smtp_password': 'your-password',
    'smtp_from': 'no-reply@yourdomain.com',
    'smtp_from_name': 'Vaultwarden',
    '_enable_smtp': True,
})
with open('./vaultwarden-data/config.json', 'w') as f:
    json.dump(c, f, indent=2)
"

После изменения конфигурации:

bash
docker compose restart vaultwarden

Подводный камень: Порты 25 и 587 часто блокируются облачными провайдерами. Если почта не уходит — попробуйте 2525 или 8025.


6. Управление регистрацией

У самого Vaultwarden регистрация по умолчанию открыта (SIGNUPS_ALLOWED=true), поэтому в .env мы её закрыли. Открывайте её только на время добавления нового пользователя (или приглашайте пользователей из панели /admin):

bash
# Открыть регистрацию
sed -i 's/VAULTWARDEN_SIGNUPS_ALLOWED=false/VAULTWARDEN_SIGNUPS_ALLOWED=true/' .env
docker compose up -d --force-recreate vaultwarden

# Закрыть после того, как пользователь создал аккаунт
sed -i 's/VAULTWARDEN_SIGNUPS_ALLOWED=true/VAULTWARDEN_SIGNUPS_ALLOWED=false/' .env
docker compose up -d --force-recreate vaultwarden

Если регистрация не включается через .env — проверьте значение "signups_allowed" внутри config.json: он имеет приоритет.


7. Что бэкапить?

ФайлВажностьОписание
db.sqlite3КритичноОсновная БД со всеми зашифрованными паролями
rsa_key.pemКритичноКлючи шифрования
config.jsonВажноКонфигурация сервера (SMTP и др.)
attachments/ВажноФайлы, прикреплённые к заметкам

Никогда не копируйте db.sqlite3 напрямую во время работы сервера — используйте встроенную команду:

bash
sqlite3 ./vaultwarden-data/db.sqlite3 ".backup /backup/db.sqlite3"

Клиенты

С вашим сервером работают все официальные клиенты Bitwarden. При первом входе нажмите на шестеренку (настройки сервера) и в поле Self-hosted URL укажите https://vault.yourdomain.com.

Доступно для: Chrome, Firefox, Safari, iOS, Android, macOS, Windows, Linux и CLI.


Итог

Развёртывание Vaultwarden занимает около получаса и не требует мощного сервера. Главные нюансы: токен админки — только хешем Argon2, обязательный HTTPS, доступность портов SMTP, приоритет config.json над .env и то, что с версии 1.29 WebSocket работает на основном порту 80, а не на отдельном 3012.

Дальше: Bitwarden CLI — управление паролями из терминала и автоматизация CI/CD.

// Reviews

Отзывы по теме

Опыт сотрудничества оставил максимально позитивное впечатление, в первую очередь профессионализмом и подходом к решению возникающих проблем.

Опыт сотрудничества оставил максимально позитивное впечатление, в первую очередь профессионализмом и подходом к решению возникающих проблем.

mendarinno384

Jitsi meet: персональный zoom, настройка jitsi meet в docker и на VPS

11.11.2025 · ★ 5/5

Была задача наладить работу n8n, redis и базы данных. Заказывал раньше у другого исполнителя, постоянно все ломалось. Заказал у Михаила, на следующий же день все стало работать быстро, как часы!

Была задача наладить работу n8n, redis и базы данных. Заказывал раньше у другого исполнителя, постоянно все ломалось. Заказал у Михаила, на следующий же день все стало работать быстро, как часы!

christ_media

N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram

24.09.2025 · ★ 5/5

Опытный покупатель

ladohinpy

N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram

25.08.2025 · ★ 5/5

Михаил выполнил настройку очередного VPS. Быстро, профессионально обходя определенные ограничение хостинг провайдеров.

Михаил выполнил настройку очередного VPS. Быстро, профессионально обходя определенные ограничение хостинг провайдеров.

NadoBy

NadoBy

N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram

12.08.2025 · ★ 5/5

Освоившийся покупатель

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Написать в Telegram

Отвечаю в течение рабочего дня (03:00–13:00 GMT)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ