Initial commit: AliasVault VPS deployment configuration

This commit is contained in:
Hermes Agent
2026-05-04 08:59:43 +00:00
commit ca82784d05
4 changed files with 485 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
# ----------------------------------------------------------------------------
# AliasVault configuration file for VPS
#
# 1. Kopiere diese Datei nach .env im selben Verzeichnis wie docker-compose.vps.yml
# cp .env.example .env
# 2. Passe die Werte entsprechend an (insbesondere HOSTNAME und Passwörter)
# 3. Starte mit: docker-compose -f docker-compose.vps.yml up -d
# ----------------------------------------------------------------------------
# ===========================================
# NETWORK PORTS
# ===========================================
# Ports für den Reverse-Proxy - Ändere falls notwendig (z.B. 8080:80, 8443:443)
HTTP_PORT=80
HTTPS_PORT=443
# SMTP Ports - falls du einen eigenen Mailserver betreibst, passe diese an
SMTP_PORT=25
SMTP_TLS_PORT=587
# Redirect von HTTP zu HTTPS aktivieren (empfohlen)
FORCE_HTTPS_REDIRECT=true
# ===========================================
# EMAIL SERVER CONFIGURATION
# ===========================================
# Private Email-Domains, die der Server akzeptieren soll (kommagetrennt)
# Beispiel: PRIVATE_EMAIL_DOMAINS=meinedomain.com,beispiel.org
# Leer lassen, um die Funktion zu deaktivieren
PRIVATE_EMAIL_DOMAINS=
# Private Email-Domains, die in der UI versteckt werden sollen
HIDDEN_PRIVATE_EMAIL_DOMAINS=
# Hostname für SMTP (EHLO) - sollte mit PTR-DNS deiner IP übereinstimmen
# Beispiel: SMTP_ADVERTISED_HOSTNAME=mail.deinedomain.com
SMTP_ADVERTISED_HOSTNAME=
# SMTP TLS aktivieren (STARTTLS)
# Benötigt TLS-Zertifikate in ./certificates/smtp/
SMTP_TLS_ENABLED=false
# ===========================================
# Let's Encrypt configuration
# ===========================================
# Let's Encrypt aktivieren (für automatische SSL-Zertifikate)
# Benötigt HOSTNAME (öffentliche Domain) und offene Ports 80/443
LETSENCRYPT_ENABLED=false
# Öffentlicher Hostname für Let's Encrypt
# Beispiel: aliasvault.deinedomain.com
HOSTNAME=
# ===========================================
# Optional configuration settings
# ===========================================
# Öffentliche Registrierung erlauben
PUBLIC_REGISTRATION_ENABLED=true
# IP-Logging für Auth-Versuche (letztes Oktett wird anonymisiert)
IP_LOGGING_ENABLED=true
# Support-Email-Adresse (in der Web-App angezeigt)
SUPPORT_EMAIL=
# Maximale Upload-Größe in MB (für Vault-Sync)
MAX_UPLOAD_SIZE_MB=100
# IP-Beschränkung für /admin Endpoint
# - Leer = keine Beschränkung
# - "private" = nur lokale/RFC1918-Adressen
# - CIDR-Liste = z.B. "192.168.1.0/24,10.0.0.0/8"
ADMIN_IP_ALLOWLIST=
# Vertrauenswürdige Upstream-Proxies für X-Forwarded-For Header
# - Leer = RFC1918 vertrauen
# - "none" = keine Proxies vertrauen
# - CIDR-Liste = spezifische Proxies
TRUSTED_PROXIES=
# ===========================================
# WEITERE EINSTELLUNGEN
# ===========================================
# PostgreSQL Passwort - in ./secrets/postgres_password setzen
# Dieses Passwort muss in einer Datei ./secrets/postgres_password gespeichert werden
# Beispiel: echo "dein_starkes_passwort" > ./secrets/postgres_password
+106
View File
@@ -0,0 +1,106 @@
# AliasVault VPS Deployment
Dieses Repository enthält die optimierte Docker Compose-Konfiguration für die Bereitstellung von AliasVault auf einem VPS.
## 🚀 Schnellstart
```bash
# 1. Repository klonen
git clone https://git.schoettler-mk.de/schoettik/aliasvault-vps.git /opt/aliasvault
cd /opt/aliasvault
# 2. .env-Datei erstellen (basierend auf Beispiel)
cp .env.example .env
# 3. Secrets-Verzeichnis erstellen
mkdir -p secrets
echo "dein_starkes_postgres_passwort" > secrets/postgres_password
chmod 600 secrets/postgres_password
# 4. Zertifikate-Verzeichnis erstellen (falls benötigt)
mkdir -p certificates/{ssl,letsencrypt/www,smtp}
# 5. Container starten
docker-compose -f docker-compose.vps.yml up -d
```
## 📁 Dateistruktur
- `docker-compose.vps.yml` Optimierte Docker Compose-Datei für VPS
- `.env.example` Konfigurationsvorlage (deutsch)
- `README.md` Diese Datei
## ⚙️ Konfiguration
### Wichtige `.env` Einstellungen
**Für öffentlichen Zugang:**
```env
HOSTNAME=aliasvault.deinedomain.com
LETSENCRYPT_ENABLED=true
FORCE_HTTPS_REDIRECT=true
```
**Für lokalen/privaten Zugang:**
```env
ADMIN_IP_ALLOWLIST=private
LETSENCRYPT_ENABLED=false
```
**Email-Funktionen (optional):**
```env
PRIVATE_EMAIL_DOMAINS=deinedomain.com
SMTP_TLS_ENABLED=true
SMTP_ADVERTISED_HOSTNAME=mail.deinedomain.com
```
## 🔧 Verwaltung
**Container starten:**
```bash
docker-compose -f docker-compose.vps.yml up -d
```
**Container stoppen:**
```bash
docker-compose -f docker-compose.vps.yml down
```
**Logs anzeigen:**
```bash
docker-compose -f docker-compose.vps.yml logs -f
```
**Updates durchführen:**
```bash
docker-compose -f docker-compose.vps.yml pull
docker-compose -f docker-compose.vps.yml up -d --force-recreate
```
## 🔒 Sicherheit
1. **Passwort ändern:** PostgreSQL-Passwort in `secrets/postgres_password` ändern
2. **Ports prüfen:** Standard-Ports 80/443 müssen öffentlich erreichbar sein (oder anpassen)
3. **Firewall:** UFW oder firewalld konfigurieren
4. **Backups:** Regelmäßige Backups der Docker Volumes einrichten
5. **Updates:** Regelmäßige Updates der Container durchführen
## 📦 Docker Volumes
Die Daten werden in folgenden Volumes gespeichert:
- `postgres_data` PostgreSQL-Datenbank
- `database_data` AliasVault-Datenbank
- `logs_data` Logdateien
## 🚨 Wichtige Hinweise
- **Port 25** wird für SMTP benötigt muss auf dem VPS verfügbar sein
- **Let's Encrypt** benötigt öffentliche DNS-Einträge und erreichbare Ports 80/443
- **SMTP TLS** erfordert manuelle Zertifikatsbereitstellung in `certificates/smtp/`
- **Backup-Strategie** für die Volumes implementieren
## ❓ Hilfe
- [Offizielle AliasVault Dokumentation](https://docs.aliasvault.net)
- [AliasVault GitHub Repository](https://github.com/aliasvault/aliasvault)
- [Docker Compose Dokumentation](https://docs.docker.com/compose/)
+142
View File
@@ -0,0 +1,142 @@
version: '3.8'
services:
postgres:
image: ghcr.io/aliasvault/postgres:latest
container_name: aliasvault-postgres
volumes:
- postgres_data:/var/lib/postgresql/data:rw
- ./secrets:/secrets:ro
env_file:
- .env
restart: unless-stopped
environment:
POSTGRES_DB: aliasvault
POSTGRES_USER: aliasvault
POSTGRES_PASSWORD_FILE: /secrets/postgres_password
healthcheck:
test: ["CMD-SHELL", "pg_isready -U aliasvault"]
interval: 5s
timeout: 5s
retries: 5
start_period: 10s
networks:
- aliasvault-network
client:
image: ghcr.io/aliasvault/client:latest
container_name: aliasvault-client
volumes:
- ./logs/msbuild:/apps/server/msbuild-logs:rw
expose:
- "3000"
restart: unless-stopped
env_file:
- .env
networks:
- aliasvault-network
api:
image: ghcr.io/aliasvault/api:latest
container_name: aliasvault-api
expose:
- "3001"
volumes:
- database_data:/database:rw
- logs_data:/logs:rw
- ./secrets:/secrets:ro
restart: unless-stopped
env_file:
- .env
depends_on:
postgres:
condition: service_healthy
networks:
- aliasvault-network
admin:
image: ghcr.io/aliasvault/admin:latest
container_name: aliasvault-admin
expose:
- "3002"
volumes:
- database_data:/database:rw
- logs_data:/logs:rw
- ./secrets:/secrets:ro
restart: unless-stopped
env_file:
- .env
depends_on:
postgres:
condition: service_healthy
networks:
- aliasvault-network
smtp:
image: ghcr.io/aliasvault/smtp:latest
container_name: aliasvault-smtp
ports:
- "${SMTP_PORT:-25}:25"
- "${SMTP_TLS_PORT:-587}:587"
volumes:
- database_data:/database:rw
- logs_data:/logs:rw
- ./secrets:/secrets:ro
- ./certificates/smtp:/certificates/smtp:ro
restart: unless-stopped
env_file:
- .env
depends_on:
postgres:
condition: service_healthy
networks:
- aliasvault-network
task-runner:
image: ghcr.io/aliasvault/task-runner:latest
container_name: aliasvault-task-runner
volumes:
- database_data:/database:rw
- logs_data:/logs:rw
- ./secrets:/secrets:ro
restart: unless-stopped
env_file:
- .env
depends_on:
postgres:
condition: service_healthy
networks:
- aliasvault-network
reverse-proxy:
image: ghcr.io/aliasvault/reverse-proxy:latest
container_name: aliasvault-reverse-proxy
ports:
- "${HTTP_PORT:-80}:80"
- "${HTTPS_PORT:-443}:443"
volumes:
- ./certificates/ssl:/etc/nginx/ssl:rw
- ./certificates/letsencrypt:/etc/nginx/ssl-letsencrypt:rw
- ./certificates/letsencrypt/www:/var/www/certbot:rw
depends_on:
- admin
- client
- api
- smtp
restart: unless-stopped
env_file:
- .env
networks:
- aliasvault-network
volumes:
postgres_data:
driver: local
database_data:
driver: local
logs_data:
driver: local
networks:
aliasvault-network:
driver: bridge
+146
View File
@@ -0,0 +1,146 @@
#!/bin/bash
# AliasVault VPS Setup Script
# https://git.schoettler-mk.de/schoettik/aliasvault-vps
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} AliasVault VPS Setup Script${NC}"
echo -e "${GREEN}========================================${NC}"
# Prüfe, ob Docker installiert ist
if ! command -v docker &> /dev/null; then
echo -e "${RED}Docker ist nicht installiert.${NC}"
echo "Installiere Docker mit:"
echo " curl -fsSL https://get.docker.com | sh"
exit 1
fi
# Prüfe, ob Docker Compose installiert ist
if ! command -v docker-compose &> /dev/null; then
echo -e "${RED}Docker Compose ist nicht installiert.${NC}"
echo "Installiere Docker Compose mit:"
echo " sudo apt-get install docker-compose"
echo " oder"
echo " sudo pip install docker-compose"
exit 1
fi
# Installation Directory
INSTALL_DIR="${1:-/opt/aliasvault}"
echo -e "${YELLOW}Installationsverzeichnis: ${INSTALL_DIR}${NC}"
# Repository URL (kann angepasst werden)
REPO_URL="https://git.schoettler-mk.de/schoettik/aliasvault-vps.git"
# Frage nach Bestätigung
read -p "AliasVault in ${INSTALL_DIR} installieren? (j/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Jj]$ ]]; then
echo -e "${YELLOW}Abgebrochen.${NC}"
exit 0
fi
# Verzeichnis erstellen
echo -e "${YELLOW}Erstelle Installationsverzeichnis...${NC}"
sudo mkdir -p "${INSTALL_DIR}"
sudo chown -R $(id -u):$(id -g) "${INSTALL_DIR}"
cd "${INSTALL_DIR}"
# Repository klonen oder Dateien kopieren
echo -e "${YELLOW}Lade Konfigurationsdateien herunter...${NC}"
if [[ -f "docker-compose.vps.yml" ]]; then
echo -e "${YELLOW}Dateien existieren bereits. Überspringe Download.${NC}"
else
# Versuche Git Clone, falls nicht klappt, kopiere lokale Dateien
if command -v git &> /dev/null; then
git clone "${REPO_URL}" .
else
echo -e "${RED}Git nicht verfügbar. Lade Dateien manuell herunter.${NC}"
echo "Bitte Repository manuell klonen oder Dateien kopieren."
exit 1
fi
fi
# .env-Datei erstellen
if [[ ! -f ".env" ]]; then
echo -e "${YELLOW}Erstelle .env-Datei aus Vorlage...${NC}"
if [[ -f ".env.example" ]]; then
cp .env.example .env
echo -e "${GREEN}.env-Datei erstellt. Bitte bearbeite: ${INSTALL_DIR}/.env${NC}"
else
echo -e "${RED}.env.example nicht gefunden.${NC}"
exit 1
fi
else
echo -e "${YELLOW}.env-Datei existiert bereits.${NC}"
fi
# Secrets-Verzeichnis erstellen
echo -e "${YELLOW}Erstelle Secrets-Verzeichnis...${NC}"
mkdir -p secrets
# PostgreSQL Passwort setzen
if [[ ! -f "secrets/postgres_password" ]]; then
echo -e "${YELLOW}Erstelle PostgreSQL Passwort...${NC}"
echo "Bitte gib ein starkes PostgreSQL-Passwort ein (Enter für automatische Generierung):"
read -s POSTGRES_PASSWORD
if [[ -z "$POSTGRES_PASSWORD" ]]; then
POSTGRES_PASSWORD=$(openssl rand -base64 32 2>/dev/null || date +%s | sha256sum | base64 | head -c 32)
echo -e "${YELLOW}Automatisch generiertes Passwort:${NC}"
echo " $POSTGRES_PASSWORD"
fi
echo "$POSTGRES_PASSWORD" > secrets/postgres_password
chmod 600 secrets/postgres_password
echo -e "${GREEN}PostgreSQL Passwort gespeichert: ${INSTALL_DIR}/secrets/postgres_password${NC}"
else
echo -e "${YELLOW}PostgreSQL Passwort existiert bereits.${NC}"
fi
# Zertifikate-Verzeichnis erstellen
echo -e "${YELLOW}Erstelle Zertifikate-Verzeichnisse...${NC}"
mkdir -p certificates/{ssl,letsencrypt/www,smtp}
# Container starten
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Starten der AliasVault Container...${NC}"
echo -e "${GREEN}========================================${NC}"
if sudo docker-compose -f docker-compose.vps.yml up -d; then
echo -e "${GREEN}✅ AliasVault Container erfolgreich gestartet!${NC}"
# Zeige Status
echo ""
echo -e "${YELLOW}Container-Status:${NC}"
sudo docker-compose -f docker-compose.vps.yml ps
echo ""
echo -e "${GREEN}📋 Nächste Schritte:${NC}"
echo "1. Bearbeite die .env-Datei: ${INSTALL_DIR}/.env"
echo "2. Konfiguriere DNS-Einträge für deine Domain (falls Let's Encrypt)"
echo "3. Öffne ${INSTALL_DIR}/README.md für weitere Informationen"
echo ""
echo -e "${GREEN}🔗 Erreichbare Services:${NC}"
echo "- Web Interface: http://localhost (oder deine Domain)"
echo "- Admin Interface: http://localhost/admin"
echo "- SMTP Server: localhost:25 (oder ${SMTP_PORT:-587} für TLS)"
echo ""
echo -e "${GREEN}⚡ Verwaltung:${NC}"
echo " Status: sudo docker-compose -f docker-compose.vps.yml ps"
echo " Logs: sudo docker-compose -f docker-compose.vps.yml logs -f"
echo " Stoppen: sudo docker-compose -f docker-compose.vps.yml down"
echo " Updates: sudo docker-compose -f docker-compose.vps.yml pull && sudo docker-compose -f docker-compose.vps.yml up -d"
else
echo -e "${RED}❌ Fehler beim Starten der Container.${NC}"
echo "Überprüfe die Logs: sudo docker-compose -f docker-compose.vps.yml logs"
exit 1
fi
echo ""
echo -e "${GREEN}✅ Installation abgeschlossen!${NC}"