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:
- Un servidor Ubuntu 20.04 con un usuario sudo. Puede configurar esto siguiendo nuestra guía de configuración inicial del servidor Ubuntu 20.04.
- Docker instalado
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: