UPD статьи от 10.11.2023
В Release Note для версии 1.30.0 было анонсированно ряд изменений, в частности, для более простой настройки прокси, более не требуется два отдельных правила для редиректа WebvSockets на порт 3012. В связи с этим разработчик просит привести конфигурацию web сервера согласно Wiki. В будущем старые опции редиректа будут отключены и станут запрещены к использованию. Так же я не нашёл в репозитории docker-compose файла, то ли его там и не было и я когда то лепил его сам, то ли от него так же отказались, в общем было решено изменить механизм развёртывания контейнера, отказаться от docker-compose. Для истории, изначальный вид статьи останется не изменным, все изменения добавлю здесь, в блоке UPD, а походу статьи изменившиеся пункты буду делать отсылку сюда.
Итак краткая выжимка:
Пулим последний релиз и запускаем контейнер в Docker:
docker pull vaultwarden/server:latest
docker run -d --name vaultwarden -v /root/vaultvarden/vw-data/:/data/ -p 8082:80 vaultwarden/server:latest
Здесь мы указали имя контейнера (как он будет представлен в системе), указали путь к директории с данными, у меня директория осталась, так как я ранее поднимал контейнер через docker-compose, вы можете указать произвольное место хранения данных Vaultwarden, так же указали порт на котором будем слушать, 8082, и собственно имя самого контейнера с желаемой версией, latest.
Меняем конфигурацию WEB сервера, в моём случае Apache2:
<VirtualHost *:80>
ServerName vault.iamninja.ru
ErrorLog ${APACHE_LOG_DIR}/vault-error.log
CustomLog ${APACHE_LOG_DIR}/vault-access.log combined
RewriteEngine On
ProxyPass / http://localhost:8082/ upgrade=websocket
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
RewriteCond %{SERVER_NAME} =vault.iamninja.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
После того как certbot отработает (см. пункт Установка Certbot) у нас появится ещё один конфигурационный файл для WEB сервера:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName vault.iamninja.ru
ErrorLog ${APACHE_LOG_DIR}/vault-error.log
CustomLog ${APACHE_LOG_DIR}/vault-access.log combined
ProxyPass / http://localhost:8082/ upgrade=websocket
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/vault.iamninja.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/vault.iamninja.ru/privkey.pem
</VirtualHost>
</IfModule>
На этом всё, перезапускаем WEB сервер и наш Vaultwarden снова доступен.
Введение
В этой статье будет рассказано о настройке вашего собственного экземпляра Bitwarden (Vaultwarden) с собственным хостингом с помощью Docker и настройке Apache для обеспечения публичного доступа к вашему хранилищу с разных устройств.
Что такое Bitwarden?
Bitwarden — это бесплатная служба управления паролями с открытым исходным кодом, которая хранит конфиденциальную информацию, такую как учетные данные веб-сайта, в зашифрованном хранилище. Платформа Bitwarden предлагает множество клиентских приложений, включая веб-интерфейс, настольные приложения, расширения браузера, мобильные приложения и интерфейс командной строки. Я использую Bitwarden в качестве основного хранилища паролей. Наличие Bitwarden в качестве общедоступной конечной точки означает, что я могу подключиться к своему хранилищу паролей с помощью приложения Bitwarden на Android, указав собственный экземпляр.
Настройка сервера Bitwarden
Этот раздел руководства предназначен для настройки основного «концентратора» Bitwarden. Это будет общедоступный API Bitwarden, который будет работать на вашем сервере.
Шаг 1: Настройка вашего Linux-сервера
Вам нужно либо иметь существующий экземпляр сервера, либо создать его. Я использую селф-хост, работающий у меня на балконе. Вы также можете использовать что-то вроде Digital Ocean для размещения своего сервера Bitwarden. Вы также можете использовать дешевый Raspberry PI для настройки собственного сервера Linux. После того, как вы настроили сервер или вошли в систему, вам нужно будет выполнить некоторые обновления и выполнить некоторые предварительные установки.
sudo apt-get update
sudo apt-get upgrade
Далее нам нужно установить Docker. Docker — это слой, на котором работают ваши контейнеры. Чтобы установить Docker на свой экземпляр, вам нужно выполнить следующую команду. Следующий сценарий представляет собой удобный сценарий, предоставленный командой Docker.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.s
Вы можете заметить, что есть консольное сообщение, указывающее, как использовать Docker в качестве пользователя без полномочий root. Это означает, что всякий раз, когда вы выполняете команду Docker, вам больше не нужно вводить пароль sudo. Если это звучит для вас хорошо, вы можете просто запустить предоставленную команду, заменив your-user на вашего пользователя сервера. В моем случае мой пользователь bitwarden. Моя команда будет выглядеть так.
sudo usermod -aG docker bitwarden
UPD Установака docker-compose в новой редакции более не актуальна, см. шапку.
Нам также необходимо установить Docker Compose. Это можно сделать, выполнив следующие команды.
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Шаг 2. Подготовка вашего сервера Bitwarden
Далее вам нужно создать новую папку, в которой будет находиться ваш сервер Bitwarden, вы можете назвать ее как угодно. Я просто назвал свою bitwarden.
cd ~
mkdir bitwarden
cd bitwarden
UPD Создание docker-compose.yml в новой редакции более не актуальна, см. шапку.
Далее вам нужно создать файл docker-compose.yml. Это файл оркестрации, который docker-compose будет использовать для подготовки вашего экземпляра Docker.
touch docker-compose.yml
UPD Редактирование docker-compose.yml в новой редакции более не актуальна, см. шапку.
Затем вам нужно будет отредактировать файл `docker-compose.yml` и вставить следующее содержимое.
#docker-compose.yml
version: '3'
services:
bitwarden:
image: vaultwarden/server
restart: always
ports:
- 8000:80
volumes:
- ./bw-data:/data
environment:
WEBSOCKET_ENABLED: 'true' # Required to use websockets
SIGNUPS_ALLOWED: 'true' # установите false для отключения регистрации
Я использую Vaultwarden, проект с открытым исходным кодом. Он не принадлежит Bitwarden. Это неофициальный клиент совместимый с Bitwarden сервер, написанный на Rust. Сохраните файл docker-compose.yml и вернитесь в каталог bitwarden.
Шаг 3. Локальный запуск сервера Bitwarden
Теперь у вас есть все необходимое для запуска вашего сервера Bitwarden. Следующее, что нужно сделать, это запустить его.
UPD Запуск контейнера с помощью docker-compose в новой редакции более не актуальна, см. шапку.
sudo docker-compose up -d
Это запустит ваш сервер Bitwarden внутри Docker, может потребоваться некоторое время, чтобы извлечь образы. В конечном итоге вы можете увидеть, как работает ваш экземпляр, выполнив следующее
sudo docker ps
Эта комманда перечислит ваши запущенные экземпляры. Если все в порядке, вы можете локально просмотреть свой сервер Bitwarden, перейдя по адресу http://localhost:PORT. Или с другого компьютера, используя ваш IP-адрес вместо локального хоста. Вы должны увидеть что-то похожее на следующее.
Наконец, вам просто нужно зарегистрировать учетную запись на вашем новом размещенном экземпляре. Нажмите кнопку Создать учетную запись Затем заполните свои данные. Если у вас есть существующая учетная запись Bitwarden, вам все равно придется создать новую учетную запись в этом экземпляре. Затем вы можете экспортировать и импортировать между учетными записями. Последнее, что нужно сделать, это нажать «Отправить».
Если ваш экземпляр не находится на вашем локальном компьютере, вам нужно будет настроить прокси Nginx или Apache, которую вы можете выполнить на шаге 4.
Шаг 4. Публикуем свой новый сервер
Эта часть может показаться пугающей, но она необходима для того, чтобы ваши клиенты Bitwarden (Android, iOS, расширение Chrome и т. д.) могли подключаться к вашему серверу. Мы будем использовать Apache.
Для начала настроим файрволл, я использую UFW.
sudo ufw allow 'Apache Full'
Этой коммандой мы откроем TCP порты 80 и 443
Убедимся что наш веб сервер запущен
sudo systemctl status apache2
Результат должен быть примерно такой
sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-04-14 05:16:51 +05; 1 weeks 0 days ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 1160 (apache2)
Следующая часть позволит нам принимать входящий трафик и направлять его на ваш экземпляр контейнера. Позволяет вам открыть свой сервер Bitwarden для доступа в Интернет. Перейдите в /etc/apache2/sites-available
sudo nano bitwarden.yoursite.com.conf
UPD Содержимое конфигурации в новой редакции более не актуальна, см. шапку.
Я использую домен третьего уровня и использую следующию конфигурацию
<VirtualHost *:80>
ServerName bitwarden.yoursite.com
ErrorLog ${APACHE_LOG_DIR}/bitwarden-error.log
CustomLog ${APACHE_LOG_DIR}/bitwarden-access.log combined
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /notifications/hub(.*) ws://:3012/$1 [P,L]
ProxyPass / http://localhost:8000/
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
</VitrualHost>
Нам так же может потребовтаься включить некоторые модули для нашего apache
sudo a2enmod rewrite
sudo a2enmod proxy_wstunnel
sudo a2enmod proxy_http
Включим наш сайт
sudo a2ensite bitwarden.yoursite.com.conf
sudo systemctl restart apache2
Установка Certbot
Certbot позволяет нам бесплатно генерировать SSL-сертификаты с помощью Let’s Encrypt. Его просто установить и использовать. Легко настраивается для работы с apache, больше не потребуется ручная настройка.
Установим Certbot для apache
sudo apt install certbot python3-certbot-apache
Убедимся что у нас присутствуют конфиг файлы для наших сайтов в /etc/apache2/sites-available и в файрволле открыты необходимые для работы протокола HTTPS порты TCP, после чего запустим нашего
sudo certbot --apache
Скрипт задаст нам некотоыре вопросы, на которые нужно будет дать ответы, так же перечислит сайты для кторых обнаружены конфиг файлы на веб сервере и предложит редиректить соединения с 80 порта на 443 по умолчанию (я рекомендую выбрать именно такой вариант). Далее будут сгенерированны SSL сертификаты для выбранных сайтов или для всех сайтов если мы укажем такую опцию, а так же скрипт настроит периодичную проверку сертификатов на предмет истечения срока действия и перегенерацию.
Шаг 5: Подключение к вашему новому экземпляру Bitwarden из клиента.
Я собираюсь использовать плагин Firefox Bitwarden для этой части руководства. Но процесс идентичен для всех клиентов Bitwarden. Во-первых, если вы еще этого не сделали, установите выбранный вами клиент Bitwarden и откройте его. В левом верхнем углу щелкните значок шестеренки
Затем вы получите некоторую конфигурацию. Просто добавьте свой полный URL-адрес в поле URL-адрес сервера.
На этом всё, настройка закончена.
P.S. Резервная копия
Для резервной копии наших данных достаточно скопировать папку:
/root/vaultvarden/vw-data/