8.2.8 Розгортання та налаштування Vaultwarden на сервері
Vaultwarden — це легкий серверний варіант менеджера паролів Bitwarden, написаний на Rust. Дозволяє безпечно зберігати й синхронізувати ваші паролі на власному сервері, повністю сумісний з офіційними клієнтами Bitwarden.
Системні вимоги
- Замовлений Віртуальний сервер або Виділений сервер
- CPU: від 1 ядра, RAM: від 1 ГБ (2 ГБ — оптимально)
- SSD: від 5 ГБ
- ОС: Ubuntu 22.04 або 24.04 LTS
- Доменне ім’я, яке вказує на ваш сервер (A-запис)
- Відкриті порти 80 і 443 (firewall)
- sudo або root-доступ
- Встановлений Docker та Docker Compose
Безпека
- Ніколи не розміщуйте Vaultwarden у відкритому доступі без HTTPS;
- Рекомендується використовувати окремий VPS або виділений сервер;
- Налаштуйте резервне копіювання та зберігайте бекапи окремо.
Встановлення Docker і Docker Compose
Перед встановленням Vaultwarden потрібно встановити Docker і Docker Compose. Docker дозволяє запускати застосунок в ізольованому контейнері, спрощує оновлення та уникнення ручної установки залежностей.
Виконайте послідовно наступні команди для встановлення Docker і Docker Compose, а також запуску сервісу Docker:
sudo apt update && sudo apt upgrade -y
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker --now
Створення структури проєкту та .env
Для організації зберігання даних і конфігурацій створюємо окрему папку для Vaultwarden. У цій папці будуть розташовані:
- сам файл Docker Compose;
- папка для даних (volume);
- і файл
.env
з налаштуваннями середовища.
Перейдіть у робочий каталог і створіть необхідні директорії:
sudo mkdir -p /opt/vaultwarden/data
cd /opt/vaultwarden
Тепер створіть файл .env
— у ньому зручно зберігати налаштування, які можна змінювати без редагування Docker Compose:
ADMIN_TOKEN=Замініть_на_складний_токен
DOMAIN=https://your-domain.com
DATA_FOLDER=/opt/vaultwarden/data
Згенерувати складний токен можна командою:
openssl rand -base64 48
Цей токен знадобиться для доступу до адмін-панелі Vaultwarden.
Файл Docker Compose для Vaultwarden
Тепер створимо основний конфігураційний файл — 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:
sudo apt install nginx certbot python3-certbot-nginx -y
Створіть файл конфігурації сайту для 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
Дотримуйтесь інструкцій, погодьтеся на автоматичне оновлення сертифіката.
Запустіть Nginx знову (якщо зупиняли):
sudo systemctl start nginx
Вставте та відредагуйте :
# ================================================================
# 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
Запуск Vaultwarden
Після завершення налаштувань запустіть усі сервіси через Docker Compose:
sudo docker-compose up -d
Ви завжди можете перевірити стан сервісів командою docker-compose ps
:
docker-compose ps
Перевірка роботи та тестування
- Відкрийте
https://your-domain.com
у браузері - Зареєструйте першого користувача
- Для входу в адмін-панель використовуйте:
https://your-domain.com/admin?admin_token=ВАШ_ТОКЕН
Підтримувані клієнти 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
- На екрані входу в будь-якому офіційному клієнті Bitwarden знайдіть опцію “Self-hosted environment” або “Use a self-hosted server”.
-
Введіть вашу адресу:
https://your-domain.com # ваш домен, на якому розгорнуто Vaultwarden
-
Авторизуйтеся або створіть акаунт. Дані відразу потрапляють на ваш сервер.
Важливо: Деякі старі версії мобільних клієнтів можуть за замовчуванням працювати лише з 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 |