From ebc686392e8325ec7833d859f5eb8bf291bd10c5 Mon Sep 17 00:00:00 2001
From: Christian Elberfeld <6413499+elberfeld@users.noreply.github.com>
Date: Thu, 14 Mar 2024 00:07:45 +0100
Subject: [PATCH] Vaultwarden Server on Verwaltung

---
 host_vars/verwaltung                          |  3 +
 site.yml                                      |  8 ++-
 verwaltung/docker_vaultwarden/tasks/main.yml  | 39 +++++++++++++
 .../templates/docker-compose.yml              | 56 +++++++++++++++++++
 4 files changed, 105 insertions(+), 1 deletion(-)
 create mode 100644 verwaltung/docker_vaultwarden/tasks/main.yml
 create mode 100644 verwaltung/docker_vaultwarden/templates/docker-compose.yml

diff --git a/host_vars/verwaltung b/host_vars/verwaltung
index a72fe32b..f29794ba 100644
--- a/host_vars/verwaltung
+++ b/host_vars/verwaltung
@@ -34,6 +34,7 @@ webserver_domains:
   - "verwaltung.warpzone.ms"
   - "verwaltung-git.warpzone.ms"
   - "verwaltung-jameica.warpzone.ms"
+  - "vault.warpzone.ms"
 
 
 #OpenVPN Konfigurationen 
@@ -78,6 +79,8 @@ alert:
     - { name: "nextcloud-redis-1" }
     - { name: "nextcloud-webcron-1" }
     - { name: "traefik-app-1" }
+    - { name: "vaultwarden-app-1" }
+    - { name: "vaultwarden-backup-1" }
     - { name: "watchtower-app-1" }
   disks: 
     - { mountpoint: "/", warn: "5 GB", crit: "1 GB" }
diff --git a/site.yml b/site.yml
index 656163a7..2371c05a 100644
--- a/site.yml
+++ b/site.yml
@@ -351,9 +351,15 @@
       }
     - { 
         role: verwaltung/docker_nextcloud, tags: nextcloud,
-        servicename: "nextcloud",
+        servicename: "nextcloud",        
         domain: "verwaltung.warpzone.ms" 
       }
+    - { 
+        role: verwaltung/docker_vaultwarden, tags: vaultwarden,
+        servicename: "vaultwarden",
+        basedir: /srv/vaultwarden,
+        domain: "vault.warpzone.ms" 
+      }
     - { 
         role: verwaltung/docker_mysql, tags: mysql 
       }
diff --git a/verwaltung/docker_vaultwarden/tasks/main.yml b/verwaltung/docker_vaultwarden/tasks/main.yml
new file mode 100644
index 00000000..8d398186
--- /dev/null
+++ b/verwaltung/docker_vaultwarden/tasks/main.yml
@@ -0,0 +1,39 @@
+---
+
+- include_tasks: ../functions/get_secret.yml
+  with_items:
+    - { path: "{{ basedir }}/secrets/vaultwarden_admin_token", length: 40 }
+    - { path: /srv/shared/noreply_email_pass,  length: -1 }
+
+
+- name: "create folder struct for {{ servicename }}"
+  file:
+    path: "{{ item }}"
+    state: "directory"
+  with_items:
+    - "{{ basedir }}"
+    - "{{ basedir }}/secrets"
+    - "{{ basedir }}/data"
+    - "{{ basedir }}/backup"
+
+
+- name: deploy {{ servicename }} config
+  template:
+    dest:  "{{ basedir }}/{{ item }}"
+    src: "{{ item }}"
+  with_items:
+    - docker-compose.yml
+  register: config
+
+
+- name: "stop {{ servicename }} docker"
+  community.docker.docker_compose_v2:
+    project_src: "{{ basedir }}"
+    state: absent
+  when: config.changed
+
+
+- name: "start {{ servicename }} docker"
+  community.docker.docker_compose_v2:
+    project_src: "{{ basedir }}"
+    state: present
diff --git a/verwaltung/docker_vaultwarden/templates/docker-compose.yml b/verwaltung/docker_vaultwarden/templates/docker-compose.yml
new file mode 100644
index 00000000..19daa0d2
--- /dev/null
+++ b/verwaltung/docker_vaultwarden/templates/docker-compose.yml
@@ -0,0 +1,56 @@
+version: '3'
+
+services:
+
+  app:
+
+    image: vaultwarden/server:latest
+    restart: always
+    labels:
+      - traefik.enable=true
+      - traefik.http.routers.{{ servicename }}.rule=Host(`{{ domain }}`)
+      - traefik.http.routers.{{ servicename }}.entrypoints=websecure
+      - traefik.http.services.{{ servicename }}.loadbalancer.server.port=80
+    environment:
+      - ADMIN_TOKEN={{ vaultwarden_admin_token }}
+      - DOMAIN=https://{{ domain }}    
+      - INVITATIONS_ALLOWED=false
+      - INVITATION_ORG_NAME=warpzone
+      - LOG_LEVEL=warn
+      - SENDS_ALLOWED=true
+      - SIGNUPS_ALLOWED=false
+      - SMTP_HOST={{ smtp_host }}
+      - SMTP_FROM={{ noreply_email_user }}
+      - SMTP_PORT=587
+      - SMTP_SECURITY=starttls
+      - SMTP_USERNAME={{ noreply_email_user }}
+      - SMTP_PASSWORD={{ noreply_email_pass }}
+      - SIGNUPS_VERIFY=true
+      - SHOW_PASSWORD_HINT=false
+      - TZ=Europe/Berlin
+      - WEBSOCKET_ENABLED=false
+    volumes:
+      - {{ basedir }}/data:/data
+    networks:
+      - web
+      - default
+
+  backup:
+    image: bruceforce/vaultwarden-backup:latest
+    restart: always
+    init: true
+    depends_on:
+      - app
+    volumes:
+      - {{ basedir }}/data:/data/
+      - {{ basedir }}/backup:/backup/
+    environment:
+      - TZ=Europe/Berlin
+      - DELETE_AFTER=30
+      - TIMESTAMP=true
+      - GID=1000
+      - UID=1000
+
+networks:
+  web:
+    external: true
-- 
GitLab