Установка Vaultwarden на Ubuntu 22.04
Кому подходит эта инструкция
- Системным администраторам и DevOps-инженерам, которые хотят развернуть легковесную альтернативу Bitwarden.
- Тем, кто использует Ubuntu 22.04 и предпочитает контейнеризацию через Docker Compose v2.
Что вы получите по итогу
- Рабочий Vaultwarden с HTTPS (Let’s Encrypt через Caddy).
- Настроенный SMTP для подтверждения почты.
- Автоматические ежедневные бэкапы SQLite и инструкция по восстановлению.
- Базовые рекомендации по безопасности и сопровождающие чеклисты.

H2: Предварительные требования
- Сервер с Ubuntu 22.04.
- Неразовый (non-root) пользователь с правами sudo.
- UFW (Uncomplicated Firewall) включён и работает.
- Домен (FQDN), указывающий на сервер, например vaultwarden.example.com.
- Обновлённая система:
$ sudo apt update && sudo apt upgradeВажно: далее мы используем Docker Compose v2 (команда docker compose). Если на вашей машине используется старый docker-compose, обновите его.
H2: Шаг 1 — настройка брандмауэра (UFW)
Проверьте статус UFW:
$ sudo ufw statusОжидаемый пример вывода:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)Разрешите HTTP и HTTPS:
$ sudo ufw allow http
$ sudo ufw allow httpsПроверьте статус ещё раз, чтобы убедиться, что правила применены.
H2: Шаг 2 — установка Docker и Docker Compose
Добавьте GPG-ключ Docker и официальный репозиторий, затем установите пакеты:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-pluginЧтобы запускать docker без sudo, добавьте пользователя в группу docker:
$ sudo usermod -aG docker ${USER}Примените изменения, перелогинившись или выполнив:
$ su - ${USER}H2: Шаг 3 — файл docker-compose для Vaultwarden
Создайте каталог и файл docker-compose.yml:
$ mkdir vaultwarden
$ cd vaultwarden
$ nano docker-compose.ymlВставьте этот пример (замените DOMAIN и EMAIL):
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
WEBSOCKET_ENABLED: "true" # Enable WebSocket notifications.
DOMAIN: "https://vaultwarden.example.com"
SMTP_HOST: ""
SMTP_FROM: "<[email protected]>"
SMTP_PORT: "587"
SMTP_SECURITY: "starttls"
SMTP_USERNAME: ""
SMTP_PASSWORD: ""
volumes:
- ./vw-data:/data
caddy:
image: caddy:2
container_name: caddy
restart: always
ports:
- 80:80 # Needed for the ACME HTTP-01 challenge.
- 443:443
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-config:/config
- ./caddy-data:/data
environment:
DOMAIN: "https://vaultwarden.example.com" # Your domain.
EMAIL: "[email protected]" # The email address to use for ACME registration.
LOG_FILE: "/data/access.log" Сохраните файл (Ctrl+X → Y).
Пояснения к ключевым опциям:
- image — образ Docker на Docker Hub.
- container_name — читаемый ярлык контейнера.
- restart: always — автоперезапуск контейнера при падении.
- environment — переменные окружения для Vaultwarden и Caddy (обратите внимание на SMTP_SECURITY: starttls для 587, force_tls для 465).
- volumes — сопоставления директорий для сохранения данных между хостом и контейнером.
- ports — проброс портов (80 и 443 для Caddy, 3012 для WebSocket Vaultwarden).
H2: Шаг 4 — дополнительные параметры Vaultwarden
Ниже перечислены часто используемые переменные окружения. Добавляйте их в секцию environment контейнера vaultwarden.
Отключение регистрации
Чтобы запретить свободную регистрацию пользователей:
SIGNUPS_ALLOWED: "false"Отключение приглашений
Чтобы пользователи организаций не могли приглашать новых участников:
INVITATIONS_ALLOWED: "false"Отключение подсказок пароля
SHOW_PASSWORD_HINT: "false"Отключение веб-интерфейса (веб-ваулта)
WEB_VAULT_ENABLED: "false"Если вы хотите предоставить собственные статические файлы веб-интерфейса, смонтируйте их:
volumes:
- ./vw-data:/data
- /path/to/static/files_directory:/web-vaultЛоги и уровень логирования
По умолчанию Vaultwarden пишет в stdout. Для логирования в файл:
LOG_FILE: "/data/vaultwarden.log"Чтобы уменьшить поток логов:
LOG_LEVEL: "warn"
EXTENDED_LOGGING: "true"Важно: EXTENDED_LOGGING=true может раскрывать дополнительную информацию в логах — применяйте с осторожностью.
H2: Шаг 5 — файл Caddyfile для Vaultwarden
Создайте Caddyfile рядом с docker-compose.yml:
$ nano CaddyfileВставьте конфигурацию (переменные подставляются из environment при запуске контейнера Caddy):
{$DOMAIN}:443 {
log {
level INFO
output file {$LOG_FILE} {
roll_size 10MB
roll_keep 10
}
}
tls {$EMAIL}
encode gzip
request_body {
max_size 500MB
}
header {
X-XSS-Protection "1; mode=block"
X-Frame-Options "DENY"
X-Robots-Tag "none"
-Server
}
reverse_proxy /notifications/hub vaultwarden:3012
reverse_proxy vaultwarden:80 {
header_up X-Real-IP {remote_host}
}
}Сохраните файл. Caddy будет автоматически получать сертификат Let’s Encrypt через ACME HTTP-01.
Примечание: опция request_body max_size 500MB нужна для работы функции “Send” (отправка больших файлов).
H2: Шаг 6 — запуск Vaultwarden
Запустите сервисы в фоне:
$ docker compose up -dПроверьте контейнеры:
$ docker psОжидаемый пример: контейнер caddy на 80/443 и vaultwarden с портом 80 и 3012 (WebSocket).
H2: Шаг 7 — использование с клиентами Bitwarden
Откройте ваш домен: https://vaultwarden.example.com

