Как установить Vaultwarden с Docker на Ubuntu 22.04
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Docker и Docker Compose
- Шаг 3. Создайте файл Docker Compose для Vaultwarden
- Шаг 4. Дополнительная конфигурация Хранителя Хранилища
- Отключение регистрации
- Отключить приглашения
- Отключить подсказки для пароля
- Отключение панели администратора
- Журнал Хранителя Хранилища
Vaultwarden — это неофициальный порт сервера Bitwarden, написанный на языке Rust. Он совместим с официальными клиентами Bitwarden и требует меньше ресурсов, чем Bitwarden. Он реализует почти все функции Bitwarden, за исключением некоторых. Он использует API Bitwarden для предоставления таких функций, как поддержка организации, вложения, аутентификатор, поддержка U2F, Yubikey, Duo и поддержка служб псевдонимов электронной почты.
В этом руководстве вы узнаете, как настроить свою копию Vaultwarden на сервере Ubuntu 22.04.
Предпосылки
-
A server running Ubuntu 22.04.
-
A non-root user with sudo privileges.
-
The uncomplicated Firewall(UFW) is enabled and running.
-
A Fully Qualified domain name (FQDN) pointing to the server like,
vaultwarden.example.com
. -
Everything is updated.
$ sudo apt update && sudo apt upgrade
Шаг 1. Настройте брандмауэр
Прежде чем устанавливать какие-либо пакеты, первым шагом является настройка брандмауэра для разрешения соединений HTTP и HTTPS.
Проверьте состояние брандмауэра.
$ sudo ufw status
Вы должны увидеть что-то вроде следующего.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Разрешить порты HTTP и HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Проверьте статус еще раз для подтверждения.
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Шаг 2. Установите Docker и Docker Compose
Добавьте официальный GPG-ключ Dockers.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Выполните следующую команду, чтобы добавить репозиторий Docker.
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновите систему, чтобы включить репозиторий Dockers.
$ sudo apt update
Установите Докер.
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
В этом руководстве будет использоваться плагин Docker Compose v2 вместо старого бинарного файла. Поэтому команда для его запуска изменилась с
docker-compose
наdocker compose
, и это отражено здесь.Docker работает с повышенными привилегиями, поэтому вам придется часто использовать
sudo
для запуска команд. Лучше всего добавить свою учетную запись пользователя Linux в группу пользователейdocker
.$ sudo usermod -aG docker ${USER}
Переменная
$ {USER}
выбирает текущую системную учетную запись, вошедшую в систему. Если вы не вошли в систему с пользователем, которому хотите предоставить привилегии, замените$ {USER}
на имя пользователя.Чтобы подать заявку на членство в новой группе, выйдите из сервера и снова войдите или используйте следующую команду. Вам будет предложено ввести пароль пользователя.
$ su - ${USER}
Шаг 3. Создайте файл Docker Compose для Vaultwarden
Создайте новый каталог для Vaultwarden.
$ mkdir vaultwarden
Перейдите в каталог.
$ cd vaultwarden
Создайте компоновочный файл Docker и откройте его для редактирования.
$ nano docker-compose.yml
Вставьте в него следующий код. Замените переменные DOMAIN и EMAIL соответствующими значениями.
version: '3' services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: always environment: WEBSOCKET_ENABLED: "true" # Enable WebSocket notifications. DOMAIN: "https://vaultwarden.example.com" SMTP_HOST: "<smtp.domain.tld>" SMTP_FROM: "<>" SMTP_PORT: "587" SMTP_SECURITY: "starttls" SMTP_USERNAME: "<username>" SMTP_PASSWORD: "<password>" volumes: - ./vw-data:/data caddy: image: caddy:2 container_name: caddy restart: always ports: - 80:80 # Needed for the ACME HTTP-01 challenge. - 443:443 volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy-config:/config - ./caddy-data:/data environment: DOMAIN: "https://vaultwarden.example.com" # Your domain. EMAIL: "" # The email address to use for ACME registration. LOG_FILE: "/data/access.log"
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Мы настраиваем Vaultwarden и веб-сервер Caddy в одном файле компоновки Docker. Давайте посмотрим на все параметры, определенные в файле.
- image — это расположение образов Docker Vaultwarden и Caddy на Dockerhub.
- container_name позволяет применить метку к контейнеру Docker для использования при ссылке на контейнер в сети Docker.
- restart указывает политику перезапуска контейнера. Установка его на always означает, что при выходе из контейнера он автоматически перезапускается.
- в разделе среды задаются переменные, необходимые для Vaultwarden и Caddy. Если SMTP-порт вашей службы — 587, установите для переменной
SMTP_SECURITY
значениеstarttls
, а если SMTP-порт вашей службы — 465, установите для переменнойSMTP_SECURITY
значениеforce_tls
. Переменная домена необходима для работы проверки электронной почты. Мы включили веб-сокеты для работы уведомлений. - volume определяет каталоги на сервере для хранения постоянных данных. Каталог
/vw-data
на сервере сопоставляется с каталогом/data
в контейнере, в котором хранятся все данные, необходимые Vaultwarden. Точно так же расположение файла Caddy, конфигурации Caddy и данных caddy сопоставляется с соответствующими каталогами в контейнере. Docker автоматически создаст соответствующие каталоги на сервере, настроенном в разделе Volume. - ports указывают контейнеру публиковать порты или диапазон портов на хосте.
Шаг 4. Дополнительная конфигурация Хранителя Хранилища
Отключение регистрации
Если вы не хотите, чтобы ваша установка Vaultwarden была открыта для регистрации пользователей, вы можете отключить ее, добавив следующую переменную в раздел
environment
файла компоновки Docker.environment: WEBSOCKET_ENABLED: "true" # Enable WebSocket notifications. SIGNUPS_ALLOWED: "false" ....
Отключить приглашения
Даже после отключения регистрации пользователей существующий пользователь, являющийся частью организации, по-прежнему может приглашать новых пользователей. Чтобы остановить это, используйте следующую переменную.
INVITATIONS_ALLOWED: "false"
Отключить подсказки пароля
Vaultwarden отправляет подсказки для пароля по электронной почте, а также показывает их на странице подсказки для пароля. Чтобы отключить эту функцию, установите значение переменной
SHOW_PASSWORD_HINT
.SHOW_PASSWORD_HINT: "false"
Отключение панели администратора
Vaultwarden размещает статические файлы для своего веб-интерфейса. Вы можете отключить это, установив для следующей переменной значение false.
WEB_VAULT_ENABLED: "false"
Вы можете переопределить файлы Vault, предоставив свои статические файлы для размещения, используя конфигурацию в разделе
volumes
в файле Compose.volumes: - ./vw-data:/data - /path/to/static/files_directory:/web-vault
Журнал Хранителя Убежища
Vaultwarden записывает только стандартный вывод. Вы можете настроить его для записи в файл.
LOG_FILE: "/data/vaultwarden.log"
Чтобы уменьшить количество сообщений журнала, вы можете установить уровень журнала на
warn
, а также установить для переменнойEXTENDED_LOGGING
значение true.LOG_LEVEL: "warn" EXTENDED_LOGGING: "true"
Шаг 5 — Создайте файл Caddy для Vaultwarden
Теперь, когда мы настроили Vaultwarden, давайте создадим Caddy-файл для Vaultwarden и откроем его для редактирования.
$ nano Caddyfile
Вставьте в него следующий код.
{$DOMAIN}:443 { log { level INFO output file {$LOG_FILE} { roll_size 10MB roll_keep 10 } } # Use the ACME HTTP-01 challenge to get a cert for the configured domain. tls {$EMAIL} # This setting may have compatibility issues with some browsers # (e.g., attachment downloading on Firefox). Try disabling this # if you encounter issues. encode gzip # The file size is set to 500MB to support the Vaultwarden (Bitwarden) Send feature. request_body { max_size 500MB } header { # Enable cross-site filter (XSS) and tell browser to block detected attacks X-XSS-Protection "1; mode=block" # Disallow the site to be rendered within a frame (clickjacking protection) X-Frame-Options "DENY" # Prevent search engines from indexing (optional) X-Robots-Tag "none" # Server name removing -Server } # Notifications redirected to the WebSocket server reverse_proxy /notifications/hub vaultwarden:3012 # Proxy everything else to Rocket reverse_proxy vaultwarden:80 { # Send the true remote IP to Rocket, so that vaultwarden can put this in the # log, so that fail2ban can ban the correct IP. header_up X-Real-IP {remote_host} } }
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Шаг 6 — Запустите Хранителя Хранилища
Запустите контейнер Vaultwarden Docker.
$ docker compose up -d
Вы можете проверить состояние контейнера, используя следующую команду.
$ docker ps
Вы получите аналогичный результат.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ad23954f1d5 caddy:2 "caddy run --config …" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 2019/tcp caddy d55a037850bc vaultwarden/server:latest "/usr/bin/dumb-init …" About a minute ago Up About a minute (healthy) 80/tcp, 3012/tcp vaultwarden
Шаг 7. Используйте Vaultwarden с клиентами Bitwarden
Откройте URL-адрес
https://vaultwarden.example.com
в браузере.Первым шагом является создание учетной записи. Нажмите кнопку «Создать учетную запись», чтобы продолжить.
Введите данные своей учетной записи и нажмите кнопку «Отправить», чтобы продолжить. Вы будете перенаправлены на страницу входа. Введите данные своей учетной записи, чтобы войти.
Вам необходимо разблокировать все функции своих учетных записей, подтвердив свою электронную почту. Нажмите кнопку «Отправить письмо», чтобы отправить письмо с подтверждением.
Вы получите следующее письмо. Нажмите на ссылку, чтобы подтвердить свой адрес электронной почты.
Теперь, когда у нас есть готовая учетная запись Vaultwarden, пришло время использовать ее с клиентом Bitwarden. Для нашего урока мы используем расширение Chrome. Установите его, скачав с веб-сайта Bitwardens.
Нажмите на значок расширения, чтобы открыть экран входа в Vaultwarden.
Щелкните значок шестеренки в левом верхнем углу всплывающего окна, чтобы открыть страницу дополнительных настроек. Заполните
https://vaultwarden.example.com
в качестве URL-адреса сервера.Нажмите кнопку Сохранить, чтобы применить настройку. Войдите в систему, используя свои учетные данные Vaultwarden, чтобы войти в приложение.
После входа в систему вы попадете на страницу приложения и сможете начать использовать Bitwarden.
Шаг 8 — Резервное копирование Vaultwarden
Vaultwarden хранит свои данные в базе данных SQLite. Один из способов — просто скопировать файл
.sqlite3
из папки/vw-data
. Но это не рекомендуемое решение, поскольку база данных не будет находиться в согласованном состоянии из-за работы Vaultwarden. Для надежного резервного копирования мы будем использовать команду резервного копирования SQLite.Установите пакет
sqlite3
.$ sudo apt install sqlite3
Создайте каталог для резервных копий.
$ mkdir ~/vw-backups
Удалите права на чтение, запись и выполнение для группы и других пользователей.
$ chmod go-rwx ~/vw-backups
Создайте файл службы резервного копирования Vaultwarden и откройте его для редактирования.
$ sudo nano /etc/systemd/system/vaultwarden-backup.service
Вставьте в него следующий код.
[Unit] Description=backup the vaultwarden sqlite database [Service] Type=oneshot WorkingDirectory=/home/<username>/vw-backups ExecStart=/usr/bin/env bash -c 'sqlite3 /home/<username>/vaultwarden/vw-data/db.sqlite3 ".backup backup-$(date -Is | tr : _).sqlite3"' ExecStart=/usr/bin/find . -type f -mtime +30 -name 'backup*' -delete
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Запустите службу, чтобы протестировать ее и сделать резервную копию.
$ sudo systemctl start vaultwarden-backup.service
Проверьте наличие файла резервной копии.
$ ls -l ~/vw-backups
Вы должны увидеть список для файла резервной копии.
total 192 -rw-r--r-- 1 root root 196608 Jul 31 17:25 backup-2022-07-31T17_25_04+00_00.sqlite3
Чтобы создать регулярное расписание резервного копирования, создайте и откройте файл модуля таймера systemd. Вы должны убедиться, что имя файла совпадает с именем файла сервиса.
$ sudo nano /etc/systemd/system/vaultwarden-backup.timer
Вставьте в него следующий код.
[Unit] Description=schedule vaultwarden backups [Timer] OnCalendar=04:00 Persistent=true [Install] WantedBy=multi-user.target
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса. Это запланирует резервное копирование ежедневно в 4 утра.
Запустите и включите службу таймера.
$ sudo systemctl enable vaultwarden-backup.timer $ sudo systemctl start vaultwarden-backup.timer
Проверьте состояние службы таймера.
$ systemctl status vaultwarden-backup.timer ? vaultwarden-backup.timer - schedule vaultwarden backups Loaded: loaded (/etc/systemd/system/vaultwarden-backup.timer; enabled; vendor preset: enabled) Active: active (waiting) since Sun 2022-07-31 17:27:03 UTC; 7s ago Trigger: Mon 2022-08-01 04:00:00 UTC; 10h left Triggers: ? vaultwarden-backup.service Jul 31 17:27:03 vaultwarden systemd[1]: Started schedule vaultwarden backups.
Это просто резервирует данные. Вы должны убедиться, что файл базы данных регулярно резервируется вне офиса или в вашей локальной системе. Чтобы создать резервную копию остальных данных, вы можете сделать это, скопировав все в папку
~/vaultwarden/vw-data
. Из остального: каталогattachments
, файлconfig.json
и файлыrsa_key*
. необходимо сделать резервную копию. Каталогиsends
иicon_cache
являются необязательными и должны быть зарезервированы, если они достаточно велики и вам нужны. Они строго необязательны.Шаг 9 — Восстановить Хранителя Хранилища
Чтобы восстановить данные Vaultwarden, убедитесь, что контейнер остановлен. Вы можете заменить все в каталоге данных его резервной копией. При восстановлении резервной копии SQLite обязательно удалите существующий файл
db.sqlite3-wal
, чтобы избежать повреждения.Шаг 10. Обновите Хранителя Хранилища
Обновление Vaultwarden — это простой шаг. Перейдите в каталог компоновки Vaultwardens Docker.
$ cd ~/vaultwarden
Затем остановите и удалите существующий контейнер. Однако ваши данные будут сохранены.
$ docker compose down --remove-orphans
Загрузите последнюю версию образа докера Gitlab.
$ docker compose pull
Запустите контейнеры снова.
$ docker compose up -d
Ваша установка Vaultwarden обновлена и запущена снова.
Заключение
На этом мы завершаем наше руководство по установке и настройке Vaultwarden на сервере Ubuntu 22.04. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.