Vaultwarden
Jump to navigation
Jump to search
Introduction
Install Vaultwarden on standalone Rocky Linux 9 host with Ansible & Docker CE locally installed.
The idea here is that you use the application behind a Reverse Proxy like HAProxy or NGNIX Proxy. That configuration is not mentioned here. Additionally it would be a good idea to encrypt the traffic behind the Reverse Proxy and the server. Otherwise the traffic is not encrypted and you can not use the CLI tool from Bitwarden Password Manager CLI.
▶ Installation carried out and tested 17.02.2024 ◀
Prequesites and install
#Become root
sudo su -Remove & install needed software
- Git and ansible-core packages are only needed if you haven't already got a functioning Docker host
- Podman has to be removed in order for Docker CE to be installed
dnf install git ansible-core
dnf remove podmanInstall Ansible & Docker CE
- Roles and Playbooks from Ansible are stored under /etc/
mkdir /etc/ansible /etc/ansible/roles /etc/ansible/playbooks
cd /etc/ansible/roles
git clone https://github.com/haxorof/ansible-role-docker-ce.git docker_ce
cd /etc/ansible/playbooksvi setup-docker-ce.yml
-------------START-------------
- hosts: localhost
become: True
vars:
docker_daemon_envs:
# do not use HTTP_PROXY since it is used by bitwarden internally, which leads to proxy requests for internal docker services
HTTPS_PROXY: "{{ lookup('env', 'HTTP_PROXY') }}"
NO_PROXY: "{{ lookup('env', 'NO_PROXY') }}"
docker_compose: true
roles:
- docker_ce
-------------END-------------ansible-playbook setup-docker-ce.ymlInstall Vaultwarden
Firewalld
sed -i 's/FirewallBackend=.*/FirewallBackend=iptables/' /etc/firewalld/firewalld.conf
grep FirewallBackend /etc/firewalld/firewalld.conf
systemctl restart firewalld
systemctl enable firewalld
firewall-cmd --add-service=https --permanent
systemctl restart firewalldUser Vaultwarden
Still needed? Under revision. Skip for now.
adduser bitwarden
usermod -aG docker bitwarden
mkdir /opt/bitwarden
chmod -R 700 /opt/bitwarden
chown -R bitwarden:bitwarden /opt/bitwarden
cd /opt/
ll
cd bitwarden/
ll
cd ..
rm -r bitwarden
mkdir vaultwarden
ll
chmod -R 700 /opt/vaultwarden/
chown -R bitwarden:bitwarden /opt/vaultwarden/
cd /srv/
ll
ll /opt/
mkdir vaultwarden
cd vaultwarden/
su - bitwardenAdmin PW
dnf config-manager --set-enabled crb
dnf install epel-release
dnf search argon2
dnf install argon2
ADMIN_PASSWORD=$(tr -dc A-Za-z0-9_=%.,: < /dev/urandom | head -c 24)
echo ADMIN_PASSWORD=$ADMIN_PASSWORD
#Write This down!!!! Otherwise your admin access is lost forever!!!
ADMIN_TOKEN="$(echo -n $ADMIN_PASSWORD | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4 | sed 's#\$#\$\$#g')"
echo ADMIN_TOKEN=$ADMIN_TOKEN
#Salt for Admin TokenWorking directory
mkdir /srv/vaultwarden
cd /srv/vaultwardenDocker Compose
vi docker-compose.yml
-------------START-------------
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
ADMIN_TOKEN: "$$argon2id$$v=19$$m=65540,t=3,p=4$<SALT FOR ADMIN TOKEN>""
DATABASE_URL: "mysql://vw:<MYSQL PW>@mariadb:3306/vw"
volumes:
- ./vw-data:/data
ports:
- "80:80"
mariadb:
image: mariadb:10.6
environment:
MYSQL_ROOT_PASSWORD: <MYSQL ROOT PW>
MYSQL_DATABASE: vw
MYSQL_USER: vw
MYSQL_PASSWORD: <MYSQL PW>
volumes:
- ./mysql-data:/var/lib/mysql
ports:
- "3306:3306"
mysql-cron-backup:
image: fradelg/mysql-cron-backup
depends_on:
- mariadb
volumes:
- ./mariadb-backup:/backup
environment:
MYSQL_HOST: "mariadb"
MYSQL_USER: "root"
MYSQL_PASS: "<MYSQL ROOT PW>"
MAX_BACKUPS: "15"
INIT_BACKUP: "0"
CRON_TIME: "1 1 * * *"
GZIP_LEVEL: "9"
MYSQLDUMP_OPTS: "--no-tablespaces"
restart: "unless-stopped"
-------------END-------------Vaultwarden Service
vi /etc/systemd/system/docker-vaultwarden.service
-------------START-------------
[Unit]
Description=Docker Compose: Vaultwarden
[Service]
Type=oneshot
WorkingDirectory=/srv/vaultwarden
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
-------------END-------------systemctl daemon-reload
systemctl enable docker-vaultwarden.service
systemctl start docker-vaultwarden.service
systemctl status docker-vaultwarden.serviceTesting
- Restart the service and check Webservice
- Restart the server and check Webservice
- Write data and do no. 1 or 2
# Test for functionality
systemctl stop docker-vaultwarden.service
systemctl start docker-vaultwarden.service
systemctl status docker-vaultwarden.serviceAlias directory
sudo su -
vi .bashrc
...
alias cda='cd /srv/vaultwarden'
...Update Vaultwarden
# Stop service
systemctl stop docker-vaultwarden
# cd and pull lates images
cda && docker compose pull
## or alternatively
cd /srv/vaultwarden && docker compose pull
# Start service and check status
systemctl start docker-vaultwarden
systemctl status docker-vaultwardenConfiguration Webservice
http://IpOfYourServer/admin
##General Settings
Domain URL: https://YourDesiredUrl.com
##Advanced settings
Client IP header: X-Forwarded-For
##SMTP Email Settings
Host: Mailserver
Secure SMTP: force_tls
Port: 465
From Address: Mailaddress@YourDesiredUrl.com
From Name: Vaultwarden
Username: Mailaddress@YourDesiredUrl.com
Password: xxxxxx
SMTP Auth mechanism: Login
SMTP connection timeout: 15
Server name sent during HELO: YourDesiredUrl.com