Создайте аккаунт (Create Account), подтвердите почту — для этого Vaultwarden отправляет письмо проверки.

После регистрации и входа вы увидите рабочую панель Vaultwarden.

Пример письма подтверждения:

Чтобы подключить клиент Bitwarden (например расширение Chrome), укажите сервер URL в настройках расширения:

В настройках расширения введите ваш URL: https://vaultwarden.example.com и сохраните.

После входа вы получите доступ к клиенту и можете работать как с обычным Bitwarden.

H2: Шаг 8 — резервное копирование Vaultwarden
Vaultwarden по умолчанию использует SQLite, файл базы обычно находится в ./vw-data/db.sqlite3. Копирование «вслепую» не гарантирует консистентность. Рекомендуемый способ — встроенная команда sqlite3 .backup.
Установите sqlite3 и создайте каталог для бэкапов:
$ sudo apt install sqlite3
$ mkdir ~/vw-backups
$ chmod go-rwx ~/vw-backupsСоздайте systemd-сервис для однократного бэкапа:
$ sudo nano /etc/systemd/system/vaultwarden-backup.serviceВставьте (замените
[Unit]
Description=backup the vaultwarden sqlite database
[Service]
Type=oneshot
WorkingDirectory=/home//vw-backups
ExecStart=/usr/bin/env bash -c 'sqlite3 /home//vaultwarden/vw-data/db.sqlite3 ".backup backup-$(date -Is | tr : _).sqlite3"'
ExecStart=/usr/bin/find . -type f -mtime +30 -name 'backup*' -delete Запустите сервис вручную для проверки:
$ sudo systemctl start vaultwarden-backup.service
$ ls -l ~/vw-backupsПример созданного файла:
-rw-r--r-- 1 root root 196608 Jul 31 17:25 backup-2022-07-31T17_25_04+00_00.sqlite3Создайте таймер systemd для ежедневного запуска в 04:00:
$ sudo nano /etc/systemd/system/vaultwarden-backup.timerСодержимое:
[Unit]
Description=schedule vaultwarden backups
[Timer]
OnCalendar=04:00
Persistent=true
[Install]
WantedBy=multi-user.targetВключите и запустите таймер:
$ sudo systemctl enable vaultwarden-backup.timer
$ sudo systemctl start vaultwarden-backup.timerПроверьте статус:
$ systemctl status vaultwarden-backup.timerВажное замечание по бэкапу: помимо db.sqlite3 нужно сохранять директорию attachments, файл config.json и приватные ключи rsa_key* — они нужны для полной работоспособности после восстановления. Папки sends и icon_cache опциональны.
H2: Шаг 9 — восстановление Vaultwarden
- Остановите контейнеры:
$ docker compose down- Замените содержимое ./vw-data на ваши бэкапы (скопируйте db и другие файлы).
- Обязательно удалите db.sqlite3-wal (файл сиделки записи), если он присутствует, перед запуском, чтобы избежать коррумпции.
- Запустите контейнеры снова:
$ docker compose up -dПроверьте логи и состояние контейнеров.
H2: Шаг 10 — обновление Vaultwarden
Последовательность безопасного обновления контейнеров:
$ cd ~/vaultwarden
$ docker compose down --remove-orphans
$ docker compose pull
$ docker compose up -dДанные в ./vw-data сохранятся, так как это персистентный том на хосте.
H2: Рекомендации по безопасности
Важно учитывать дополнительные меры безопасности при эксплуатации Vaultwarden на продакшн-сервере:
- Шифруйте бэкапы перед отправкой на удалённое хранилище.
- Разрешайте доступ к административному интерфейсу только из доверенных сетей или через VPN.
- Ограничьте привилегии контейнеров (read-only файловые тома, seccomp, AppArmor/SELinux).
- Включите двухфакторную аутентификацию для учётных записей администраторов.
- Добавьте fail2ban для защиты от перебора паролей, используя корректный лог-формат (X-Real-IP важен в Caddy config).
- Регулярно проверяйте обновления образов Vaultwarden и Caddy и тестируйте обновления в staging перед prod.
Important: храните приватные ключи RSA и config.json отдельно и защищённо — их потеря или компрометация приведёт к проблемам с восстановлением и безопасностью.
H2: Полезные сценарии и шаблоны
Playbook: быстрый восстановительный запуск (5 минут)
- Переключите DNS на резервный домен (если нужно).
- Остановите контейнеры: docker compose down.
- Замените ./vw-data на резервную копию.
- Удалите db.sqlite3-wal.
- Запустите docker compose up -d.
- Проверьте логи docker compose logs -f caddy vaultwarden.
Check-лист для администратора (роль-based)
Администратор:
- Проверить доступность HTTPS.
- Проверить логи на ошибки при старте.
- Убедиться, что бэкапы создаются и шифруются.
Оператор (оперативная поддержка):
- Убедиться, что контейнеры запущены и healthy.
- Проверить размер и наличие Attachments.
Пользователь:
- Убедиться, что подтверждение почты приходит.
- Настроить сервер в клиенте Bitwarden (URL).
Runbook для бэкапа и отката
- Ежедневный бэкап через systemd timer.
- Хранить минимум 30 копий локально и зеркально загружать последние N на внешний сервер/облако.
- Откат: протестировать восстановление на стенде перед заменой prod-данных.
Мини-методология обновлений
- Pull образ в staging.
- Запустить контейнер в staging и прогнать smoke-tests.
- Если OK — применить в production в период низкой нагрузки.
H2: Совместимость и советы по миграции
- Эта инструкция ориентирована на Ubuntu 22.04, Docker и Docker Compose v2 (плагин).
- Vaultwarden по умолчанию использует SQLite; для крупных инсталляций рассмотрите внешнюю СУБД (Postgres) — проверяйте официальную документацию Vaultwarden для поддерживаемых конфигураций и ограничений.
- Тестируйте миграции баз данных на копии данных перед применением на production.
H2: Факты и важные параметры
- Порты: HTTP 80, HTTPS 443, WebSocket Vaultwarden 3012.
- Рекомендуемый max_size в Caddy для Send: 500MB.
- Пример расписания бэкапов в статье: 04:00 ежедневно.
- Локация данных в примере: ./vw-data (в контейнере /data).
H2: Критерии приёмки
- Сайт доступен по HTTPS и сертификат валиден.
- Пользователь может зарегистрироваться и подтвердить email.
- Клиент Bitwarden подключается к указанному URL и синхронизирует данные.
- Бэкап создаётся и успешно восстанавливается на тестовом стенде.
H2: Глоссарий одной строкой
- Vaultwarden — неофициальный сервер Bitwarden, написан на Rust.
- Caddy — веб-сервер с автоматическим управлением TLS (Let’s Encrypt).
- WebSocket — канал для уведомлений (порт 3012).
- ACME HTTP-01 — метод получения TLS-сертификата через HTTP.
H2: Заключение
Вы развернули Vaultwarden с HTTPS, настроили SMTP и автоматические бэкапы. Для безопасной эксплуатации в продакшн-окружении дополнительно рекомендуем вынести СУБД (если нужна масштабируемость), шифровать и удалённо сохранять бэкапы, ограничить доступ к административным интерфейсам и тестировать обновления в staging. Если остались вопросы, проверьте логи контейнеров и официальную документацию Vaultwarden.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента