|
# 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! 🚀
|