웹사이트 검색

Ubuntu 22.04에서 Docker로 Vaultwarden을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - Docker 및 Docker Compose 설치
  4. 3단계 - Vaultwarden용 Docker Compose 파일 만들기
  5. 4단계 - 추가 Vaultwarden 구성
    1. 등록 비활성화\n
    2. 초대장 비활성화\n
    3. 암호 힌트 비활성화\n
    4. 관리자 패널 비활성화\n
    5. 보관소 기록

    Vaultwarden은 Rust 언어로 작성된 Bitwarden 서버의 비공식 포트입니다. 공식 Bitwarden 클라이언트와 호환되며 Bitwarden보다 리소스가 적습니다. 몇 가지를 제외하고 Bitwarden의 거의 모든 기능을 구현합니다. Bitwarden API를 사용하여 조직 지원, 첨부 파일, 인증자, U2F, Yubikey, Duo 지원 및 이메일 별칭 서비스 지원과 같은 기능을 제공합니다.

    이 튜토리얼에서는 Ubuntu 22.04 서버에서 Vaultwarden 사본을 설정하는 방법을 배웁니다.

    전제 조건

    • 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 및 HTTP 포트를 허용합니다.

    $ 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 설치

    Dockers 공식 GPG 키를 추가합니다.

    $ 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}
    

    &#36 {USER} 변수는 현재 로그인된 시스템 계정을 선택합니다. 권한을 부여하려는 사용자로 로그인하지 않은 경우 &#36 {USER}를 사용자 이름으로 바꿉니다.

    새로운 그룹 가입을 신청하려면 서버에서 로그아웃했다가 다시 로그인하거나 다음 명령을 사용하십시오. 사용자 암호를 묻는 메시지가 나타납니다.

    $ su - ${USER}
    

    3단계 - Vaultwarden용 Docker Compose 파일 생성

    Vaultwarden에 대한 새 디렉터리를 만듭니다.

    $ mkdir vaultwarden
    

    디렉터리로 전환합니다.

    $ cd vaultwarden
    

    Docker Compose 파일을 생성하고 편집을 위해 엽니다.

    $ 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를 입력하여 파일을 저장합니다.

    하나의 Docker Compose 파일에 Vaultwarden 및 Caddy 웹 서버를 설정하고 있습니다. 파일에 정의된 모든 옵션을 살펴보겠습니다.

    • 이미지는 Dockerhub에서 Vaultwarden 및 Caddy의 Docker 이미지 위치를 나타냅니다.
    • container_name을 사용하면 Docker 네트워크 내에서 컨테이너를 참조할 때 사용할 수 있도록 Docker 컨테이너에 레이블을 적용할 수 있습니다.\n
    • restart는 컨테이너에 대한 재시작 정책을 지정합니다. 항상으로 설정하면 컨테이너가 종료되면 자동으로 다시 시작됩니다.\n
    • 환경 섹션은 Vaultwarden 및 Caddy에 필요한 변수를 설정합니다. 서비스의 SMTP 포트가 587인 경우 SMTP_SECURITY 변수 값을 starttls로 설정하고 서비스의 SMTP 포트가 465인 경우 변수 SMTP_SECURITY의 값을 force_tls로 설정합니다. 이메일 확인이 작동하려면 도메인 변수가 필요합니다. 알림이 작동하도록 웹 소켓을 활성화했습니다.\n
    • 볼륨은 영구 데이터를 저장하기 위해 서버에 있는 디렉토리를 정의합니다. 서버의 /vw-data 디렉토리는 Vaultwarden이 필요로 하는 모든 데이터를 저장하는 컨테이너의 /data 디렉토리에 매핑됩니다. 같은 방식으로 캐디 파일의 위치, 캐디 구성 및 캐디 데이터는 컨테이너의 각 디렉터리에 매핑됩니다. Docker는 볼륨 섹션 아래에 구성된 서버에 각 디렉토리를 자동으로 생성합니다.\n
    • 포트는 호스트에 포트 또는 포트 범위를 게시하도록 컨테이너에 지시합니다.\n

    4단계 - 추가 Vaultwarden 구성

    등록 비활성화

    사용자 등록을 위해 Vaultwarden 설치를 열지 않으려면 Docker 작성 파일의 environment 섹션 아래에 다음 변수를 추가하여 비활성화할 수 있습니다.

    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"
    

    Compose 파일의 volumes 섹션에 있는 구성을 사용하여 호스트에 정적 파일을 제공하여 Vault 파일을 재정의할 수 있습니다.

    volumes:
          - ./vw-data:/data
    	  - /path/to/static/files_directory:/web-vault
    

    금고감시자 기록

    Vaultwarden은 표준 출력에만 기록합니다. 파일에 기록하도록 구성할 수 있습니다.

    LOG_FILE: "/data/vaultwarden.log"
    

    로그 메시지 수를 줄이려면 EXTENDED_LOGGING 변수를 true로 설정하면서 로그 수준을 warn으로 설정할 수 있습니다.

    LOG_LEVEL: "warn"
    EXTENDED_LOGGING: "true"
    

    5단계 - Vaultwarden용 캐디 파일 만들기

    이제 Vaultwarden을 구성했으므로 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 실행

    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단계 - Bitwarden 클라이언트와 함께 Vaultwarden 사용

    브라우저에서 URL https://vaultwarden.example.com을 엽니다.

    첫 번째 단계는 계정을 만드는 것입니다. 계속하려면 계정 만들기 버튼을 클릭하십시오.

    계정 세부 정보를 입력하고 제출 버튼을 클릭하여 계속 진행하십시오. 로그인 페이지로 리디렉션됩니다. 로그인하려면 계정 정보를 입력하세요.

    이메일을 확인하여 계정 전체 기능을 잠금 해제해야 합니다. 이메일 보내기 버튼을 클릭하여 확인 메일을 보냅니다.

    다음 메일을 받게 됩니다. 링크를 클릭하여 이메일 주소를 확인하십시오.

    이제 Vaultwarden 계정이 준비되었으므로 Bitwarden 클라이언트와 함께 사용할 차례입니다. 튜토리얼에서는 Chrome 확장 프로그램을 사용하고 있습니다. Bitwardens 웹 사이트에서 다운로드하여 설치하십시오.

    확장 프로그램 아이콘을 클릭하여 Vaultwarden 로그인 화면을 불러옵니다.

    팝업 왼쪽 상단의 톱니바퀴 아이콘을 클릭하여 고급 설정 페이지를 불러옵니다. https://vaultwarden.example.com을 서버 URL로 채웁니다.

    저장 버튼을 클릭하여 설정을 적용합니다. Vaultwarden 자격 증명으로 로그인하여 앱에 로그인합니다.

    로그인하면 앱 페이지로 이동하여 Bitwarden을 사용할 수 있습니다.

    8단계 - Vaultwarden 백업

    Vaultwarden은 데이터를 SQLite 데이터베이스에 저장합니다. 한 가지 방법은 /vw-data 폴더에서 .sqlite3 파일을 복사하는 것입니다. 그러나 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
    

    정기적인 백업 일정을 만들려면 시스템 타이머 단위 파일을 만들고 엽니다. 파일 이름이 서비스의 파일 이름과 일치하는지 확인해야 합니다.

    $ 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* 파일 백업해야 합니다. sendsicon_cache 디렉토리는 선택 사항이며 충분히 크고 필요한 경우 백업해야 합니다. 그들은 엄격히 선택 사항입니다.

    9단계 - Vaultwarden 복원

    Vaultwarden 데이터를 복원하려면 컨테이너가 중지되었는지 확인하십시오. 데이터 디렉터리 아래의 모든 항목을 백업된 버전으로 바꿀 수 있습니다. SQLite 백업을 복원할 때 손상을 방지하기 위해 기존 db.sqlite3-wal 파일을 삭제해야 합니다.

    10단계 - Vaultwarden 업데이트

    Vaultwarden 업그레이드는 간단한 단계입니다. Vaultwardens Docker 작성 디렉터리로 전환합니다.

    $ cd ~/vaultwarden
    

    그런 다음 기존 컨테이너를 중지하고 제거합니다. 귀하의 데이터는 유지됩니다.

    $ docker compose down --remove-orphans
    

    최신 버전의 Gitlab 도커 이미지를 가져옵니다.

    $ docker compose pull
    

    컨테이너를 다시 시작하십시오.

    $ docker compose up -d
    

    Vaultwarden 설치가 업데이트되고 다시 시작됩니다.

    결론

    이것으로 Ubuntu 22.04 서버에 Vaultwarden을 설치하고 구성하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.