451 lines
8.1 KiB
Markdown
Raw Normal View History

2025-10-03 02:09:53 +02:00
# WebDAV Server - Quick Start Guide
Get your WebDAV server up and running in 5 minutes!
## 🚀 Instant Setup
### Option 1: Automated Installation (Recommended)
```bash
# Download and run the setup script
chmod +x setup.sh
./setup.sh
```
The script will:
- ✅ Check system requirements
- ✅ Install dependencies
- ✅ Create virtual environment
- ✅ Set up configuration
- ✅ Initialize database
- ✅ Create default admin user
### Option 2: Manual Installation
```bash
# 1. Create project directory
mkdir webdav-server && cd webdav-server
# 2. Create virtual environment
python3 -m venv venv
source venv/bin/activate
# 3. Install dependencies
pip install aiohttp aiofiles aiohttp-session cryptography python-dotenv lxml gunicorn
# 4. Copy the main.py file from the artifacts
# 5. Create .env file
cat > .env << 'EOF'
HOST=0.0.0.0
PORT=8080
DB_PATH=./webdav.db
WEBDAV_ROOT=./webdav
AUTH_METHODS=basic,digest
JWT_SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
SESSION_TIMEOUT=3600
EOF
# 6. Create directory structure
mkdir -p webdav/users logs backups
# 7. Run the server
python main.py
```
### Option 3: Docker (Fastest)
```bash
# 1. Create docker-compose.yml and Dockerfile from artifacts
# 2. Start with Docker Compose
docker-compose up -d
# 3. Check logs
docker-compose logs -f webdav
```
## 🎯 First Steps
### 1. Access the Server
**Default Credentials:**
- Username: `admin`
- Password: `admin123`
- URL: `http://localhost:8080/`
⚠️ **IMPORTANT**: Change the default password immediately!
### 2. Connect with Windows Explorer
**Method 1: Map Network Drive**
1. Open File Explorer
2. Right-click "This PC" → "Map network drive"
3. Enter: `http://localhost:8080/`
4. Enter credentials: `admin` / `admin123`
**Method 2: Add Network Location**
1. Right-click "This PC" → "Add a network location"
2. Choose custom network location
3. Enter: `http://localhost:8080/`
4. Enter credentials when prompted
**Windows Troubleshooting:**
- If connection fails, restart WebClient service:
```powershell
net stop webclient
net start webclient
```
### 3. Connect with macOS Finder
1. Press `Cmd+K` (Go → Connect to Server)
2. Enter: `http://localhost:8080/`
3. Click "Connect"
4. Enter credentials: `admin` / `admin123`
### 4. Connect with Linux
```bash
# Install davfs2
sudo apt-get install davfs2
# Mount WebDAV share
sudo mount -t davfs http://localhost:8080/ /mnt/webdav
# Enter credentials when prompted
```
## 👥 User Management
### Create Users via CLI
```bash
# Activate virtual environment
source venv/bin/activate
# Create a new user (interactive)
python webdav_cli.py user create john
# Create with all details
python webdav_cli.py user create jane \
--email jane@example.com \
--role user
# List all users
python webdav_cli.py user list
# Change password
python webdav_cli.py user password john
# Deactivate user
python webdav_cli.py user deactivate john
# Delete user
python webdav_cli.py user delete john --force
```
### Create Users Programmatically
```python
import asyncio
from main import Database
async def create_user():
db = Database('./webdav.db')
user_id = await db.create_user(
username='john',
password='SecurePass123!',
email='john@example.com',
role='user'
)
print(f"Created user ID: {user_id}")
asyncio.run(create_user())
```
## 🔧 Common Operations
### Upload Files
**Using curl:**
```bash
curl -u admin:admin123 -T myfile.txt http://localhost:8080/myfile.txt
```
**Using Python:**
```python
import requests
with open('myfile.txt', 'rb') as f:
response = requests.put(
'http://localhost:8080/myfile.txt',
data=f,
auth=('admin', 'admin123')
)
print(response.status_code)
```
### Download Files
```bash
curl -u admin:admin123 http://localhost:8080/myfile.txt -o downloaded.txt
```
### Create Directories
```bash
curl -u admin:admin123 -X MKCOL http://localhost:8080/newfolder/
```
### List Directory Contents
```bash
curl -u admin:admin123 -X PROPFIND http://localhost:8080/ \
-H "Depth: 1" \
-H "Content-Type: application/xml" \
--data '<?xml version="1.0"?><D:propfind xmlns:D="DAV:"><D:allprop/></D:propfind>'
```
### Copy Files
```bash
curl -u admin:admin123 -X COPY \
http://localhost:8080/source.txt \
-H "Destination: http://localhost:8080/destination.txt"
```
### Move Files
```bash
curl -u admin:admin123 -X MOVE \
http://localhost:8080/old.txt \
-H "Destination: http://localhost:8080/new.txt"
```
### Delete Files
```bash
curl -u admin:admin123 -X DELETE http://localhost:8080/myfile.txt
```
## 🔒 Security Setup
### Change Default Password
```bash
python webdav_cli.py user password admin
# Enter new password when prompted
```
### Enable HTTPS (Production)
1. **Get SSL Certificate (Let's Encrypt):**
```bash
sudo certbot certonly --standalone -d webdav.example.com
```
2. **Update .env:**
```env
SSL_ENABLED=true
SSL_CERT_PATH=/etc/letsencrypt/live/webdav.example.com/fullchain.pem
SSL_KEY_PATH=/etc/letsencrypt/live/webdav.example.com/privkey.pem
```
3. **Restart server**
### Use Nginx Reverse Proxy (Recommended)
1. Install Nginx:
```bash
sudo apt-get install nginx
```
2. Copy nginx.conf from artifacts to `/etc/nginx/conf.d/webdav.conf`
3. Update domain name in config
4. Reload Nginx:
```bash
sudo nginx -t
sudo systemctl reload nginx
```
## 📊 Monitoring
### View Statistics
```bash
python webdav_cli.py stats
```
### Check Active Locks
```bash
python webdav_cli.py lock list
```
### View Logs
```bash
# Application logs
tail -f logs/webdav.log
# Access logs
tail -f logs/access.log
# If using systemd
sudo journalctl -u webdav -f
```
## 🐳 Docker Deployment
### Start Service
```bash
docker-compose up -d
```
### View Logs
```bash
docker-compose logs -f
```
### Stop Service
```bash
docker-compose down
```
### Update and Restart
```bash
docker-compose pull
docker-compose up -d --build
```
### Backup Data
```bash
# Backup database
docker exec webdav-server python webdav_cli.py backup
# Backup files
docker cp webdav-server:/app/webdav ./backup-webdav/
```
## ⚙️ Production Deployment
### Using Gunicorn (Recommended)
```bash
# Start with Gunicorn
gunicorn main:init_app \
--config gunicorn_config.py \
--bind 0.0.0.0:8080 \
--workers 4
# With systemd (after setup)
sudo systemctl enable webdav
sudo systemctl start webdav
sudo systemctl status webdav
```
### Environment Configuration
**Development:**
```env
DEBUG=true
LOG_LEVEL=DEBUG
WORKERS=1
```
**Production:**
```env
DEBUG=false
LOG_LEVEL=INFO
WORKERS=4
SSL_ENABLED=true
RATE_LIMIT_ENABLED=true
```
## 🔥 Common Issues
### Issue: Connection Refused
**Solution:**
```bash
# Check if server is running
ps aux | grep python
# Check port
sudo netstat -tlnp | grep 8080
# Check firewall
sudo ufw allow 8080/tcp
```
### Issue: Permission Denied
**Solution:**
```bash
# Fix directory permissions
chmod -R 755 webdav/
chown -R $USER:$USER webdav/
```
### Issue: Database Locked
**Solution:**
```bash
# Stop all instances
pkill -f "python main.py"
# Check for locks
lsof webdav.db
# Restart server
python main.py
```
### Issue: Windows Explorer Won't Connect
**Solutions:**
1. Restart WebClient service
2. Enable Basic Auth in registry:
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
BasicAuthLevel = 2
```
3. Use HTTPS instead of HTTP
4. Ensure URL ends with `/`
## 📚 Next Steps
1. **Read the full README.md** for comprehensive documentation
2. **Configure SSL/TLS** for production use
3. **Set up automated backups**
4. **Configure monitoring** and alerts
5. **Review security settings**
6. **Set up user quotas** and permissions
7. **Configure rate limiting**
8. **Enable caching** with Redis
## 🆘 Getting Help
- **Documentation**: Check README.md and inline comments
- **Logs**: Always check logs first (`logs/webdav.log`)
- **CLI Help**: `python webdav_cli.py --help`
- **Test Connection**: `curl -v http://localhost:8080/`
## 🎉 You're All Set!
Your WebDAV server is now ready to use. Start by:
1. Changing the default admin password
2. Creating user accounts
3. Connecting with your favorite WebDAV client
4. Uploading some files
Happy file sharing! 🚀