Представь, что у тебя есть мощный TrueNAS сервер с терабайтами места, и ты хочешь развернуть на нём корпоративный файловый хостинг уровня Dropbox, но под своим полным контролем. Seafile — это идеальный кандидат: быстрый, безопасный и отлично интегрируемый. Давай разберем, как превратить твой TrueNAS в полноценную облачную платформу с помощью Seafile.
Почему именно связка Seafile и TrueNAS?
TrueNAS предоставляет железную надёжность ZFS, а Seafile — эффективный синхронизационный движок. Вместе они создают self-hosted решение, которое не уступает коммерческим аналогам по функционалу, но превосходит по контролю и стоимости владения.
Сравнение методов развертывания на TrueNAS
| Метод | TrueNAS CORE | TrueNAS SCALE | Сложность |
|---|---|---|---|
| Jail (FreeBSD) | ✅ Нативно | ❌ Недоступно | Средняя |
| Docker Compose | ❌ Через VM | ✅ Рекомендуется | Низкая |
| Виртуальная машина | ⚠️ Возможно | ⚠️ Возможно | Высокая |
Подготовка TrueNAS для Seafile
Перед установкой Seafile на TrueNAS нужно подготовить окружение. Начнём с самого популярного сценария — TrueNAS SCALE.
Шаг 1: Создание Dataset для данных Seafile
Здесь будут жить все твои файлы, базы данных и конфиги. ZFS даст нам снапшоты и компрессию.
# Рекомендуемая структура Datasets:
# tank/apps/seafile
# ├── data # Основное хранилище файлов
# ├── databases # MySQL/PostgreSQL data
# ├── config # Конфигурационные файлы
# └── backups # Резервные копии
# Настройки Dataset для data:
# Compression: lz4
# Recordsize: 1M (для больших файлов)
# ACL Type: POSIX
Шаг 2: Настройка сети и безопасности
Seafile требует несколько портов. Давай настроим их правильно.
- Порт 80/443: Веб-интерфейс и WebDAV
- Порт 8000: Внутренний сервис файлов (Seafile)
- Порт 8082: Внутренний сервис синхронизации (Seahub)
- Порт 3306: MySQL (если внешняя БД)
Установка Seafile на TrueNAS SCALE через Docker
Это самый чистый и поддерживаемый способ. Используем официальный образ с Docker Hub.
Шаг 3: Создание docker-compose.yml
Создай файл в подготовленном dataset. Вот production-ready конфигурация:
version: '3.9'
services:
db:
image: mariadb:10.11
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=strong_root_password_here
- MYSQL_LOG_CONSOLE=true
volumes:
- /mnt/tank/apps/seafile/databases:/var/lib/mysql:Z
networks:
- seafile-net
restart: unless-stopped
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-pstrong_root_password_here"]
interval: 10s
timeout: 5s
retries: 3
memcached:
image: memcached:1.6
container_name: seafile-memcached
entrypoint: memcached -m 256
networks:
- seafile-net
restart: unless-stopped
seafile:
image: seafileltd/seafile-mc:latest
container_name: seafile
ports:
- "8000:8000"
- "8082:8082"
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=strong_root_password_here
- TIME_ZONE=Europe/Moscow
- SEAFILE_ADMIN_EMAIL=admin@yourdomain.com
- SEAFILE_ADMIN_PASSWORD=admin_secure_password
- SEAFILE_SERVER_LETSENCRYPT=false
- SEAFILE_SERVER_HOSTNAME=seafile.yourdomain.com
volumes:
- /mnt/tank/apps/seafile/data:/shared:Z
networks:
- seafile-net
depends_on:
db:
condition: service_healthy
memcached:
condition: service_started
restart: unless-stopped
networks:
seafile-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
Шаг 4: Запуск через TrueNAS Apps
В TrueNAS SCALE переходи в "Apps", нажимай "Launch Docker Image" и используй этот конфиг:
- В поле "Image Repository" укажи:
seafileltd/seafile-mc:latest - В "Container Entrypoint" оставь пустым
- В "Network" выбери "Host" или создай отдельную сеть
- Примонтируй volumes как в compose файле выше
- Добавь все environment переменные
- Запусти и проверь логи
Настройка обратного прокси и SSL
Без HTTPS в 2024 году никуда. Используем встроенный в TrueNAS nginx или Traefik.
Вариант A: Встроенный NGINX в TrueNAS
server {
listen 443 ssl http2;
server_name seafile.yourdomain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
# Seafile fileserver
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://localhost:8082;
client_max_body_size 0;
proxy_connect_timeout 3600s;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
# Web interface
location / {
proxy_pass http://localhost:8000;
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-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 0;
}
# WebDAV support
location /seafdav {
proxy_pass http://localhost:8000/seafdav;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0;
}
}
Вариант B: Traefik в Docker (более современный)
# Добавь в основной compose файл
traefik:
image: traefik:v3.0
container_name: traefik
command:
- "--api.dashboard=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
ports:
- "80:80"
- "443:443"
- "8080:8080" # Dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/certs:/certs
networks:
- seafile-net
# И добавь labels к сервису seafile:
labels:
- "traefik.enable=true"
- "traefik.http.routers.seafile.rule=Host(`seafile.yourdomain.com`)"
- "traefik.http.routers.seafile.entrypoints=websecure"
- "traefik.http.routers.seafile.tls=true"
- "traefik.http.services.seafile.loadbalancer.server.port=8000"
Интеграция с SMB/NFS акциями TrueNAS
Одна из ключевых фишек — возможность работать с файлами одновременно через Seafile и напрямую через SMB.
Настройка внешнего хранилища
В веб-интерфейсе Seafile перейди в "Системный админ" → "Настройки" → "Дополнительные настройки":
{
"enable_virtual_server": true,
"fileserver_root": "/shared/seafile-data",
"external_storage": {
"enabled": true,
"samba_mounts": [
{
"name": "NAS_Share",
"path": "/mnt/smb/nas_share",
"server": "truenas.local",
"share": "documents",
"username": "seafile_user",
"password": "smb_password",
"domain": "WORKGROUP"
}
]
}
}
mount -t cifs в хостовой системе.
Резервное копирование и восстановление
ZFS снапшоты + скрипты бэкапа = спокойный сон.
Скрипт резервного копирования
#!/bin/bash
BACKUP_DIR="/mnt/tank/apps/seafile/backups/$(date +%Y%m%d_%H%M%S)"
CONTAINER_NAME="seafile"
mkdir -p $BACKUP_DIR
# 1. Останавливаем синхронизацию
docker exec $CONTAINER_NAME /opt/seafile/seafile-server-latest/seafile.sh stop
# 2. Бэкап базы данных
docker exec seafile-mysql mysqldump \
-u root -p"$MYSQL_ROOT_PASSWORD" \
--databases ccnet_db seafile_db seahub_db \
> $BACKUP_DIR/seafile-db.sql
# 3. Копируем данные
rsync -av /mnt/tank/apps/seafile/data/ $BACKUP_DIR/data/
# 4. Запускаем обратно
docker exec $CONTAINER_NAME /opt/seafile/seafile-server-latest/seafile.sh start
# 5. Создаем ZFS снапшот
zfs snapshot tank/apps/seafile@backup_$(date +%Y%m%d)
# 6. Чистим старые бэкапы (храним 30 дней)
find /mnt/tank/apps/seafile/backups -type d -mtime +30 -exec rm -rf {} \;
Автоматизация через Cron в TrueNAS
Добавь задание в "Tasks" → "Cron Jobs":
- Command:
/path/to/backup-seafile.sh - Run As User: root
- Schedule: Every Day at 02:00
- Redirect Stdout: ✓ (для логов)
Мониторинг и оптимизация
Ключевые метрики для наблюдения
Метрики производительности Seafile
| Метрика | Нормальное значение | Как проверить |
|---|---|---|
| Загрузка CPU | < 70% | docker stats seafile |
| Память | < 80% от лимита | TrueNAS Reporting |
| IOPS ZFS | Зависит от дисков | zpool iostat -v |
| Время отклика API | < 500ms | Логи nginx |
Оптимизация конфигурации
[fileserver]
# Увеличиваем лимиты для больших файлов
max_upload_size = 2000 # в MB
max_download_dir_size = 100000 # в MB
[quota]
# Квоты по умолчанию для новых пользователей
default = 10737418240 # 10GB
[database]
# Оптимизация для MariaDB/MySQL
max_connections = 200
connection_params = wait_timeout=28800
[performance]
# Кэширование в memcached
memcached_options = --SERVER=memcached --POOL-MIN=10 --POOL-MAX=100
Миграция с Nextcloud или другого решения
Если у тебя уже есть данные в Nextcloud на том же TrueNAS, миграция упрощается.
- Экспорт данных из Nextcloud: Используй
occ files:scanи rsync - Подготовка структуры Seafile: Создай библиотеки через веб-интерфейс
- Импорт через WebDAV или SMB: Смонтируй обе акции и копируй данные
- Обновление индексов: Запусти
seaf-fsckи переиндексацию
.ocdata, .htaccess). Используй rsync --exclude для фильтрации.
Частые проблемы и решения
Типичные ошибки при развертывании Seafile на TrueNAS
| Проблема | Причина | Решение |
|---|---|---|
| Ошибка 500 при входе | Проблемы с memcached | Проверь подключение к контейнеру memcached |
| Медленная синхронизация | Проблемы с сетью или дисками | Проверь iostat и сетевую задержку |
| Не загружаются файлы >2GB | Лимиты nginx/php | Увеличь client_max_body_size в nginx |
| Контейнер не запускается | Проблемы с volumes | Проверь права Z: в Docker и SELinux |
FAQ: Ответы на частые вопросы
❓ Можно ли использовать встроенную БД TrueNAS для Seafile?
Технически — да, но не рекомендуется. Встроенная БД TrueNAS предназначена для системных нужд. Используй отдельный контейнер MariaDB/PostgreSQL для изоляции и упрощения бэкапов.
❓ Как обновлять Seafile на TrueNAS?
1. Сделай бэкап через скрипт выше. 2. Останови контейнеры. 3. Обнови образы: docker-compose pull. 4. Запусти заново: docker-compose up -d. 5. Проверь логи на ошибки.
❓ Seafile или Nextcloud на TrueNAS?
Seafile лучше для: синхронизации больших файлов, производительности, минимализма. Nextcloud лучше для: интеграции приложений (календарь, контакты), расширяемости. На одном TrueNAS можно запустить оба для разных целей.
❓ Как настроить кластеризацию Seafile на нескольких нодах TrueNAS?
Используй общее хранилище (iSCSI или NFS из TrueNAS) для данных, отдельный кластер Redis для кэша, и балансировщик нагрузки перед несколькими инстансами Seafile. TrueNAS SCALE с Kubernetes упрощает эту задачу.
Итог: Связка Seafile и TrueNAS — это enterprise-решение за home-lab деньги. Ты получаешь надежность ZFS, производительность Seafile и полный контроль над своими данными. Начни с простого Docker Compose, настрой бэкапы, и постепенно добавляй оптимизации под свою нагрузку.