8.2.8 Розгортання та налаштування Vaultwarden на сервері

The Host Bit Banner

Vaultwarden — це легкий серверний варіант менеджера паролів Bitwarden, написаний на Rust. Дозволяє безпечно зберігати й синхронізувати ваші паролі на власному сервері, повністю сумісний з офіційними клієнтами Bitwarden.

Системні вимоги

Безпека

  • Ніколи не розміщуйте Vaultwarden у відкритому доступі без HTTPS;
  • Рекомендується використовувати окремий VPS або виділений сервер;
  • Налаштуйте резервне копіювання та зберігайте бекапи окремо.

Встановлення Docker і Docker Compose

Перед встановленням Vaultwarden потрібно встановити Docker і Docker Compose. Docker дозволяє запускати застосунок в ізольованому контейнері, спрощує оновлення та уникнення ручної установки залежностей.

Виконайте послідовно наступні команди для встановлення Docker і Docker Compose, а також запуску сервісу Docker:

Встановлення Docker
sudo apt update && sudo apt upgrade -y
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker --now

docker_install

Створення структури проєкту та .env

Для організації зберігання даних і конфігурацій створюємо окрему папку для Vaultwarden. У цій папці будуть розташовані:

  • сам файл Docker Compose;
  • папка для даних (volume);
  • і файл .env з налаштуваннями середовища.

Перейдіть у робочий каталог і створіть необхідні директорії:

Створення каталогу
sudo mkdir -p /opt/vaultwarden/data
cd /opt/vaultwarden

Тепер створіть файл .env — у ньому зручно зберігати налаштування, які можна змінювати без редагування Docker Compose:

.env
ADMIN_TOKEN=Замініть_на_складний_токен
DOMAIN=https://your-domain.com
DATA_FOLDER=/opt/vaultwarden/data

Згенерувати складний токен можна командою:

openssl rand -base64 48

Цей токен знадобиться для доступу до адмін-панелі Vaultwarden.

Файл Docker Compose для Vaultwarden

Тепер створимо основний конфігураційний файл — docker-compose.yml. Він визначає, який контейнер використовується, які змінні середовища застосовуються, як монтуються томи й з якими мережами працює додаток. Відкрийте редактор і створіть файл:

docker-compose.yml
version: '3'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      - ADMIN_TOKEN=${ADMIN_TOKEN}
      - DOMAIN=${DOMAIN}
      - WEBSOCKET_ENABLED=true
    volumes:
      - ${DATA_FOLDER}:/data
    networks:
      - vaultwarden-net
    expose:
      - "80"
      - "3012"

networks:
  vaultwarden-net:
    driver: bridge

Зверніть увагу: ми не пробрасуємо порти назовні (ports), Vaultwarden буде доступний лише через внутрішню docker-мережу — це підвищує безпеку. Зовнішні порти проксіюються через Nginx.

Налаштування Nginx як зворотного проксі для SSL (HTTPS)

Щоб сервер працював захищено і підтримував HTTPS, використовуйте Nginx як зворотний проксі. Nginx прийматиме зовнішні запити, автоматично переспрямовуватиме їх на контейнер Vaultwarden по захищеному з’єднанню і забезпечуватиме роботу SSL-сертифіката. Встановіть Nginx і Certbot:

Встановлення Nginx та Certbot
sudo apt install nginx certbot python3-certbot-nginx -y

nginx_installation

Створіть файл конфігурації сайту для Nginx:

sudo nano /etc/nginx/sites-available/vaultwarden.conf

Налаштування SSL-сертифіката Let’s Encrypt

Зупиніть Nginx (лише якщо не вдається отримати сертифікат на працюючому сервері):

sudo systemctl stop nginx

Запустіть certbot для автоматичного налаштування HTTPS:

sudo certbot --nginx -d your-domain.com

certbot_ssl_activate

Дотримуйтесь інструкцій, погодьтеся на автоматичне оновлення сертифіката.

Запустіть Nginx знову (якщо зупиняли):

sudo systemctl start nginx

Вставте та відредагуйте :

/etc/nginx/sites-available/vaultwarden.conf

# ================================================================
# 1. Перенаправлення всіх HTTP-запитів на HTTPS
# ================================================================

server {
    listen 80;
    listen [::]:80;
    server_name your-domain.com;  # Замість your-domain.com вкажіть свій домен

    # Редірект всіх запитів на HTTPS
    return 301 https://$host$request_uri;
}

# ================================================================
# 2. Обробка HTTPS на 443 із сертифікатом Let's Encrypt
# ================================================================

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name your-domain.com;  # Замість your-domain.com Ваш домен

    # Шляхи до сертифіката та ключа від Let's Encrypt
    ssl_certificate     /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    # Додаткові безпекові оптимізації (рекомендовано)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
		
		# Рекомендовані шляхи до набора дужок конфіденційності (не обов’язково, але рекомендовано для future-proof)
    # ssl_dhparam /etc/ssl/certs/dhparam.pem;


    # Рекомендовані шляхи до набора дужок конфіденційності (не обов’язково, але рекомендовано для future-proof)
    # ssl_dhparam /etc/ssl/certs/dhparam.pem;
		
		
    # Виключити зайві тексти (зменшити ризик інформаційної витоку)
    server_tokens off;

    # Кореневий location — проксуюємо на внутрішній порт контейнера (localhost:8080)
    location / {
        proxy_pass http://127.0.0.1:8080;   # Якщо порт мапиться на localhost:8080
        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 90;
        proxy_connect_timeout 90;
    }

    # WebSocket endpoint для сповіщень
    location /notifications/hub {
        proxy_pass http://127.0.0.1:3012;  # Якщо порт мапиться на localhost:3012
        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;
    }

    # За потреби: обмежити розміри запитів (якщо дуже великі вкладення)
    client_max_body_size 128M;
}

