Поднимаем свой менеджер паролей Vaultwarden на Ubuntu, или Прощай, KeePass!

📅
⏱️ 3 min read
#ubuntu #password-manager #self-hosted #security

Решил избавиться от Keepass и поднять какую нибудь Web штуку. Выбор пал на Vaultwarden - это реализация Bitwarden, написанная на Rust. Легкая, быстрая и работает со всеми официальными клиентами Bitwarden. Вот как я это сделал на Ubuntu 24.04.

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

  • Сервер с Ubuntu 24.04 LTS (подойдёт даже самая дешманская VPS)
  • Доменное имя (у меня pass.vashdomen.ru)
  • Открытые порты 80 и 443
  • Прямые руки (опционально, но желательно 😄)

Шаг 1: Устанавливаем всё необходимое

Vaultwarden есть в специальном репозитории, добавляем его:

curl -s https://packagecloud.io/install/repositories/dionysius/vaultwarden/script.deb.sh | sudo bash
sudo apt update
sudo apt install vaultwarden nginx certbot python3-certbot-nginx

Что устанавливается:

  • vaultwarden - сам сервер с API
  • vaultwarden-web-vault - веб-интерфейс (подтянется автоматически)
  • nginx - будет проксировать запросы
  • certbot - для бесплатного SSL от Let's Encrypt

Шаг 2: Настраиваем Vaultwarden

Создаём конфиг. Тут всё важное:

sudo tee /etc/default/vaultwarden << 'EOF'
# Ваш домен (обязательно с https://)
DOMAIN=https://pass.vashdomen.ru

ROCKET_ADDRESS=127.0.0.1
ROCKET_PORT=8001

# Где хранятся данные
DATA_FOLDER=/var/lib/vaultwarden
DATABASE_URL=/var/lib/vaultwarden/db.sqlite3

# Веб-интерфейс
WEB_VAULT_FOLDER=/usr/share/vaultwarden-web-vault
WEB_VAULT_ENABLED=true

# Разрешить регистрацию (потом отключим!)
SIGNUPS_ALLOWED=true

# Логи
LOG_FILE=/var/lib/vaultwarden/vaultwarden.log
LOG_LEVEL=info
EOF

Важно: SIGNUPS_ALLOWED=true оставляем временно, чтобы зарегистрировать свой аккаунт. Потом обязательно отключим!

Шаг 3: Настраиваем nginx (временно, для получения сертификата)

Сначала делаем простой конфиг на HTTP:

sudo tee /etc/nginx/sites-available/pass << 'EOF'
server {
    listen 80;
    server_name pass.vashdomen.ru;
    
    location / {
        return 200 'OK';
    }
}
EOF


sudo ln -s /etc/nginx/sites-available/pass /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Шаг 4: Получаем SSL-сертификат

Теперь магия Let's Encrypt:

sudo certbot certonly --nginx -d pass.vashdomen.ru

Certbot спросит email (для уведомлений о продлении) и согласие с ToS. Жмём Enter, и через пару секунд сертификат готов!

Шаг 5: Финальная конфигурация nginx с SSL

Теперь делаем нормальный конфиг с HTTPS:

sudo tee /etc/nginx/sites-available/pass << 'EOF'
server {
    listen 443 ssl http2;
    server_name pass.vashdomen.ru;

    ssl_certificate /etc/letsencrypt/live/pass.vashdomen.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pass.vashdomen.ru/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    client_max_body_size 525M;

    location / {
        proxy_pass http://127.0.0.1:8001;
        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_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

server {
    listen 80;
    server_name pass.vashdomen.ru;
    return 301 https://$host$request_uri;
}
EOF

# Проверяем и применяем
sudo nginx -t && sudo systemctl reload nginx

Шаг 6: Запускаем Vaultwarden

Момент истины:

# Включаем автозапуск и стартуем
sudo systemctl enable --now vaultwarden

# Проверяем статус
sudo systemctl status vaultwarden

# Убеждаемся, что порт 8001 слушается
sudo ss -tlnp | grep 8001

Если всё зелёное - едем дальше!

Шаг 7: Создаём свой аккаунт

  1. Открываем браузер и идём на https://pass.vashdomen.ru
  2. Жмём Create Account
  3. Создаём аккаунт с очень сильным мастер-паролем (это святое!)
  4. Заходим в аккаунт

Теперь критически важный шаг - отключаем регистрацию, чтобы никто больше не мог зарегистрироваться:

sudo sed -i 's/SIGNUPS_ALLOWED=true/SIGNUPS_ALLOWED=false/' /etc/default/vaultwarden
sudo systemctl restart vaultwarden

Всё, теперь только вы можете пользоваться сервером!

Шаг 8: Включаем админ-панель (опционально, но полезно)

Админ-панель позволяет управлять пользователями и смотреть статистику:

# Генерируем случайный токен
ADMIN_TOKEN=$(openssl rand -base64 48)
echo "Сохраните этот токен: $ADMIN_TOKEN"
echo "ADMIN_TOKEN=$ADMIN_TOKEN" | sudo tee -a /etc/default/vaultwarden
sudo systemctl restart vaultwarden

Сохраните токен! Он понадобится для входа в админку.

Админ-панель доступна по адресу: https://pass.vashdomen.ru/admin

Полезные команды для жизни

# Смотрим статус
sudo systemctl status vaultwarden

# Живые логи
sudo journalctl -u vaultwarden -f

# Или из файла
sudo tail -f /var/lib/vaultwarden/vaultwarden.log

# Перезапуск
sudo systemctl restart vaultwarden

# Смотрим, что в базе данных
ls -la /var/lib/vaultwarden/

Бэкапы - не забываем!

Все данные лежат в /var/lib/vaultwarden/. Бэкапить их - святая обязанность:

sudo systemctl stop vaultwarden
sudo tar -czvf vaultwarden-backup-$(date +%Y%m%d).tar.gz /var/lib/vaultwarden/
sudo systemctl start vaultwarden

Архив можно закинуть куда угодно - на другой сервер, в облако, на флешку. Главное - делать это регулярно!

Обновление

Когда выйдет новая версия:

sudo apt update
sudo apt upgrade vaultwarden vaultwarden-web-vault
sudo systemctl restart vaultwarden

Всё, обновились!

Подключаем клиенты

Самое крутое в Vaultwarden - он совместим со всеми официальными клиентами Bitwarden:

  • Браузеры: расширения для Chrome, Firefox, Edge, Safari
  • Мобильные: приложения из App Store и Google Play
  • Desktop: программы для Windows, macOS, Linux

При настройке любого клиента выбираете Self-hosted и указываете URL: https://pass.vashdomen.ru

Вот и всё! Теперь все пароли хранятся на вашем сервере, и никакие облачные сервисы не имеют к ним доступа.

Что получили в итоге?

✅ Свой менеджер паролей на своём сервере
✅ Все пароли под контролем
✅ Работает с любых устройств
✅ Бесплатно (если не считать стоимость VPS)
✅ Совместим с экосистемой Bitwarden
✅ HTTPS с автоматическим продлением сертификата

Весь процесс занял минут 15-20. Vaultwarden отлично работает даже на самой слабой VPS, потому что написан на Rust и очень экономичен к ресурсам.