Traffic-Fluss & Komponenten
AliasVault läuft als Docker-Container auf Server3 und ist intern nur über HTTP erreichbar. HTTPS-Terminierung übernimmt Nginx auf Server1 — das klassische Reverse-Proxy-Muster des Homelabs. Die Android-App verbindet sich über die gleiche HTTPS-URL wie der Browser.
Browser / Android App │ HTTPS 443 ▼ Pi-hole DNS aliasvault.local → 203.0.113.10 (FortiGate WAN) │ ▼ FortiGate VIP-HTTPS → 10.0.1.71:443 (Server1) │ ▼ Nginx auf Server1 server_name aliasvault.local proxy_pass → 10.0.1.83:8300 TRUSTED_PROXIES: 10.0.1.71 │ HTTP intern ▼ AliasVault auf Server3 Port 8300 Daten: /opt/aliasvault/{database,logs,secrets,certificates}
| Parameter | Wert | Notiz |
|---|---|---|
| Docker Image | ghcr.io/aliasvault/aliasvault:latest | GitHub Container Registry |
| Host | Server3 (10.0.1.83) | Always-on |
| Port intern | 8300 → 80 | Nginx proxy_pass auf :8300 |
| Port-Binding | 10.0.1.83:8300:80 | Nicht 127.0.0.1 — Nginx muss drauf! |
| HTTPS | Nginx + mkcert | FORCE_HTTPS_REDIRECT: false |
| Trusted Proxy | 10.0.1.71 | Nur Server1 (Nginx) |
Docker Compose auf Server3
services: aliasvault: image: ghcr.io/aliasvault/aliasvault:latest container_name: aliasvault restart: unless-stopped ports: # Auf Server-IP binden — Nginx auf Server1 muss drauf zugreifen! - "10.0.1.83:8300:80" volumes: - ./database:/database - ./logs:/logs - ./secrets:/secrets - ./certificates:/certificates environment: # Muss dem externen Hostnamen entsprechen den der Browser sieht HOSTNAME: "aliasvault.local" # HTTPS wird von Nginx übernommen — kein interner Redirect FORCE_HTTPS_REDIRECT: "false" # Nur Server1 (Nginx) als vertrauenswürdiger Proxy TRUSTED_PROXIES: "10.0.1.71" # Öffentliche Registrierung: erst true für eigenen Account, danach false PUBLIC_REGISTRATION_ENABLED: "false" IP_LOGGING_ENABLED: "true" # Kein externer Mail-Support → leer lassen SUPPORT_EMAIL: "" PRIVATE_EMAIL_DOMAINS: "" SMTP_TLS_ENABLED: "false"
mkdir -p /opt/aliasvault
cd /opt/aliasvault
# docker-compose.yml anlegen (siehe oben)
docker compose up -d
docker compose logs -f
Admin einrichten & Account anlegen
/admin "Admin User Not Configured" zeigt:
docker compose exec -it aliasvault /bin/bash aliasvault reset-admin-password exit docker compose restart
# 1. Auf true setzen PUBLIC_REGISTRATION_ENABLED: "true" # 2. Neu starten docker compose down && docker compose up -d # 3. Browser: https://aliasvault.local → Account registrieren # Master-Passwort sicher wählen und SICHER aufbewahren! # 4. Sofort wieder auf false setzen + neu starten PUBLIC_REGISTRATION_ENABLED: "false" docker compose down && docker compose up -d
https://aliasvault.local/admin einloggen und prüfen ob
der angelegte Account sichtbar ist. Registrierung ist nun geschlossen.
AliasVault verschlüsselt den gesamten Vault mit dem Master-Passwort. Es gibt keine Wiederherstellungsmöglichkeit ohne das Master-Passwort — kein Reset, kein Support, keine Hintertür. Das Passwort sicher und offline aufbewahren, z.B. auf Papier in einem physisch gesicherten Ort.
Reverse Proxy Konfiguration
server { listen 443 ssl; server_name aliasvault.local; ssl_certificate /etc/nginx/certs/homelab.pem; ssl_certificate_key /etc/nginx/certs/homelab-key.pem; location / { proxy_pass http://10.0.1.83:8300; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket — wird von AliasVault genutzt proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Vault-Import erlauben client_max_body_size 20M; } } # HTTP-Redirect wird global von 00-redirect.conf übernommen
docker exec nginx nginx -t && docker exec nginx nginx -s reload
aliasvault.local → 203.0.113.10 — wie alle lokalen Domains
auf die FortiGate WAN-IP, nicht auf Server3 direkt.
App einrichten & CA installieren
Die AliasVault Android-App (ab v0.23) unterstützt explizit selbstsignierte
CA-Zertifikate. Die mkcert Root-CA muss auf dem Gerät installiert sein,
damit die App die HTTPS-Verbindung zu aliasvault.local akzeptiert.
Der Vault wird lokal gecacht — auch ohne Heimnetz-Verbindung nutzbar.
cp $(mkcert -CAROOT)/rootCA.pem ~/homelab-ca.pemDatei per USB, ADB oder lokaler Webserver auf das Android-Gerät übertragen.
→ Sicherheit
→ Datenschutz & Sicherheit
→ Mehr Sicherheit
→ Verschlüsselung & Anmeldedaten
→ CA-Zertifikat installieren
→ Datei auswählen
Server-URL eingeben:
https://aliasvault.localMit Benutzername + Master-Passwort einloggen.
Vault wird lokal gecacht → offline verfügbar
Wird das mkcert-Zertifikat neu generiert (neue Domain hinzugefügt), muss die CA auf Android neu installiert werden. Die alte Version wird nicht automatisch aktualisiert. Symptom: App meldet Zertifikatsfehler obwohl die URL stimmt.
Der Vault wird beim App-Start synchronisiert wenn das Heimnetz erreichbar ist.
Ist kein Zugriff auf aliasvault.local möglich (unterwegs, kein VPN),
arbeitet die App mit dem lokalen Cache weiter — alle Passwörter und Aliase
bleiben lesbar, neue Einträge werden beim nächsten Sync übertragen.
AliasVault aktuell halten
cd /opt/aliasvault docker compose pull docker compose down docker compose up -d docker compose logs -f # Daten liegen in bind-mounts → bleiben beim Update erhalten # /opt/aliasvault/{database,logs,secrets,certificates}
Die Daten liegen in Bind-Mounts unter /opt/aliasvault/ —
ein einfaches tar -czf aliasvault-backup-$(date +%Y%m%d).tar.gz /opt/aliasvault/database /opt/aliasvault/secrets
reicht als Backup vor einem Update.
Was schiefgehen kann
127.0.0.1:8300:80 statt auf die
Server-IP gesetzt. Nginx auf Server1 kann localhost von Server3
nicht erreichen. In der docker-compose.yml auf
10.0.1.83:8300:80 ändern und Container neu starten.
docker compose exec -it aliasvault /bin/bash,
dann aliasvault reset-admin-password,
danach docker compose restart.
PUBLIC_REGISTRATION_ENABLED ist auf "false" gesetzt.
Für die Erstregistrierung temporär auf "true" setzen,
Container neu starten, Account anlegen, sofort wieder auf "false"
und erneut neu starten.
proxy_set_header Upgrade $http_upgrade und
proxy_set_header Connection "upgrade" im Location-Block stehen.
Nginx neu laden: docker exec nginx nginx -s reload.
HOSTNAME-Umgebungsvariable muss exakt dem Hostnamen entsprechen
den der Browser in der URL-Zeile sieht — also aliasvault.local,
nicht die Server-IP oder eine andere Schreibweise.
Nach Änderung Container neu starten.