Пошаговая инструкция · Самостоятельная установка
Как установить Vaultwarden на Ubuntu и закрыть регистрацию
Пошаговая инструкция для самостоятельной установки. Поставим Vaultwarden на отдельный сервер с HTTPS, создадим первый аккаунт и закроем свободную регистрацию. Проверим синхронизацию Bitwarden-клиента и подготовим восстановление базы и вложений.
Что подготовить и как читать инструкцию #
Vaultwarden — самостоятельная реализация сервера, с которым работают клиенты Bitwarden. Это отдельный проект, а не официальный сервер Bitwarden. В инструкции используем один контейнер, SQLite и каталог на диске; схема подходит для небольшой команды, которой достаточно одного узла и согласованной остановки для обслуживания.
Подготовьте чистую Ubuntu 26.04 LTS, домен vault.example.com и SSH-доступ. Docker Engine, Compose v2, Nginx и базовый firewall устанавливаются по общей инструкции. Контейнер изолирует зависимости приложения от хоста; сам по себе этот выбор не подтверждает проверку сервиса на Ubuntu 26.04. Рабочие пароли переносите только после собственных проверок.
Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.
Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.
Настройка внешнего доступа использует обратный прокси Nginx и Certbot для Nginx. Приложение остаётся доступным на локальном порту; снаружи открыт его HTTPS-домен.
Шаг 1. Подготовьте постоянное хранилище #
Данные будут в vw-data, за пределами контейнера. Пересоздание контейнера не должно удалять этот каталог; ограничим его права.
mkdir -p ~/services/vaultwarden/vw-data
cd ~/services/vaultwarden
chmod 700 vw-dataТекущий каталог — ~/services/vaultwarden; vw-data доступен только владельцу.
Шаг 2. Сохраните описание контейнера #
Откройте nano compose.yaml, вставьте YAML и замените vault.example.com своим доменом. SIGNUPS_ALLOWED временно разрешает создание первого владельца; после регистрации выключим его.
services:
vaultwarden:
image: vaultwarden/server:1.37.4
restart: unless-stopped
ports:
- '127.0.0.1:8086:80'
environment:
DOMAIN: https://vault.example.com
SIGNUPS_ALLOWED: 'true'
INVITATIONS_ALLOWED: 'false'
volumes:
- ./vw-data:/dataВнутренний порт 8086 привязан к localhost; каталог /data связан с vw-data.
Шаг 3. Проверьте конфигурацию #
Проверим YAML, сохранив отступы и кавычки булевых значений.
docker compose config --quietconfig --quiet завершился без ошибки.
Шаг 4. Скачайте Vaultwarden #
pull загружает выбранный образ 1.37.4. Личные хранилища ещё не создаются.
docker compose pullОбраз скачан успешно.
Шаг 5. Запустите контейнер #
up -d создаёт контейнер и включает его работу в фоне.
docker compose up -dКонтейнер запущен; следующая проверка покажет готовность.
Шаг 6. Проверьте приложение на сервере #
Команды проверяют контейнер, журнал и маршрут /alive. Локальный ответ позволяет проверить приложение до настройки внешнего домена.
docker compose ps
docker compose logs --tail=80 vaultwarden
curl --fail http://127.0.0.1:8086/aliveКонтейнер не перезапускается; /alive отвечает без ошибки.
Шаг 7. Ограничьте первоначальную регистрацию #
В firewall провайдера временно разрешите 443 только со своего рабочего IP или через согласованный VPN. Порт 80 нужен Nginx для сертификата. До закрытия регистрации сервер должен быть доступен только вам.
Посторонний посетитель не видит HTTPS-экран регистрации.
Шаг 8. Сохраните сайт Nginx #
Установите Nginx и Certbot по подготовке Ubuntu, если ещё не установили. Откройте sudo nano /etc/nginx/sites-available/vaultwarden и вставьте файл ниже. Замените все домены своими. Nginx передаёт приложению домен, адрес клиента и протокол; Upgrade и Connection сохраняют WebSocket. До получения сертификата условие $scheme блокирует обычные HTTP-запросы кодом 403, чтобы вход не происходил без шифрования.
/etc/nginx/sites-available/vaultwardenmap $http_upgrade $vaultwarden_connection_upgrade {
default upgrade;
"" close;
}
server {
listen 80;
server_name vault.example.com;
client_max_body_size 100m;
location / {
if ($scheme = http) { return 403; }
proxy_pass http://127.0.0.1:8086;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $vaultwarden_connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_buffering off;
}
}
Сохраните Ctrl+O, Enter, Ctrl+X. В файле пока нет путей к сертификатам: Nginx сможет проверить его до выпуска HTTPS.
Шаг 9. Подключите сайт и проверьте HTTP #
Ссылка подключает сохранённый сайт. nginx -t проверяет все настройки сервера; && разрешает перечитать их только при успешной проверке. curl проверяет ответ для вашего домена. При ошибке остановитесь, исправьте указанную строку и повторите проверку.
sudo ln -sfn /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/vaultwarden
sudo nginx -t && sudo systemctl reload nginx
curl -I http://vault.example.com/Ожидается successful от nginx -t и HTTP 403 для обычного запроса: до HTTPS это намеренная блокировка. DNS должен указывать на сервер, TCP 80/443 — быть доступен у провайдера. Ничего не вводите в форму входа по HTTP.
Шаг 10. Получите сертификат и включите HTTPS #
Каждое имя из команды должно указывать на этот сервер. Certbot проверит домены, сам добавит сертификат в сайт Nginx и включит перенаправление HTTP → HTTPS. Укажите свою почту при запросе и подтвердите условия Let’s Encrypt. Это отдельное действие после успешной проверки HTTP.
sudo /snap/bin/certbot --nginx -d vault.example.com --redirectCertbot сообщил об успешной установке. Откройте HTTPS-адрес со своего компьютера: браузер не должен предупреждать о сертификате. Для закрытой панели используйте разрешённый IP. При ошибке исправьте DNS, в том числе AAAA, либо доступ к TCP 80; не повторяйте запросы выпуска подряд.
Шаг 11. Проверьте продление сертификата #
Certbot из snap создаёт службу автоматического продления. Dry-run выполняет пробное продление: настоящие сертификаты не заменяются. Затем проверьте, что таймер планирует следующий запуск. Сохраняйте доступ к TCP 80 для следующих проверок домена.
sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all 'snap.certbot.renew*'Пробное продление успешно, у таймера есть следующий запуск. Если тест не прошёл, проверьте /var/log/letsencrypt/letsencrypt.log; сначала исправьте причину. После этого можно создавать учётную запись и приглашать пользователей.
Шаг 12. Создайте личное хранилище #
Откройте https://vault.example.com, зарегистрируйте свой аккаунт и выберите длинную уникальную мастер-фразу. Она шифрует личное хранилище: серверный администратор не сможет просто заменить её при потере.
Вы можете выйти и снова войти, используя сохранённую мастер-фразу.
Шаг 13. Закройте свободную регистрацию #
В compose.yaml измените SIGNUPS_ALLOWED на false и примените конфигурацию командой ниже. После этого можно расширить сетевой доступ для пользователей.
# В compose.yaml замените SIGNUPS_ALLOWED: 'true' на 'false'.
docker compose up -d vaultwardenВ приватном окне создать посторонний аккаунт нельзя.
Шаг 14. Включите двухфакторную защиту #
В настройках своей учётной записи подключите доступный способ двухфакторного входа. Сохраните код восстановления вне самого хранилища и проверьте вход в отдельной сессии.
Вход требует второго фактора; код восстановления доступен при потере устройства.
Шаг 15. Подключите приложение или расширение #
Установите официальный клиент Bitwarden. Перед входом выберите собственный сервер https://vault.example.com. Создайте тестовую запись с вымышленным паролем и синхронизируйте её.
Запись появляется в веб-интерфейсе и клиенте; после выхода и входа доступ сохраняется.
Шаг 16. Подготовьте защищённую панель управления при необходимости #
Если нужна /admin, выполните генерацию Argon2-хеша. Сохраните исходный токен в менеджере паролей. Создайте .env с ADMIN_TOKEN в одинарных кавычках и добавьте в environment Compose ADMIN_TOKEN: ${ADMIN_TOKEN}. Ограничьте /admin доверенным IP или VPN. Панель не обязательна для первого личного хранилища.
docker compose exec vaultwarden /vaultwarden hashВ /admin требуется токен; доступ с постороннего адреса закрыт. Исходный токен не записан открыто в compose.yaml.
Шаг 17. Остановите изменения перед копией #
Подготовим каталог копий и остановим Vaultwarden. В SQLite и вложениях не должно быть записи во время архивации.
umask 077
mkdir -p "$HOME/backups/vaultwarden"
docker compose stop vaultwardenКонтейнер остановлен; учётные записи временно не синхронизируются.
Шаг 18. Сохраните полное хранилище #
Архив текущего каталога включает compose.yaml, vw-data и .env, если вы его создавали. Нужна вся папка данных, а не только файл базы.
tar -czf "$HOME/backups/vaultwarden/vaultwarden-$(date -u +%Y%m%dT%H%M%SZ).tar.gz" .Архив создан без ошибки; перенесите его в закрытое хранилище на другой машине.
Шаг 19. Верните сервис и проверьте восстановление #
Запустите контейнер и синхронизируйте тестовую запись. Проверяйте восстановление архива на изолированном сервере той же версии. Мастер-фраза и личный код восстановления остаются отдельной ответственностью владельца.
docker compose start vaultwardenТестовая запись доступна после запуска и после пробного восстановления.
Если результат шага отличается #
Вернитесь к проверке того шага, на котором появилась ошибка. Первая ошибка в выводе обычно полезнее последних строк: последующие команды могли не получить нужный файл или работающую службу. Не повторяйте установку целиком поверх частично настроенного приложения.
Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.
Настройки внешнего доступа храните вместе с копией приложения: /etc/nginx/sites-available/vaultwarden и /etc/letsencrypt содержат сайт и сертификаты с закрытыми ключами. Архивируйте их с sudo в закрытое хранилище. После восстановления подключите сайт через sites-enabled, выполните sudo nginx -t, затем перечитайте Nginx. Для ошибки 502 сначала проверьте локальное приложение и /var/log/nginx/error.log; для сертификата — /var/log/letsencrypt/letsencrypt.log и таймер продления.