01
Що це
Раз на тиждень будь-якій команді треба швидко передати файл: макет замовнику, дамп колезі, відео на 200 мегабайт, яке не проходить у месенджері. Публічні файлообмінники або просять реєстрацію, або показують рекламу, або мовчки видаляють файл через добу. Ми зробили свій — рівно на цю задачу.
Ключова деталь — віддача файлів. Блоби не роздаються застосунком і не лежать за передбачуваним шляхом: nginx віддає їх через внутрішній редирект, тому вгадати адресу файла на диску неможливо, а сам застосунок не витрачає ресурси на перекачування байтів.
02
можливості
Що воно вміє
01
Завантаження без реєстрації
Перетягнув — отримав посилання. До 200 МБ, живе тиждень, потім прибирається автоматично.
02
Акаунт для постійного зберігання
З акаунтом файли лежать безстроково в межах квоти, з пошуком за іменем і своїм списком.
03
Непередбачувані посилання
Опційний випадковий суфікс в імені й коротке посилання в корені. Ім’я файла не видає інших файлів.
04
Віддача через внутрішній редирект
nginx віддає блоб за внутрішньою локацією — шлях на диску назовні не витікає.
05
Доступ по SFTP
Окремий обліковий запис із замкненим каталогом; завантажене по SFTP заводиться в базу однією командою.
06
Автоприбирання за розкладом
Systemd-таймер прибирає прострочене. Місце не закінчується тому, що «руки не дійшли».
03
архітектура
Як влаштовано
01
Завантаження файлу
02
Запис у базу й квоти
03
Видача посилання
04
Роздача через nginx
05
Автоприбирання за TTL
Під капотом
- FastAPI-застосунок під власним системним користувачем, який має право писати лише в каталог файлів.
- SQLite як реєстр файлів, квот і користувачів.
- Слухає лише локальний інтерфейс; назовні — тільки nginx.
- CLI для експлуатації: ініціалізація, створення адміна, зміна пароля, прибирання, імпорт SFTP-каталогу.
- Юридичний мінімум на місці: відповідальність завантажувача, фіксація IP, кнопка скарги на файл.
- Один процес, один файл бази, нуль зовнішніх залежностей — сервіс, який не ламається.
04
масштаб
Цифри
200 МБ
ліміт без реєстрації
7 днів
TTL анонімного файла
∞
зберігання з акаунтом
0
зовнішніх залежностей