Створіть символьне посилання для активації сайту:

sudo ln -s /etc/nginx/sites-available/vaultwarden.conf /etc/nginx/sites-enabled/

Перезапустіть Nginx:

sudo nginx -t
sudo systemctl reload nginx

Створіть (або оновіть) символічне посилання:

sudo ln -s /etc/nginx/sites-available/vaultwarden.conf /etc/nginx/sites-enabled/

Перевірте синтаксис Nginx:

sudo nginx -t

Переконайтеся, що жодних помилок немає. Якщо з’явиться помилка, виправте її, враховуючи повідомлення про рядок.

Перезапустіть Nginx:

sudo systemctl restart nginx

Налаштування проксіювання Docker → Nginx

Vaultwarden повинен бути доступний лише через проксі Nginx. Для цього налаштуйте проброс портів у Docker Compose, щоб Nginx міг проксіювати трафік від клієнтів до контейнера. Після змін перезапустіть сервіс — це дасть змогу зробити додаток доступним по HTTPS через ваш домен.

Відредагуйте docker-compose.yml та перезапустіть Vaultwarden:

    ports:
      - "8080:80"
      - "3012:3012"

Застосуйте зміни:

sudo docker-compose up -d

docker-compose-up

Запуск Vaultwarden

Після завершення налаштувань запустіть усі сервіси через Docker Compose:

sudo docker-compose up -d

Ви завжди можете перевірити стан сервісів командою docker-compose ps:

docker-compose ps

docker-compose_ps

Перевірка роботи та тестування

  • Відкрийте https://your-domain.com у браузері
  • Зареєструйте першого користувача
  • Для входу в адмін-панель використовуйте: https://your-domain.com/admin?admin_token=ВАШ_ТОКЕН

Vaultwarden_WebInterface

Підтримувані клієнти Vaultwarden

Vaultwarden повністю сумісний з офіційними клієнтами Bitwarden. Тобто ви можете користуватися будь-яким знайомим застосунком Bitwarden для доступу до свого self-hosted сервера Vaultwarden:

Можливості клієнтів:

  • Синхронізація паролів, карток, нотаток і файлів між пристроями
  • Автозаповнення паролів у браузерах та додатках
  • Двофакторна автентифікація (TOTP, WebAuthn)
  • Організація колекцій та спільна робота в команді (організації)

Офіційні клієнти Bitwarden

Платформа Де взяти
Веб-клієнт Через браузер: https://your-domain.com (адреса вашого Vaultwarden)
Розширення браузера Chrome Web Store, Firefox Add-ons
Десктоп-клієнт Windows/macOS/Linux
Мобільний додаток Google Play, App Store
CLI (командний рядок) Bitwarden CLI

Як підключитись до свого сервера Vaultwarden

  1. На екрані входу в будь-якому офіційному клієнті Bitwarden знайдіть опцію “Self-hosted environment” або “Use a self-hosted server”.

bitwarden self-hosted

  1. Введіть вашу адресу:

    https://your-domain.com # ваш домен, на якому розгорнуто Vaultwarden
    
  2. Авторизуйтеся або створіть акаунт. Дані відразу потрапляють на ваш сервер.

Важливо: Деякі старі версії мобільних клієнтів можуть за замовчуванням працювати лише з bitwarden.com. Якщо ви не бачите налаштування “Self-hosted” — оновіть додаток до останньої версії!

CLI-клієнт

Для досвідчених користувачів і DevOps доступний Bitwarden CLI:

bw login user@domain.com

Вкажіть свою адресу сервера:

bw login user@domain.com --server https://your-domain.com

Зміна сервера в додатках

  • У десктопі й мобільному клієнті: у налаштуваннях, зазвичай на екрані входу, оберіть “Self-hosted” і введіть URL свого Vaultwarden.
  • У розширеннях браузера: відкрийте налаштування, знайдіть пункт “Сервер”, вкажіть свій домен.
  • Через веб: просто відкрийте https://your-domain.com у браузері.
Таблиця типових проблем і швидких рішень
Помилка Рішення
Сайт не відкривається по HTTPS Перевірте сертифікат, домен, конфіг Nginx, firewall
Не працює адмінка Перевірте змінну ADMIN_TOKEN, не забудьте ?admin_token=
“Cannot write to /data” Перевірте права: chown -R 1000:1000 /opt/vaultwarden/data
Поштові сповіщення не працюють Налаштуйте SMTP-змінні середовища у Docker Compose
Контейнер не стартує Перевірте логи: docker-compose logs vaultwarden
Сертифікат не оновлюється Запустіть вручну: sudo certbot renew