// 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:
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:
# Базовые настройки
VAULTWARDEN_DOMAIN=vault.yourdomain.com
NGINX_IMAGE=your-preferred-nginx-image:latest
# Настройки Vaultwarden
VAULTWARDEN_SIGNUPS_ALLOWED=false
VAULTWARDEN_ADMIN_TOKEN=your_secure_generated_tokenСгенерировать надежный токен для админки:
openssl rand -base64 483. Конфигурация Nginx
Создайте директорию ./nginx-templates и внутри файл vaultwarden.conf.template:
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. Запуск
docker compose up -d5. Настройка SMTP
Vaultwarden хранит настройки SMTP в файле data/config.json. Этот файл имеет приоритет над переменными окружения в .env.
Быстро прописать настройки почты:
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)
"После изменения конфигурации:
docker compose restart vaultwardenПодводный камень: Порты
25и587часто блокируются облачными провайдерами. Если почта не уходит — попробуйте2525или8025.
6. Управление регистрацией
По умолчанию регистрация отключена (SIGNUPS_ALLOWED=false). Открывайте только когда нужно добавить нового пользователя:
# Открыть регистрацию
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 напрямую во время работы сервера — используйте встроенную команду:
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
Отзывы по теме
Опыт сотрудничества оставил максимально позитивное впечатление, в первую очередь профессионализмом и подходом к решению возникающих проблем.
Опыт сотрудничества оставил максимально позитивное впечатление, в первую очередь профессионализмом и подходом к решению возникающих проблем.
Jitsi meet: персональный zoom, настройка jitsi meet в docker и на VPS
11.11.2025 · ★ 5/5
Была задача наладить работу n8n, redis и базы данных. Заказывал раньше у другого исполнителя, постоянно все ломалось. Заказал у Михаила, на следующий же день все стало работать быстро, как часы!
Была задача наладить работу n8n, redis и базы данных. Заказывал раньше у другого исполнителя, постоянно все ломалось. Заказал у Михаила, на следующий же день все стало работать быстро, как часы!
N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
24.09.2025 · ★ 5/5
Спасибо за быструю и хорошую работу. Все сделали оперативно и так как нужно!
Спасибо за быструю и хорошую работу. Все сделали оперативно и так как нужно!
N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
06.09.2025 · ★ 5/5
Быстрое решение проблемы, всем рекомендую Михаила в качестве исполнителя! Пробовал собрать аналогичную конфигурацию самостоятельно и через советы нейросетей, в результате куча потраченных сил и средств (из-за простоя сервера). Так что мой совет в итоге - обращайтесь к профессионалам, это выйдет дешевле =) Спасибо Михаилу за профессионализм.
Быстрое решение проблемы, всем рекомендую Михаила в качестве исполнителя! Пробовал собрать аналогичную конфигурацию самостоятельно и через советы нейросетей, в результате куча потраченных сил и средств (из-за простоя …
N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
25.08.2025 · ★ 5/5
Михаил выполнил настройку очередного VPS. Быстро, профессионально обходя определенные ограничение хостинг провайдеров.
Михаил выполнил настройку очередного VPS. Быстро, профессионально обходя определенные ограничение хостинг провайдеров.
N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
12.08.2025 · ★ 5/5
Отличная работа, спасибо! Михаил профессионал своего дела, рекомендую!
Отличная работа, спасибо! Михаил профессионал своего дела, рекомендую!
N8n установка на ваш vps сервер. Настройка n8n, docker, ai, telegram
03.07.2025 · ★ 5/5
// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related