
Подробная инструкция — от установки до production-конфигурации за 20 минут
Версия: v0.46.0 GitHub: 10 500+ Язык: Rust Лицензия: MIT / Apache-2.0 Обновлено: Август 2026
Содержание
- Что такое Dufs
- Системные требования
- Подготовка сервера
- Установка Dufs
- Первый запуск
- Конфигурационный файл
- Контроль доступа
- Nginx reverse proxy
- SSL-сертификат
- Systemd-сервис
- Docker-развёртывание
- WebDAV
- Сценарии использования
- API и автоматизация
- Логирование и мониторинг
- Обновление
- Резервное копирование
- Безопасность
- Решение проблем
- Итоговая архитектура
1. Что такое Dufs
Dufs (Distinctive Utility File Server) — это легковесный файловый сервер с открытым исходным кодом, написанный на языке Rust. Проект разработан sigoden и распространяется под двойной лицензией MIT / Apache-2.0.
Репозиторий: https://github.com/sigoden/dufs
Возможности
- Раздача статических файлов (read-only режим)
- Загрузка файлов и папок через браузер (Drag & Drop)
- Создание, редактирование, поиск файлов прямо из веб-интерфейса
- Скачивание папок одним ZIP-архивом
- Возобновляемые загрузки и скачивания (resumable)
- Полноценная поддержка WebDAV
- Гибкий контроль доступа (по пользователям, директориям, операциям)
- Встроенная поддержка HTTPS/TLS
- Работа через unix-сокет
- Health check endpoint для мониторинга
- CORS для интеграции с фронтенд-приложениями
- Рендеринг SPA (React, Vue, Svelte)
Сравнение с альтернативами
| Параметр | Dufs | Nginx autoindex | FileBrowser | Nextcloud |
|---|---|---|---|---|
| Размер бинарника | ~8 МБ | часть nginx | ~30 МБ | 200+ МБ |
| Потребление RAM | 5–15 МБ | 2–5 МБ | 30–50 МБ | 512 МБ+ |
| Зависимости | нет | нет | нет | PHP, MySQL, Redis |
| WebDAV | ✅ | модуль | ✅ | ✅ |
| Upload из браузера | ✅ | ❌ | ✅ | ✅ |
| Время настройки | 1 команда | конфиг | конфиг | часы |
2. Системные требования
Минимальные
- ОС: Linux (x86_64, aarch64, armv7), macOS, Windows
- RAM: 32 МБ свободно
- Диск: 10 МБ под бинарник + место под файлы
- CPU: любой, даже 1 vCPU
Рекомендуемые для production
- ОС: Ubuntu 22.04 / 24.04 LTS, Debian 12, AlmaLinux 9
- RAM: 512 МБ (с запасом под ОС и nginx)
- Диск: SSD, от 20 ГБ
- CPU: 1–2 vCPU
- Сеть: белый IPv4-адрес
Что понадобится: VPS с root-доступом (или sudo), доменное имя направленное на IP сервера (для HTTPS), SSH-клиент, ~15 минут времени.
3. Подготовка сервера
Подключаемся по SSH и выполняем базовую настройку:
ssh root@ваш_ip_адрес
# Обновляем систему
apt update && apt upgrade -y
# Устанавливаем базовые утилиты
apt install -y curl wget git ufw certbot python3-certbot-nginx
# Настраиваем файрвол
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable
ufw status
Создаём системного пользователя для Dufs (безопаснее, чем запускать от root):
useradd -r -s /usr/sbin/nologin -d /srv/dufs dufs
mkdir -p /srv/dufs/files
chown -R dufs:dufs /srv/dufs
chmod 750 /srv/dufs
4. Установка Dufs
Способ 1: готовый бинарник (рекомендуется)
# Определяем архитектуру
ARCH=$(uname -m)
case $ARCH in
x86_64) ARCH_TAG="x86_64-unknown-linux-musl" ;;
aarch64) ARCH_TAG="aarch64-unknown-linux-musl" ;;
armv7l) ARCH_TAG="armv7-unknown-linux-musleabihf" ;;
esac
# Скачиваем последнюю версию
VERSION="v0.46.0"
wget "https://github.com/sigoden/dufs/releases/download/${VERSION}/dufs-${VERSION}-${ARCH_TAG}.tar.gz"
# Распаковываем и устанавливаем
tar xzf "dufs-${VERSION}-${ARCH_TAG}.tar.gz"
mv dufs /usr/local/bin/dufs
chmod +x /usr/local/bin/dufs
# Проверяем
dufs --version
# Вывод: dufs 0.46.0
# Убираем за собой
rm -f "dufs-${VERSION}-${ARCH_TAG}.tar.gz"
Способ 2: через Cargo
# Устанавливаем Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# Компилируем
cargo install dufs
# Копируем бинарник
cp ~/.cargo/bin/dufs /usr/local/bin/
Способ 3: Docker
# Устанавливаем Docker
curl -fsSL https://get.docker.com | sh
# Запускаем контейнер
docker run -d \
--name dufs \
--restart unless-stopped \
-v /srv/dufs/files:/data \
-p 127.0.0.1:5000:5000 \
sigoden/dufs /data -A
Способ 4: из исходников
git clone https://github.com/sigoden/dufs.git
cd dufs
cargo build --release
cp target/release/dufs /usr/local/bin/
5. Первый запуск и знакомство
Минимальный запуск (read-only)
dufs /srv/dufs/files
Вывод в терминале:
2026-08-02T10:00:00Z INFO dufs: Listening on http://0.0.0.0:5000
Открываем в браузере: http://ваш_ip:5000 — видим список файлов.
Полнофункциональный запуск
dufs /srv/dufs/files \
--allow-upload \
--allow-delete \
--allow-search \
--allow-archive \
-p 5000
Флаг -A (allow all)
dufs /srv/dufs/files -A
⚠️ Внимание: Флаг -A включает ВСЕ операции: upload, delete, search, archive, edit. Удобно для тестирования, опасно для production без аутентификации.

