Установка Seafile на CentOS 7 с Nginx и MariaDB
Кому подходит эта инструкция
- Системным администраторам и инженерам DevOps, которые хотят развернуть приватный файловый облачный сервис на собственном сервере.
- Тем, кто предпочитает хранить данные на своих серверах и управлять доступом и шифрованием.
Важно: инструкция ориентирована на CentOS 7 и версии Seafile, указанные в шагах. Перед применением в продакшн проверьте совместимость актуальной версии Seafile и зависимостей.
Содержание
- Предварительные требования
- Шаги установки (подробно)
- Службы systemd и запуск
- SSL и конфигурация Nginx
- Брандмауэр (firewalld)
- Тестирование
- Рекомендации по безопасности и харденингу
- Отладка и распространённые ошибки
- Чеклист перед вводом в эксплуатацию
- Критерии приёмки
- Мини-методология и шаблоны команд
- Резюме
Предварительные требования
- Сервер с CentOS 7 (root-доступ)
- Доступ в интернет для установки пакетов и скачивания архива Seafile
- Доменные имена и запись A/AAAA, если планируется доступ по домену
- Резервная копия важных данных перед началом
Пояснение терминов (в одну строку)
- Seafile — серверное ПО для приватного облачного хранения и синхронизации файлов.
- Seahub — веб-интерфейс Seafile (Django-приложение).
- ccnet — служба координации Seafile.
Шаг 1 — Подготовка CentOS для Seafile
Подключитесь к серверу по SSH как root:
ssh [email protected]
TYPE YOUR PASSWORDОткройте файл конфигурации SELinux:
vim /etc/sysconfig/selinuxЗамените значение SELINUX=enforcing на SELINUX=disabled:
SELINUX=disabledСохраните файл и перезагрузите сервер:
rebootПосле перезагрузки войдите снова и убедитесь, что SELinux отключён:
getenforceВы должны увидеть: Disabled
Важно: отключение SELinux упрощает настройку, но в продакшн-среде лучше настроить корректные контексты SELinux или использовать режим permissive. Если безопасность критична, рассмотрите настройку политик вместо полного отключения.
Шаг 2 — Установка зависимостей Seafile
Установим EPEL и нужные пакеты (Python, MariaDB, Nginx и вспомогательные библиотеки):
yum -y install epel-releaseyum -y install python-imaging MySQL-python python-simplejson python-setuptools mariadb mariadb-server nginxОжидайте завершения установки.
Шаг 3 — Настройка MariaDB
Запустите MariaDB и выполните безопасную настройку root-пользователя:
systemctl start mariadb
mysql_secure_installationСледуйте подсказкам, установите надёжный root-пароль и удалите тестовые учётные записи.
Создадим три базы данных и пользователя для Seafile. В примере пользователь — seacloud, пароль — yourpassword (замените на свой безопасный пароль):
Войдите в mysql:
mysql -u root -p
TYPE YOUR PASSWORDВыполните SQL-запросы:
create database ccnet_db character set = 'utf8';
create database seafile_db character set = 'utf8';
create database seahub_db character set = 'utf8';
create user seacloud@localhost identified by 'yourpassword';
grant all privileges on ccnet_db.* to seacloud@localhost identified by 'yourpassword';
grant all privileges on seafile_db.* to seacloud@localhost identified by 'yourpassword';
grant all privileges on seahub_db.* to seacloud@localhost identified by 'yourpassword';
flush privileges;
exit
Совет по безопасности: используйте уникальный пароль и по возможности не давайте права с хоста root, ограничьте доступ по IP, если СУБД доступна по сети.
Шаг 4 — Установка Seafile
Создайте директорию установки и перейдите в неё. Seafile будет запущен от имени пользователя nginx:
mkdir -p /var/www/seafile
cd /var/www/seafileСкачайте архив Seafile и распакуйте (версия в примере — 6.0.5):
wget https://bintray.com/artifact/download/seafile-org/seafile/seafile-server_6.0.5_x86-64.tar.gz
tar -xzvf seafile-server_6.0.5_x86-64.tar.gzПереименуйте папку и перейдите в неё:
mv seafile-server-6.0.5 seafile-server
cd seafile-server/Запустите скрипт настройки для MySQL/MariaDB:
./setup-seafile-mysql.shНажимайте Enter и вводите сведения по подсказкам:
- имя сервера (hostname) — например
natsume - IP или домен сервера —
192.168.1.115(пример) - директория данных — нажать Enter для значения по умолчанию
- порт — Enter для значения по умолчанию
- при выборе БД введите вариант 2 (MySQL/MariaDB)
Для MySQL укажите:
- host: localhost
- port: 3306
- mysql user:
seacloud - password:
yourpassword - имена баз:
ccnet_db,seafile_db,seahub_db
Скрипт создаст таблицы и настройки.

