mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-06-04 12:32:58 +00:00
372 lines
8.8 KiB
Markdown
372 lines
8.8 KiB
Markdown
# Vaultwarden Bitwarden Alternative Template
|
|
|
|
## Overview
|
|
Vaultwarden is an alternative implementation of the Bitwarden server API written in Rust, compatible with Bitwarden clients.
|
|
|
|
## Quick Start
|
|
```bash
|
|
# Create docker-compose.yml with the content below
|
|
docker-compose up -d
|
|
```
|
|
|
|
## Docker Compose
|
|
```yaml
|
|
version: '3.8'
|
|
|
|
services:
|
|
vaultwarden:
|
|
image: vaultwarden/server:latest
|
|
container_name: vaultwarden
|
|
restart: unless-stopped
|
|
ports:
|
|
- "8080:8080"
|
|
environment:
|
|
- SIGNUPS_ALLOWED=true
|
|
- ADMIN_TOKEN=your-secure-admin-token
|
|
- DOMAIN=https://vault.yourdomain.com
|
|
- DATABASE_URL=postgresql://vaultwarden:vaultwarden@postgres:5432/vaultwarden
|
|
- SMTP_HOST=smtp.gmail.com
|
|
- SMTP_PORT=587
|
|
- SMTP_SECURITY=tls
|
|
- SMTP_FROM=your-email@gmail.com
|
|
- SMTP_USERNAME=your-email@gmail.com
|
|
- SMTP_PASSWORD=your-app-password
|
|
- WEBSOCKET_ENABLED=true
|
|
- WEBSOCKET_ADDRESS=0.0.0.0:3012
|
|
volumes:
|
|
- vaultwarden-data:/data
|
|
depends_on:
|
|
- postgres
|
|
networks:
|
|
- vaultwarden-network
|
|
|
|
postgres:
|
|
image: postgres:15-alpine
|
|
container_name: vaultwarden-postgres
|
|
restart: unless-stopped
|
|
environment:
|
|
- POSTGRES_DB=vaultwarden
|
|
- POSTGRES_USER=vaultwarden
|
|
- POSTGRES_PASSWORD=vaultwarden
|
|
volumes:
|
|
- vaultwarden-db:/var/lib/postgresql/data
|
|
networks:
|
|
- vaultwarden-network
|
|
|
|
volumes:
|
|
vaultwarden-data:
|
|
vaultwarden-db:
|
|
|
|
networks:
|
|
vaultwarden-network:
|
|
driver: bridge
|
|
```
|
|
|
|
## Environment Variables
|
|
- `SIGNUPS_ALLOWED`: Allow new user registrations
|
|
- `ADMIN_TOKEN`: Admin panel access token
|
|
- `DOMAIN`: Your domain for proper links
|
|
- `DATABASE_URL`: PostgreSQL connection string
|
|
- `SMTP_*`: Email configuration for invitations
|
|
- `WEBSOCKET_ENABLED`: Enable real-time sync
|
|
- `WEBSOCKET_ADDRESS`: WebSocket bind address
|
|
|
|
## Setup Guide
|
|
1. **Generate Admin Token**:
|
|
```bash
|
|
openssl rand -base64 48
|
|
```
|
|
|
|
2. **Configure SMTP** (Optional but recommended):
|
|
- Get app password from email provider
|
|
- Configure SMTP settings
|
|
|
|
3. **Deploy**:
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
4. **Access**: Open http://localhost:8080
|
|
|
|
5. **Admin Panel**: Open http://localhost:8080/admin
|
|
- Use your admin token to access
|
|
- Configure settings and manage users
|
|
|
|
6. **Create Account**:
|
|
- Register first user account
|
|
- Disable signups after creating admin account
|
|
|
|
## Client Setup
|
|
|
|
### Web Vault
|
|
- Access: http://localhost:8080
|
|
- Login with your created account
|
|
- Import passwords from other managers
|
|
|
|
### Browser Extensions
|
|
- **Chrome**: Install Bitwarden extension
|
|
- **Firefox**: Install Bitwarden extension
|
|
- **Edge**: Install Bitwarden extension
|
|
- **Safari**: Install Bitwarden extension
|
|
|
|
### Mobile Apps
|
|
- **iOS**: Download from App Store
|
|
- **Android**: Download from Google Play
|
|
- **F-Droid**: Available on F-Droid
|
|
|
|
### Desktop Apps
|
|
- **Windows**: Download from Bitwarden website
|
|
- **macOS**: Download from Bitwarden website
|
|
- **Linux**: Download from Bitwarden website
|
|
|
|
## Configuration
|
|
|
|
### Advanced Environment Variables
|
|
```yaml
|
|
environment:
|
|
# Basic settings
|
|
- SIGNUPS_ALLOWED=false
|
|
- ADMIN_TOKEN=your-secure-admin-token
|
|
- DOMAIN=https://vault.yourdomain.com
|
|
|
|
# Database
|
|
- DATABASE_URL=postgresql://vaultwarden:vaultwarden@postgres:5432/vaultwarden
|
|
|
|
# Email
|
|
- SMTP_HOST=smtp.gmail.com
|
|
- SMTP_PORT=587
|
|
- SMTP_SECURITY=tls
|
|
- SMTP_FROM=your-email@gmail.com
|
|
- SMTP_USERNAME=your-email@gmail.com
|
|
- SMTP_PASSWORD=your-app-password
|
|
|
|
# Security
|
|
- PASSWORD_ITERATIONS=100000
|
|
- PBKDF2_MEMORY=64
|
|
- PBKDF2_PARALLELISM=4
|
|
|
|
# Features
|
|
- WEBSOCKET_ENABLED=true
|
|
- WEBSOCKET_ADDRESS=0.0.0.0:3012
|
|
- SENDS_ALLOWED=true
|
|
- EMERGENCY_ACCESS_ALLOWED=true
|
|
|
|
# Limits
|
|
- ORG_EVENTS_DAYS=90
|
|
- ORG_ATTACHMENT_LIMIT=104857600
|
|
- USER_ATTACHMENT_LIMIT=10485760
|
|
```
|
|
|
|
### YubiKey Support
|
|
```yaml
|
|
environment:
|
|
- YUBICO_CLIENT_ID=your-yubico-client-id
|
|
- YUBICO_SECRET_KEY=your-yubico-secret-key
|
|
```
|
|
|
|
## Reverse Proxy (Traefik)
|
|
```yaml
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.vaultwarden.rule=Host(`vault.yourdomain.com`)"
|
|
- "traefik.http.routers.vaultwarden.tls=true"
|
|
- "traefik.http.routers.vaultwarden.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.vaultwarden.loadbalancer.server.port=8080"
|
|
|
|
# WebSocket support
|
|
- "traefik.http.routers.vaultwarden-websockets.rule=Host(`vault.yourdomain.com`) && PathPrefix(`/notifications/hub`)"
|
|
- "traefik.http.routers.vaultwarden-websockets.entrypoints=websecure"
|
|
- "traefik.http.services.vaultwarden-websockets.loadbalancer.server.port=3012"
|
|
```
|
|
|
|
## Backup Strategy
|
|
```bash
|
|
# Backup Vaultwarden data
|
|
docker run --rm -v vaultwarden-data:/data -v $(pwd):/backup alpine tar czf /backup/vaultwarden-backup.tar.gz -C /data .
|
|
|
|
# Backup PostgreSQL database
|
|
docker exec vaultwarden-postgres pg_dump -U vaultwarden vaultwarden > vaultwarden-db-backup.sql
|
|
|
|
# Restore database
|
|
docker exec -i vaultwarden-postgres psql -U vaultwarden vaultwarden < vaultwarden-db-backup.sql
|
|
|
|
# Restore Vaultwarden data
|
|
docker run --rm -v vaultwarden-data:/data -v $(pwd):/backup alpine tar xzf /backup/vaultwarden-backup.tar.gz -C /data
|
|
|
|
# Restart after restore
|
|
docker-compose restart vaultwarden
|
|
```
|
|
|
|
## Security Best Practices
|
|
|
|
### Production Setup
|
|
```yaml
|
|
environment:
|
|
- SIGNUPS_ALLOWED=false
|
|
- ADMIN_TOKEN=your-secure-admin-token
|
|
- DOMAIN=https://vault.yourdomain.com
|
|
- PASSWORD_ITERATIONS=100000
|
|
- PBKDF2_MEMORY=64
|
|
- PBKDF2_PARALLELISM=4
|
|
```
|
|
|
|
### SSL/TLS Configuration
|
|
```yaml
|
|
# Use HTTPS in production
|
|
environment:
|
|
- DOMAIN=https://vault.yourdomain.com
|
|
|
|
# Configure proper certificates
|
|
# Traefik will handle Let's Encrypt automatically
|
|
```
|
|
|
|
### Access Control
|
|
```yaml
|
|
# Restrict admin access
|
|
environment:
|
|
- ADMIN_TOKEN=your-secure-admin-token
|
|
|
|
# Network isolation
|
|
networks:
|
|
vaultwarden-internal:
|
|
driver: bridge
|
|
internal: true
|
|
vaultwarden-external:
|
|
driver: bridge
|
|
```
|
|
|
|
## User Management
|
|
|
|
### Admin Panel Features
|
|
- **User management**: View and manage all users
|
|
- **Organization management**: Manage organizations
|
|
- **System diagnostics**: Check system health
|
|
- **Configuration**: Adjust settings
|
|
- **Audit logs**: View user activity
|
|
|
|
### Organization Setup
|
|
1. Create organization in admin panel
|
|
2. Invite users via email
|
|
3. Set up collections and groups
|
|
4. Configure access policies
|
|
|
|
### Emergency Access
|
|
```yaml
|
|
environment:
|
|
- EMERGENCY_ACCESS_ALLOWED=true
|
|
```
|
|
|
|
## Performance Optimization
|
|
```yaml
|
|
# For better performance
|
|
environment:
|
|
- DATABASE_MAX_CONNS=10
|
|
- WEBSOCKET_ENABLED=true
|
|
- WEBSOCKET_HEARTBEAT_INTERVAL=30
|
|
|
|
# Resource limits
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 512M
|
|
cpus: '1.0'
|
|
reservations:
|
|
memory: 256M
|
|
cpus: '0.5'
|
|
```
|
|
|
|
## Monitoring
|
|
|
|
### Health Checks
|
|
```bash
|
|
# Check if service is running
|
|
curl http://localhost:8080/alive
|
|
|
|
# Check admin panel
|
|
curl http://localhost:8080/admin/diagnostics
|
|
```
|
|
|
|
### Logs
|
|
```bash
|
|
# View logs
|
|
docker-compose logs -f vaultwarden
|
|
|
|
# Check for errors
|
|
docker-compose logs vaultwarden | grep ERROR
|
|
```
|
|
|
|
## Troubleshooting
|
|
- **Login issues**: Check domain configuration
|
|
- **Email problems**: Verify SMTP settings
|
|
- **Performance issues**: Monitor resource usage
|
|
- **Database errors**: Check PostgreSQL connection
|
|
- **WebSocket issues**: Verify reverse proxy configuration
|
|
|
|
## Migration from Bitwarden
|
|
1. **Export from Bitwarden**: Use Bitwarden export feature
|
|
2. **Import to Vaultwarden**: Use web vault import
|
|
3. **Update clients**: Point clients to new server URL
|
|
4. **Disable old account**: Cancel Bitwarden subscription
|
|
|
|
## API Usage
|
|
```bash
|
|
# Get user info
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:8080/api/accounts/profile
|
|
|
|
# Get organizations
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:8080/api/organizations
|
|
|
|
# Admin API
|
|
curl -H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
|
|
http://localhost:8080/api/users
|
|
```
|
|
|
|
## Maintenance
|
|
```bash
|
|
# Restart service
|
|
docker-compose restart vaultwarden
|
|
|
|
# Update image
|
|
docker-compose pull && docker-compose up -d
|
|
|
|
# Clean up old data
|
|
docker exec vaultwarden vaultwarden db cleanup
|
|
|
|
# Check database size
|
|
docker exec vaultwarden-postgres psql -U vaultwarden -c "SELECT pg_size_pretty(pg_database_size('vaultwarden'));"
|
|
```
|
|
|
|
## Advanced Features
|
|
|
|
### SSO Integration
|
|
```yaml
|
|
environment:
|
|
- SSO_ENABLED=true
|
|
- SSO_SECRET_KEY=your-sso-secret
|
|
- SSO_REDIRECT_URI=https://vault.yourdomain.com/sso
|
|
```
|
|
|
|
### Duo 2FA
|
|
```yaml
|
|
environment:
|
|
- DUO_IKEY=your-duo-ikey
|
|
- DUO_SKEY=your-duo-skey
|
|
- DUO_HOST=your-duo-host
|
|
```
|
|
|
|
### Custom Icon Service
|
|
```yaml
|
|
environment:
|
|
- ICON_SERVICE=https://icons.bitwarden.net
|
|
- ICON_BLACKLISTED_NONPROXY_IPS=127.0.0.1,::1
|
|
```
|
|
|
|
## Compliance
|
|
- **GDPR**: Data protection and privacy
|
|
- **SOC2**: Security controls
|
|
- **HIPAA**: Healthcare data protection (with proper configuration)
|
|
- **AES-256**: Encryption for all data
|
|
- **PBKDF2**: Key derivation for passwords
|