6. Конфигурация через файл
Для production удобнее использовать конфигурационный файл вместо длинной командной строки.
mkdir -p /etc/dufs
nano /etc/dufs/config.yaml
Содержимое файла /etc/dufs/config.yaml:
# Конфигурация Dufs
# Директория для раздачи
serve-path: /srv/dufs/files
# Сетевые настройки
bind: 127.0.0.1
port: 5000
# Префикс пути (если сервер за прокси на подпути)
# path-prefix: /files
# Скрытые файлы и директории
hidden: .git,.env,*.log,*.lock,.htaccess
# Аутентификация
auth:
- admin:Str0ngP@ss2026!@/:rw
- viewer:Read0nly!@/:r
- uploader:Upload123!@/uploads:rw
# Разрешённые операции (глобально)
allow-upload: true
allow-delete: true
allow-search: true
allow-archive: true
allow-symlink: false
# CORS (если нужно для фронтенда)
enable-cors: false
# Сжатие ZIP
compress: low
# Логирование
log-file: /var/log/dufs/access.log
# TLS (если не используем nginx как прокси)
# tls-cert: /etc/letsencrypt/live/files.example.ru/fullchain.pem
# tls-key: /etc/letsencrypt/live/files.example.ru/privkey.pem
Запуск с конфигом:
dufs -c /etc/dufs/config.yaml
7. Контроль доступа (аутентификация)
Синтаксис правил
-a пользователь:пароль@путь:права
Где права:
r— только чтение (скачивание, просмотр)w— запись (загрузка, создание)rw— чтение и запись (включая удаление)
Примеры
# Один администратор с полными правами на всё
dufs /srv/dufs/files -a admin:MyP@ss@/:rw
# Несколько пользователей с разными правами
dufs /srv/dufs/files \
-a admin:S3cret@/:rw \
-a editor:Ed1t@/docs:rw \
-a guest:Gu3st@/public:r
# Разные директории — разные пользователи
dufs /srv/dufs/files \
-a alice:pass1@/projects/alice:rw \
-a bob:pass2@/projects/bob:rw \
-a manager:pass3@/projects:r
Проверка через curl
# Без авторизации — 401
curl -I http://127.0.0.1:5000/
# HTTP/1.1 401 Unauthorized
# С авторизацией — 200
curl -u admin:MyP@ss http://127.0.0.1:5000/
# HTTP/1.1 200 OK
# Digest auth (безопаснее)
curl --digest -u admin:MyP@ss http://127.0.0.1:5000/
8. Настройка Nginx как reverse proxy
⚠️ Важно: В production никогда не выставляем Dufs напрямую в интернет. Nginx берёт на себя TLS, rate limiting, логирование и защиту.
Установка Nginx
apt install -y nginx
systemctl enable nginx
Конфигурация виртуального хоста
nano /etc/nginx/sites-available/dufs
# /etc/nginx/sites-available/dufs
# Reverse proxy для Dufs
# Rate limiting zone
limit_req_zone $binary_remote_addr zone=dufs_limit:10m rate=10r/s;
# Ограничение размера загрузки (2 ГБ)
client_max_body_size 2G;
server {
listen 80;
listen [::]:80;
server_name files.example.ru;
# Редирект на HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name files.example.ru;
# SSL
ssl_certificate /etc/letsencrypt/live/files.example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/files.example.ru/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Заголовки безопасности
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Логи
access_log /var/log/nginx/dufs_access.log;
error_log /var/log/nginx/dufs_error.log;
# Таймауты для больших файлов
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
# Буферизация
proxy_buffering off;
proxy_request_buffering off;
location / {
limit_req zone=dufs_limit burst=20 nodelay;
proxy_pass http://127.0.0.1:5000;
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;
# Для WebDAV
proxy_set_header Destination $http_destination;
# Поддержка больших файлов
client_max_body_size 0;
}
# Защита служебных endpoint
location /__dufs__/ {
allow 127.0.0.1;
deny all;
proxy_pass http://127.0.0.1:5000;
}
}
Активация
ln -s /etc/nginx/sites-available/dufs /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t
systemctl reload nginx
9. SSL-сертификат Let’s Encrypt
# Убедитесь, что DNS записи A указывают на ваш IP
# files.example.ru → 185.xxx.xxx.xxx
# Получаем сертификат
certbot --nginx -d files.example.ru
# Автопродление (проверяем)
certbot renew --dry-run
# Статус таймера автопродления
systemctl status certbot.timer
После certbot перезапускаем nginx:
systemctl reload nginx
10. Systemd-сервис (автозапуск)
Создаём unit-файл:
nano /etc/systemd/system/dufs.service
[Unit]
Description=Dufs File Server
Documentation=https://github.com/sigoden/dufs
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=dufs
Group=dufs
# Запуск
ExecStart=/usr/local/bin/dufs -c /etc/dufs/config.yaml
# Перезапуск при падении
Restart=always
RestartSec=5
# Безопасность (sandboxing)
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
# Доступ только к рабочей директории
ReadWritePaths=/srv/dufs/files
ReadOnlyPaths=/etc/dufs
# Ограничение ресурсов
LimitNOFILE=65536
MemoryMax=256M
CPUQuota=80%
# Логирование через journald
StandardOutput=journal
StandardError=journal
SyslogIdentifier=dufs
[Install]
WantedBy=multi-user.target
Активация и управление
# Перечитываем systemd
systemctl daemon-reload
# Включаем автозапуск
systemctl enable dufs
# Запускаем
systemctl start dufs
# Проверяем статус
systemctl status dufs
Ожидаемый вывод:
● dufs.service - Dufs File Server
Loaded: loaded (/etc/systemd/system/dufs.service; enabled)
Active: active (running) since Sun 2026-08-02 10:15:00 UTC; 5s ago
Main PID: 12345 (dufs)
Tasks: 4 (limit: 4915)
Memory: 8.2M
CPU: 12ms
CGroup: /system.slice/dufs.service
└─12345 /usr/local/bin/dufs -c /etc/dufs/config.yaml
Полезные команды
systemctl stop dufs # остановить
systemctl restart dufs # перезапустить
journalctl -u dufs -f # логи в реальном времени
journalctl -u dufs --since "1 hour ago" # логи за час
11. Развёртывание через Docker (альтернатива)
docker-compose.yml
mkdir -p /opt/dufs && cd /opt/dufs
nano docker-compose.yml
version: "3.8"
services:
dufs:
image: sigoden/dufs:latest
container_name: dufs
restart: unless-stopped
ports:
- "127.0.0.1:5000:5000"
volumes:
- /srv/dufs/files:/data
command: >
/data
--allow-upload
--allow-delete
--allow-search
--allow-archive
-a admin:Str0ngP@ss2026!@/:rw
-a viewer:Read0nly!@/:r
environment:
- TZ=Europe/Moscow
mem_limit: 256m
cpus: 1.0
read_only: true
tmpfs:
- /tmp
security_opt:
- no-new-privileges:true
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:5000/__dufs__/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
nginx:
image: nginx:alpine
container_name: dufs-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- /etc/letsencrypt:/etc/letsencrypt:ro
depends_on:
- dufs
Запуск
docker compose up -d
docker compose logs -f dufs
docker compose ps
12. WebDAV: подключение как сетевого диска
Dufs из коробки поддерживает WebDAV. Это позволяет монтировать хранилище как диск в ОС.
Windows (Проводник)
- Откройте «Этот компьютер» → «Подключить сетевой диск»
- Папка:
https://files.example.ru/ - Введите логин/пароль при запросе
macOS (Finder)
- Finder → Cmd+K
- Адрес:
https://files.example.ru/ - Подключиться как «Зарегистрированный пользователь»
Linux (davfs2)
apt install -y davfs2
mkdir -p /mnt/dufs
mount -t davfs https://files.example.ru/ /mnt/dufs
# Для автозагрузки — в /etc/fstab:
# https://files.example.ru/ /mnt/dufs davfs rw,user,noauto 0 0
Через curl
# Список файлов (PROPFIND)
curl -X PROPFIND -u admin:pass https://files.example.ru/ -H "Depth: 1"
# Загрузка файла
curl -T ./report.pdf -u admin:pass https://files.example.ru/docs/report.pdf
# Создание папки
curl -X MKCOL -u admin:pass https://files.example.ru/new-folder/
# Удаление
curl -X DELETE -u admin:pass https://files.example.ru/old-file.txt
# Перемещение
curl -X MOVE -u admin:pass https://files.example.ru/file.txt \
-H "Destination: https://files.example.ru/archive/file.txt"
13. Практические сценарии использования
Сценарий 1: публичная раздача файлов (read-only)
dufs /srv/dufs/public -b 127.0.0.1 -p 5001 --allow-search --allow-archive
Без аутентификации — любой может смотреть и скачивать. Загрузка запрещена.
Сценарий 2: личный файлообменник
dufs /srv/dufs/private \
-b 127.0.0.1 -p 5000 \
-a admin:MyS3cret!@/:rw \
--allow-upload \
--allow-delete \
--allow-search \
--allow-archive \
--hidden .git,.env,*.tmp
Сценарий 3: приём файлов от клиентов (drop-box)
# Клиенты могут только загружать, но не видеть чужие файлы
dufs /srv/dufs/inbox \
-b 127.0.0.1 -p 5002 \
-a client1:pass1@/:w \
-a client2:pass2@/:w \
--allow-upload
Сценарий 4: хостинг статического сайта
dufs /var/www/mysite \
-b 127.0.0.1 -p 5003 \
--render-index \
--hidden .git
Сценарий 5: SPA-приложение (React/Vue)
dufs /var/www/spa-app \
-b 127.0.0.1 -p 5004 \
--render-spa
Все маршруты, не найденные как файлы, вернут index.html.
Сценарий 6: раздача одного большого файла
dufs /srv/iso/ubuntu-24.04.iso -b 127.0.0.1 -p 5005 --allow-hash
Клиент может проверить целостность:
curl "https://files.example.ru/ubuntu-24.04.iso?hash"
# Вывод: sha256: a1b2c3d4...
14. Работа с API (скрипты и автоматизация)
Загрузка файла из скрипта
#!/bin/bash
# upload.sh — загрузка бэкапа на Dufs
SERVER="https://files.example.ru"
USER="admin"
PASS="Str0ngP@ss2026!"
FILE="/var/backups/db-$(date +%Y%m%d).sql.gz"
curl -T "$FILE" \
-u "$USER:$PASS" \
"$SERVER/backups/$(basename $FILE)" \
--progress-bar
echo "Загружено: $FILE"
Скачивание папки как ZIP
curl -u admin:pass \
-o project-archive.zip \
"https://files.example.ru/projects/myproject?zip"
Поиск файлов
# Найти все .pdf
curl -u admin:pass "https://files.example.ru?q=*.pdf"
# JSON-вывод для парсинга
curl -u admin:pass "https://files.example.ru?q=*.pdf&json"
Возобновляемая загрузка (для больших файлов)
# Узнаём, сколько уже загружено
OFFSET=$(curl -sI -u admin:pass "$SERVER/bigfile.iso" | \
tr -d '\r' | sed -n 's/content-length: //p')
# Докачиваем
dd skip=$OFFSET if=bigfile.iso status=none ibs=1 | \
curl -X PATCH \
-u admin:pass \
-H "X-Update-Range: append" \
--data-binary @- \
"$SERVER/bigfile.iso"
Health check для мониторинга
#!/bin/bash
# check_dufs.sh — для cron или Zabbix
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
http://127.0.0.1:5000/__dufs__/health)
if [ "$RESPONSE" != "200" ]; then
echo "ALERT: Dufs не отвечает! HTTP $RESPONSE" | \
mail -s "Dufs DOWN" admin@example.ru
systemctl restart dufs
fi
15. Логирование и мониторинг
Настройка logrotate
nano /etc/logrotate.d/dufs
/var/log/dufs/access.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 dufs dufs
postrotate
systemctl kill -s HUP dufs.service 2>/dev/null || true
endscript
}
Просмотр логов
# Через journald
journalctl -u dufs -f
# Из файла (если указан --log-file)
tail -f /var/log/dufs/access.log
# Статистика: топ IP за сегодня
journalctl -u dufs --since today | \
grep -oP '\d+\.\d+\.\d+\.\d+' | \
sort | uniq -c | sort -rn | head -20
Мониторинг ресурсов
# Текущее потребление
systemctl status dufs | grep Memory
# Или
ps aux | grep dufs
# Открытые соединения
ss -tnp | grep 5000
16. Обновление Dufs
#!/bin/bash
# update_dufs.sh
NEW_VERSION="v0.47.0" # изменить на актуальную
ARCH_TAG="x86_64-unknown-linux-musl"
echo "Останавливаю dufs..."
systemctl stop dufs
echo "Скачиваю ${NEW_VERSION}..."
wget -q "https://github.com/sigoden/dufs/releases/download/${NEW_VERSION}/dufs-${NEW_VERSION}-${ARCH_TAG}.tar.gz" \
-O /tmp/dufs-new.tar.gz
echo "Распаковываю..."
tar xzf /tmp/dufs-new.tar.gz -C /tmp/
echo "Заменяю бинарник..."
cp /usr/local/bin/dufs /usr/local/bin/dufs.bak
mv /tmp/dufs /usr/local/bin/dufs
chmod +x /usr/local/bin/dufs
echo "Запускаю..."
systemctl start dufs
echo "Проверяю..."
sleep 2
systemctl is-active dufs && \
echo "✅ Обновление успешно: $(dufs --version)" || \
echo "❌ Ошибка!"
rm -f /tmp/dufs-new.tar.gz
17. Резервное копирование
#!/bin/bash
# backup_dufs.sh — ежедневный бэкап файлов и конфига
BACKUP_DIR="/var/backups/dufs"
DATE=$(date +%Y%m%d_%H%M)
mkdir -p "$BACKUP_DIR"
# Архив файлов
tar czf "$BACKUP_DIR/files_$DATE.tar.gz" -C /srv/dufs/files .
# Конфиг
cp /etc/dufs/config.yaml "$BACKUP_DIR/config_$DATE.yaml"
# Ротация: храним 7 дней
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
find "$BACKUP_DIR" -name "*.yaml" -mtime +7 -delete
echo "Бэкап создан: $BACKUP_DIR"
Добавляем в cron:
crontab -e
# Ежедневно в 03:00
0 3 * * * /opt/scripts/backup_dufs.sh >> /var/log/dufs/backup.log 2>&1
18. Безопасность: чек-лист
- Dufs слушает только
127.0.0.1(не0.0.0.0) - Nginx как reverse proxy с TLS
- SSL-сертификат Let’s Encrypt
- Аутентификация включена (
-a) - Пароли сложные, хранятся в конфиге (не в командной строке)
- Запуск от непривилегированного пользователя (
dufs) - Systemd sandboxing (
NoNewPrivileges,ProtectSystem) - Rate limiting в nginx
- Файрвол (ufw) — открыты только 22, 80, 443
- Скрыты служебные файлы (
--hidden .git,.env) allow-symlink: false(защита от выхода за корень)- Регулярные обновления
- Health check + мониторинг
- Бэкапы
Fail2ban для защиты от брутфорса
apt install -y fail2ban
Создаём фильтр /etc/fail2ban/filter.d/dufs.conf:
[Definition]
failregex = ^<HOST> .* ".*" 401
ignoreregex =
Создаём jail /etc/fail2ban/jail.d/dufs.conf:
[dufs]
enabled = true
port = http,https
filter = dufs
logpath = /var/log/nginx/dufs_access.log
maxretry = 5
bantime = 3600
findtime = 600
systemctl restart fail2ban
19. Решение проблем
| Проблема | Причина | Решение |
|---|---|---|
Address already in use | Порт занят | ss -tnlp | grep 5000, убить процесс или сменить порт |
Permission denied | Нет прав на директорию | chown -R dufs:dufs /srv/dufs/files |
| 502 Bad Gateway | Dufs не запущен | systemctl status dufs |
| 413 Entity Too Large | Лимит nginx | client_max_body_size 0; в конфиге nginx |
| Загрузка обрывается | Таймаут | Увеличить proxy_read_timeout в nginx |
| WebDAV не работает | Нет заголовка Destination | Проверить proxy_set_header Destination |
| Файлы не видны | Скрыты через --hidden | Проверить паттерны в конфиге |
| Высокий CPU при ZIP | Сжатие на лету | --compress none или low |
Диагностика
# Проверить, слушает ли dufs
ss -tnlp | grep dufs
# Проверить ответ локально
curl -v http://127.0.0.1:5000/__dufs__/health
# Проверить через nginx
curl -vk https://files.example.ru/__dufs__/health
# Логи nginx
tail -50 /var/log/nginx/dufs_error.log
# Логи dufs
journalctl -u dufs -n 50 --no-pager
# Проверить конфиг nginx
nginx -t
# SELinux (если RHEL/AlmaLinux)
ausearch -m avc -ts recent
20. Итоговая архитектура

Заключение
Dufs — идеальный выбор для VPS, когда нужен быстрый, безопасный и минималистичный файловый сервер без раздутого стека зависимостей. Один бинарник на 8 МБ заменяет связку Apache + PHP + MySQL + Nextcloud для 90% задач файлообмена.
Эта связка (Dufs + Nginx + Let’s Encrypt + systemd) обеспечивает:
- Мгновенный старт и минимальное потребление ресурсов
- Полноценную безопасность (TLS, auth, sandboxing, rate limit)
- Удобный веб-интерфейс + WebDAV + API
- Автоматический перезапуск и мониторинг
- Простоту обновления (один бинарник)
⏱ Время от нуля до production: 15–20 минут.
Dufs v0.46.0 · github.com/sigoden/dufs · Август 2026