Поиск по сайту:

Как установить Vaultwarden с Docker на Ubuntu 22.04


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Docker и Docker Compose
  4. Шаг 3. Создайте файл Docker Compose для Vaultwarden
  5. Шаг 4. Дополнительная конфигурация Хранителя Хранилища
    1. Отключение регистрации
    2. Отключить приглашения
    3. Отключить подсказки для пароля
    4. Отключение панели администратора
    5. Журнал Хранителя Хранилища

    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. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.