// DevOps

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

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

Vaultwarden — это легковесная реализация сервера Bitwarden, написанная на Rust. Она потребляет всего около 30 МБ оперативной памяти (вместо гигабайт у официального сервера), поддерживает все официальные клиенты Bitwarden и предоставляет доступ к большей части премиум-функций. Идеальное решение для личного использования или небольшой команды.

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

  • 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 в роли reverse-proxy.

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

yaml
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      - WEBSOCKET_ENABLED=true
      - 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. После завершения базовой настройки рекомендуется убрать этот токен из конфигурации.


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

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

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

# Настройки Vaultwarden
VAULTWARDEN_SIGNUPS_ALLOWED=false
VAULTWARDEN_ADMIN_TOKEN=your_secure_generated_token

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

bash
openssl rand -base64 48

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

Vaultwarden хранит настройки SMTP в файле data/config.json. Этот файл имеет приоритет над переменными окружения в .env.

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

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. Управление регистрацией

По умолчанию регистрация отключена (SIGNUPS_ALLOWED=false). Открывайте только когда нужно добавить нового пользователя:

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 занимает не более получаса при минимальных ресурсах. Главные нюансы: доступность портов 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)

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

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