Запустите Seafile и Seahub временно:
./seafile.sh start
./seahub.sh startПри старте Seahub задайте учётные данные администратора (email и пароль).

Seafile будет доступен по IP:8000, но далее мы настроим обратный прокси Nginx и systemd-сервисы. Остановите временные службы:
./seafile.sh stop
./seahub.sh stopШаг 5 — Конфигурация служб Seafile и Seahub (systemd)
Запустим Seafile под пользователем nginx. Измените владельца директории установки:
cd /var/www/
chown -R nginx:nginx *
chown -R nginx:nginx /tmp/seahub_cacheСоздайте systemd-юнит для seafile:
cd /etc/systemd/system/
vim seafile.serviceВставьте:
[Unit]
Description=Seafile Server
Before=seahub.service
After=network.target mariadb.service
[Service]
Type=oneshot
ExecStart=/var/www/seafile/seafile-server/seafile.sh start
ExecStop=/var/www/seafile/seafile-server/seafile.sh stop
RemainAfterExit=yes
User=nginx
Group=nginx
[Install]
WantedBy=multi-user.targetСоздайте юнит для seahub:
vim seahub.serviceВставьте:
[Unit]
Description=Seafile Hub
After=network.target seafile.target mariadb.service
[Service]
Type=oneshot
ExecStart=/var/www/seafile/seafile-server/seahub.sh start-fastcgi
ExecStop=/var/www/seafile/seafile-server/seahub.sh stop
RemainAfterExit=yes
User=nginx
Group=nginx
[Install]
WantedBy=multi-user.targetПерезапустите systemd и запустите сервисы:
systemctl daemon-reload
systemctl start seafile
systemctl start seahubПроверьте открытые порты (seahub — 8000, seafile — 8082):
netstat -plntu
Совет: если у вас нет netstat, установите пакеты net-tools или используйте ss.
Шаг 6 — Генерация SSL-сертификатов
Для HTTPS создадим каталог и сгенерируем самоподписанный сертификат (или разместите сюда ваш купленный сертификат):
mkdir -p /etc/nginx/ssl
cd /etc/nginx/sslСгенерируйте dhparam и сертификат:
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
openssl req -new -x509 -sha256 -days 365 -newkey rsa:2048 -nodes -keyout server.key -out server.crtЗадайте детали сертификата по подсказкам (CN — домен сервера). Ограничьте права на файлы:
chmod -R 700 /etc/nginx/ssl
chmod 400 server.*
chmod 400 dhparam.pemШаг 7 — Конфигурация Nginx как обратного прокси
Создайте новый виртуальный хост:
cd /etc/nginx/
vim conf.d/seafile.confВставьте конфигурацию (замените cloud.natsume.co на ваш домен):
server {
listen 80;
server_name cloud.natsume.co;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name cloud.natsume.co;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4';
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_prefer_server_ciphers on;
location / {
fastcgi_pass 127.0.0.1:8000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REMOTE_ADDR $remote_addr;
access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log;
fastcgi_read_timeout 36000;
}
# Reverse Proxy for seahub
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
}
# CHANGE THIS PATH WITH YOUR OWN DIRECTORY
location /media {
root /var/www/seafile/seafile-server/seahub;
}
}Проверьте конфигурацию и запустите Nginx:
nginx -t
systemctl start nginxПроверьте, что порты 80 и 443 слушаются:
netstat -plntu
Откорректируйте конфигурацию Seafile для использования домена. Отредактируйте:
cd /var/www/seafile/
vim conf/ccnet.confИзмените строку:
SERVICE_URL = https://cloud.natsume.coОтредактируйте seahub_settings.py и добавьте:
HTTP_SERVER_ROOT = 'https://cloud.natsume.co/seafhttp'Перезапустите сервисы и включите автозапуск:
systemctl restart seafile
systemctl restart seahub
systemctl enable nginx
systemctl enable mariadb
systemctl enable seafile
systemctl enable seahubШаг 8 — Настройка FirewallD
Запустите firewalld и откройте HTTP/HTTPS:
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
Если вы используете облачный провайдер (VPS), проверьте также правила на уровне панели управления (security groups).
Шаг 9 — Тестирование Seafile
Откройте браузер и перейдите по вашему домену (например, https://cloud.natsume.co). Выполните вход под учётными данными администратора.

Проверьте панель администратора и загрузку файлов:


Если всё работает, поздравляю — Seafile с Nginx и SSL успешно установлен!
Рекомендации по безопасности и харденингу
- SSL: используйте валидные сертификаты от CA (Let’s Encrypt) в продакшне вместо самоподписанных.
- Бэкапы: регулярно резервируйте базы данных и директорию данных Seafile (папку ccnet/seafile-data). Тестируйте восстановление.
- Права доступа: минимизируйте права на системные файлы, не давайте избыточные привилегии пользователям.
- Разграничение сети: если возможно, поместите MariaDB и Seafile в отдельную подсеть/внутреннюю сеть.
- Обновления: применяйте обновления ОС и пакетов, следите за обновлениями Seafile.
- Логи: настройте ротацию логов (logrotate) и собирайте метрики.
Дополнительно: рассмотрите интеграцию с внешними средствами аутентификации (LDAP/AD) при необходимости корпоративной идентификации.
Отладка и распространённые ошибки
Когда установка даёт сбой, проверьте по очереди:
- Журналы systemd:
journalctl -u seafileиjournalctl -u seahub. - Логи Nginx:
/var/log/nginx/seahub.error.logи access.log. - Доступность MariaDB:
mysql -u seacloud -p -h localhost. - Права на директории:
/var/www/seafileи/tmp/seahub_cacheдолжны принадлежать nginx. - Конфигурационные файлы Seafile:
conf/ccnet.confиconf/seahub_settings.py. - Проверка портов:
netstat -plntuилиss -plntu.
Типичные проблемы и решения:
- Seahub не стартует — проверьте python-зависимости и права на файлы, а также переменные окружения.
- Ошибки соединения с БД — перепроверьте credentials и доступность MariaDB.
- Проблемы с HTTPS — проверьте пути к сертификатам и права файлов.
Чеклист перед вводом в эксплуатацию (роль-базированный)
Администратор инфраструктуры:
- Сертификаты корректны и автоматизировано обновляются
- Брандмауэр и правила на уровне провайдера настроены
- Настроены бэкапы для БД и данных
DevOps-инженер:
- systemd-юниты добавлены и включены
- Мониторинг доступности сервисов настроен
- Логи отправляются в централизованную систему
Менеджер безопасности:
- Политики доступа и паролей утверждены
- План восстановления при аварии документирован
Критерии приёмки
- Сайт отвечает по HTTPS и редиректит HTTP → HTTPS.
- Веб-интерфейс Seahub доступен и администратор может войти.
- Клиент Seafile может синхронизировать файлы.
- Бэкап БД и данных выполнен и протестирован на восстановлении.
- Автоматический запуск сервисов после перезагрузки подтверждён.
Мини-методология установки (коротко)
- Подготовка ОС (SELinux, пакеты).
- Установка и настройка БД (MariaDB).
- Установка Seafile и первичная конфигурация.
- Создание systemd-юнитов и привязка к nginx-пользователю.
- Настройка Nginx + SSL.
- Открытие портов в брандмауэре.
- Тестирование и перевод в промоушен.
Быстрые шаблоны команд (cheat sheet)
Проверка статуса служб:
systemctl status seafile seahub nginx mariadb firewalldПросмотр логов за последние 200 строк:
journalctl -u seahub -n 200 --no-pager
tail -n 200 /var/log/nginx/seahub.error.logРезервное копирование БД (пример):
mysqldump -u root -p ccnet_db > /backups/ccnet_db.sql
mysqldump -u root -p seafile_db > /backups/seafile_db.sqlКогда такой подход не подойдёт (контраргументы)
- Если вы ожидаете обслуживания на уровне SLA коммерческих провайдеров с 24/7 поддержкой, лучше выбрать управляемый SaaS.
- Если нужно горизонтально масштабируемое хранение для тысяч пользователей с высокой нагрузкой, возможны дополнительные архитектурные изменения (распределённый хранилище, балансировщики).
Decision flow для выбора размещения (Mermaid)
flowchart TD
A[Нужен приватный облак?] -->|Нет| B[Использовать публичный SaaS]
A -->|Да| C{Ожидаемая нагрузка}
C -->|Маленькая| D[Seafile на одном сервере]
C -->|Средняя| E[Seafile + выделенная БД + более мощный хост]
C -->|Большая| F[Проектирование кластера, S3-совместимое хранилище]Резюме
- Seafile предоставляет возможность организовать приватное облачное хранилище под контролем вашей инфраструктуры.
- Набор шага за шагом: подготовка ОС, MariaDB, установка Seafile, systemd, Nginx/SSL, firewall, тестирование.
- В продакшн-окружении уделите внимание безопасности, бэкапу и мониторингу.
Спасибо за внимание. Если нужно, могу подготовить адаптированный playbook для Ansible или systemd unit с расширенными параметрами, или подсказки по миграции данных с другой платформы.
Похожие материалы
Как разогнать монитор через NVIDIA Control Panel
APC_INDEX_MISMATCH: как исправить BSOD в Windows
Как исправить ошибку Blink 1011
Восстановление удалённых SMS на Samsung
Как сбросить Samsung планшет до заводских настроек