vaultwarden docker

Vaultwarden y traefik

by Mayra Salas

Vaultwarden es una bifurcación (fork) del proyecto Bitwarden_RS. El objetivo de Vaultwarden es proporcionar una alternativa de servidor de Bitwarden que sigue siendo de código abierto y mantenido por la comunidad.

Es por ello, que en esta guia, aprederemos a montar el servicio de Vaultwarden y traefik

Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

Requerimientos de sistema

  • Memoria : 2GB o más
  • Disco duro : Más de 10GB de espacio disponible en disco duro
  • Sistema : CentOS 7.1+ (Ubuntu20, Debian10), garantizar que sea un sistema operativo limpio

Ahora es necesario crear redes para sus servicios.

Creamos una red para Traefik usando el comando:

docker network create traefik-network
docker network create vaultwarden-network

A continuación, cree un fichero con el nombre docker-compose.yml y copie el siguiente codigo :


networks:
  vaultwarden-network:
    external: true
  traefik-network:
    external: true

volumes:
  vaultwarden-data:
  traefik-certificates:

services:
  vaultwarden:
    image: ${VAULTWARDEN_IMAGE_TAG}
    volumes:
      - vaultwarden-data:/data
    environment:
      WEBSOCKET_ENABLED: 'true'
      SIGNUPS_ALLOWED: ${VAULTWARDEN_SIGNUPS_ALLOWED}
    networks:
      - vaultwarden-network
      - traefik-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80/"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.vaultwarden.rule=Host(`${VAULTWARDEN_HOSTNAME}`)"
      - "traefik.http.routers.vaultwarden.service=vaultwarden"
      - "traefik.http.routers.vaultwarden.entrypoints=websecure"
      - "traefik.http.services.vaultwarden.loadbalancer.server.port=80"
      - "traefik.http.routers.vaultwarden.tls=true"
      - "traefik.http.routers.vaultwarden.tls.certresolver=letsencrypt"
      - "traefik.http.services.vaultwarden.loadbalancer.passhostheader=true"
      - "traefik.http.routers.vaultwarden.middlewares=compresstraefik"
      - "traefik.http.middlewares.compresstraefik.compress=true"
      - "traefik.docker.network=traefik-network"
    restart: unless-stopped
    depends_on:
      traefik:
        condition: service_healthy

  traefik:
    image: ${TRAEFIK_IMAGE_TAG}
    command:
      - "--log.level=${TRAEFIK_LOG_LEVEL}"
      - "--accesslog=true"
      - "--api.dashboard=true"
      - "--api.insecure=true"
      - "--ping=true"
      - "--ping.entrypoint=ping"
      - "--entryPoints.ping.address=:8082"
      - "--entryPoints.web.address=:80"
      - "--entryPoints.websecure.address=:443"
      - "--providers.docker=true"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.exposedByDefault=false"
      - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.email=${TRAEFIK_ACME_EMAIL}"
      - "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme/acme.json"
      - "--metrics.prometheus=true"
      - "--metrics.prometheus.buckets=0.1,0.3,1.2,5.0"
      - "--global.checkNewVersion=true"
      - "--global.sendAnonymousUsage=false"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - traefik-certificates:/etc/traefik/acme
    networks:
      - traefik-network
    ports:
      - "80:80"
      - "443:443"
    healthcheck:
      test: ["CMD", "wget", "http://localhost:8082/ping","--spider"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 5s
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dashboard.rule=Host(`${TRAEFIK_HOSTNAME}`)"
      - "traefik.http.routers.dashboard.service=api@internal"
      - "traefik.http.routers.dashboard.entrypoints=websecure"
      - "traefik.http.services.dashboard.loadbalancer.server.port=8080"
      - "traefik.http.routers.dashboard.tls=true"
      - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
      - "traefik.http.services.dashboard.loadbalancer.passhostheader=true"
      - "traefik.http.routers.dashboard.middlewares=authtraefik"
      - "traefik.http.middlewares.authtraefik.basicauth.users=${TRAEFIK_BASIC_AUTH}"
      - "traefik.http.routers.http-catchall.rule=HostRegexp(`{host:.+}`)"
      - "traefik.http.routers.http-catchall.entrypoints=web"
      - "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    restart: unless-stopped

y cree un fichero .env para personalizar las variables de entorno

# Traefik Variables
TRAEFIK_IMAGE_TAG=traefik:2.9
TRAEFIK_LOG_LEVEL=WARN
[email protected]
#Puede ingresar un nombre de dominio o la dirección ip local del servidor 
TRAEFIK_HOSTNAME=traefik.mundolinux.xyz
# Basic Authentication for Traefik Dashboard
# Username: traefikadmin
# Passwords qwer1234 
TRAEFIK_BASIC_AUTH=traefikadmin:$apr1$tm53ra6x$FntXd6jcvxYM/YH0P2hcc1

# Vaultwarden Variables
VAULTWARDEN_IMAGE_TAG=vaultwarden/server:1.29.1
#Puede ingresar un nombre de dominio o la dirección ip local del servidor 
VAULTWARDEN_HOSTNAME=vaultwarden.mundolinux.xyz
VAULTWARDEN_SIGNUPS_ALLOWED=true

Ahora inciemos Vaultwarden con el comando:

docker compose -f docker-compose.yml -p vaultwarden up -d

Enlaces de referencia:

ttionya/vaultwarden-backup: Backup vaultwarden (formerly known as bitwarden_rs) SQLite3/PostgreSQL/MySQL/MariaDB database by rclone. (Docker) (github.com)

dani-garcia/vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs (github.com)

Related Posts

Leave a Comment