AList - поднимаем свой файловый хаб без боли
Будем честны: рано или поздно любой HomeLab превращается в свалку из SMB-шар, старых FTP, S3-бакетов, Nextcloud, WebDAV и пары «временных» папок на VPS, которые живут уже третий год. А потом приходит момент, когда тебе надо быстро найти один PDF, и ты начинаешь играть в «угадай на каком сервере оно лежит».
Вот тут на сцену и выходит AList — легковесный file list manager, который умеет подключать кучу разных хранилищ и отдавать их через единый web-интерфейс.
И да, самое приятное — оно нормально работает даже без Docker. Просто бинарник, systemd и минимум магии.
В чем, собственно, дело
AList поддерживает:
- Local storage
- SMB
- S3
- WebDAV
- FTP/SFTP
- OneDrive
- Google Drive
- Yandex Disk через WebDAV
- и еще пачку экзотики
По сути, это единая морда для всех твоих файловых помоек.
Особенно удобно:
- в HomeLab;
- на NAS;
- на VPS;
- как легкий self-hosted replacement для «скинь мне в Telegram»;
- для публичной раздачи файлов;
- как web-доступ к архивам и бэкапам.
Правда жизни: 80% «временных файловых решений» живут дольше production-сервисов.
🛠 Установка AList из бинарника
Почему не Docker
Потому что иногда:
- не хочется тащить compose ради одного сервиса;
- хочется понимать, где лежат файлы и как работает процесс;
- VPS на 512 МБ RAM уже начинает плакать от очередного контейнера;
- systemd проще дебажить в 3 часа ночи, чем очередной overlay2.
Docker — норм. Но сегодня по-хардкору.
Скачиваем бинарник
Переходим на страницу релизов:
Смотрим архитектуру сервера:
uname -mДля x86_64 качаем примерно так:
wget https://github.com/AlistGo/alist/releases/latest/download/alist-linux-amd64.tar.gzРаспаковываем:
tar -xzf alist-linux-amd64.tar.gz
chmod +x alistСоздаем директорию:
mkdir -p /opt/alist
mv alist /opt/alist/Первый запуск
cd /opt/alist
./alist serverПосле старта AList покажет:
- URL панели;
- случайный пароль администратора.
Если пропустил — классика:
./alist adminНастраиваем systemd
Создаем пользователя:
useradd -r -s /usr/sbin/nologin alist
chown -R alist:alist /opt/alistUnit-файл:
nano /etc/systemd/system/alist.serviceСодержимое:
[Unit]
Description=AList Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=alist
Group=alist
WorkingDirectory=/opt/alist
ExecStart=/opt/alist/alist server
Restart=always
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
KillMode=control-group
[Install]
WantedBy=multi-user.targetЗапуск:
systemctl daemon-reload
systemctl enable --now alistПроверяем:
systemctl status alist🔐 Безопасность: вот тут начинается взрослая жизнь
Многие поднимают AList по принципу:
«ну это же домашний сервер, кто туда полезет»
А потом:
- открытый WebDAV;
- admin/admin;
- торчащий наружу порт;
- индексация поисковиками;
- и внезапный криптомайнер в
/tmp.
Не надо так.
Никогда не светим AList напрямую в интернет
Правильная схема:
Internet
↓
Nginx/Caddy
↓
AList localhost:5244Nginx reverse proxy
server {
listen 443 ssl;
http2 on;
server_name files.example.com;
ssl_certificate /etc/letsencrypt/live/files/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/files/privkey.pem;
client_max_body_size 20G;
location / {
proxy_pass http://127.0.0.1:5244;
proxy_http_version 1.1;
proxy_set_header Host $http_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;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
}
}Обязательно включаем HTTPS
Без TLS:
- логины улетают в plaintext;
- токены тоже;
- cookies тоже;
- твой Wi-Fi сосед уже открывает семейный архив фоток.
Ограничиваем доступ по IP
Если AList нужен только тебе:
allow YOUR_HOME_IP;
deny all;Или вообще:
- WireGuard;
- Tailscale;
- ZeroTier.
И тогда панель не торчит наружу вообще.
Отключаем регистрацию пользователей
В админке (Manage):
- Settings
- Site
- Allow register
Иначе однажды обнаружишь:
- неизвестных юзеров;
- странные upload'ы;
- папку
movies_18TB_final.
Используем отдельного пользователя для storage
Никогда:
- не монтируй root FS;
- не давай доступ ко всему
/; - не подключай SMB под root.
Лучше:
/mnt/storage/media
/mnt/storage/backup
/mnt/storage/shareИ ACL только туда.
Шифруем бэкапы
Если через AList доступны архивы:
- borg;
- restic;
- rclone crypt.
То шифрование должно быть ДО загрузки.
Fail2ban — дешево и сердито
Фильтр под nginx + бан brute-force.
Потому что:
«Да кому нужен мой сервер» — знаменитые последние слова перед логами на 40 ГБ.
📂 Подключение storage
После входа:
- Storages
- Add
И подключаешь:
- локальные папки;
- S3;
- SMB;
- WebDAV;
- Google Drive;
- что угодно.
Для локальной директории:
Mount Path: /media
Local Path: /mnt/storage/mediaВсё. Оно уже доступно через web.
Что мне особенно понравилось
AList — это тот редкий случай, когда self-hosted инструмент:
- очень легкий;
- реально быстрый;
- не требует тонны зависимостей;
- нормально работает на дешевых VPS;
- не пытается быть «корпоративной платформой цифровой трансформации».
Просто делает одну задачу:
показывает файлы из разных storage.
И делает это хорошо.
🔗 Ссылки
- Официальный сайт: alistgo.com
- GitHub проекта: github.com/AlistGo/alist
P.S. Да, можно сказать: «проще купить Google One» или «возьми готовый NAS». И технически это правда. Но когда у тебя свой HomeLab, свой VPS и свои storage — ты контролируешь данные, маршруты, бэкапы и доступ. А понимание того, как всё устроено под капотом, в IT до сих пор ценится куда больше, чем очередная подписка на чужое облако.