Установка и запуск Seafile Server Community Edition на Linux Ubuntu


Используемые термины: Seafile, Ubuntu, MariaDB, NGINX, memcached.
Seafile может быть развернут как Docker-контейнер или при помощи готового скрипта. Но в данной инструкции мы подробно рассмотрим процесс ручной установки и настройки Seafile на собственный серер. По большей части, мы будем опираться на официальную инструкцию.
В нашем примере будут использоваться:
- Linux Ubuntu 20.04.
- Seafile Server версии 9.
- СУБД MariaDB.
- Веб-сервер NGINX.
Пошагово, мы познакомимся с требованиями, опишем предварительную настройку системы и развертывание Seafile Server со всем необходимым прикладным софтом.
Требования к системе
Подготовка к установке Seafile
Установка дополнительных компонентов
Установка Seafile
Настройка автозапуска
Проксирование через NGINX
Решение возможных проблем
Читайте также
Системные требования
Рассмотрим программно-аппаратные требования для развертывания Seafile Server:
- Процессор: минимум 2 ядра.
- Память ОЗУ: 2 Гб.
- Операционная система: Linux Ubuntu (старые и новые версии), Linux CentOS (старые версии).
- СУБД: MariaDB/MySQL, SQLite.
- Веб-сервер: NGINX, Apache.
Также рекомендована установка memcached для работы 50 пользователей и более.
Предварительная настройка системы
Прежде чем перейти в процессу установки и настройки сервера Seafile, выполним предварительные действия.
1. Обновление пакетов
Обновляем список пакетов:
apt update
На свежей системе также рекомендуется выполнить обновление установленных в системе пакетов:
apt upgrade
2. Время
Для нормального отображения времени создания и редактирования файлов, убедимся, что на нашем сервере стоит правильное время.
Установим сервис синхронизации времени и разрешим его автозапуск:
apt install chrony
systemctl enable chrony
Настраиваем временную зону:
timedatectl set-timezone Europe/Moscow
* В данном примере мы задаем зону по московскому времени.
Список всех доступных зон можно посмотреть командой
timedatectl list-timezones
3. Настройка брандмауэра
По умолчанию, в Ubuntu брандмауэр пропускает все сетевые пакеты и не требует настройки. В этом случае, можно пропустить выполнение данного пункта.
Если же в вашем случае брандмауэр настроен на блокировку портов, выполняем нижеописанные действия.
Для нормальной работы системы нам нужно открыть 2 порта:
iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
iptables -I INPUT -p tcp --dport 8082 -j ACCEPT
* на порту 8000 работает веб-сервер seahub; на 8002 будет слушать сервер seafile.
Для сохранения правила используем утилиту iptables-persistent:
apt install iptables-persistent
netfilter-persistent save
Установка программных компонентов
Установим программные продукты, которые необходимы для работы Seafile.
Memcache
Начать необходимо с Memcache, так как его библиотеки нужны для установки пакетов python. Для установки вводим:
apt install memcached libmemcached-dev
Внесем небольшую корректировку в работу сервиса:
vi /etc/memcached.conf
Добавим памяти, которую может использовать memcached для своей работы:
-m 512
* до 512 Мб. Но можно и больше...
Перезапускаем сервис и разрешаем его автозапуск:
systemctl restart memcached
systemctl enable memcached
Python
Для запуска и работы нашей облачной системы необходим python версии 3. Выполним его установку с дополнительными компонентами:
apt install python3 python3-setuptools python3-pip libmysqlclient-dev
* где:
- python3 — интерпретатор для языка программирования python.
- python3-setuptools — дополнение для python-distutils, который в свою очередь, нужен для установки дополнительных модулей.
- python3-pip — менеджер установки пакетов python.
- libmysqlclient-dev — набор файлов для разработки под СУБД MySQL/MariaDB.
С помощью менеджера пакетов python также установим:
pip3 install --timeout=3600 django==3.2.* Pillow pylibmc captcha jinja2 sqlalchemy==1.4.3 django-pylibmc django-simple-captcha python3-ldap mysqlclient pycryptodome==3.12.0 cffi==1.14.0
MariaDB
Как говорилось выше, мы будем использовать в качестве сервера баз данных MariaDB. Она может быть установлена из репозитория командой:
apt install mariadb-server
* подробнее об установке MariaDB читайте инструкцию Установка MariaDB на CentOS или Ubuntu.
Установим пароль для основной учетной записи СУБД (root):
mysqladmin -u root password
* система запросит новый пароль. Его нужно ввести дважды.
Чтобы пароль применился, нужно сбросить привилегии в СУБД. Для этого заходим в оболочку sql:
mysql -uroot -p
И вводим:
> flush privileges;
После выходим обратно:
> quit
Разрешаем автозапуск демона:
systemctl enable mariadb
Мы готовы переходить к установке Seafile.
Установка Seafile
Создаем учетную запись seafile, от которой будет работать наш сервис:
useradd seafile -r
Создаем каталог, в который загрузим установочные файлы Seafile:
mkdir -p /opt/seafile/bin
На странице загрузки официального сайта копируем ссылку на архив с приложением:
С помощью скопированной ссылки загружаем архив:
wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_9.0.2_x86-64.tar.gz
И распаковываем его в каталог /opt/seafile/bin:
tar zxf seafile-server_*.tar.gz -C /opt/seafile/bin --strip-components 1
Назначим в качестве владельца каталога seafile и распакованных файлов ранее созданного пользователя:
chown -R seafile:seafile /opt/seafile
Заходим под пользователем seafile:
su seafile
Переходим в каталог с установочными файлами и запускаем скрипт:
$ cd /opt/seafile/bin
$ ./setup-seafile-mysql.sh
Мы увидим приветствие мастера установки. Просто нажимаем ENTER:
-----------------------------------------------------------------
This script will guide you to setup your seafile server using MySQL.
Make sure you have read seafile server manual at
https://download.seafile.com/published/seafile-manual/home.md
Press ENTER to continue
-----------------------------------------------------------------
Вводим имя сервера, который будут видеть клиенты:
What is the name of the server? It will be displayed on the client.
3 - 15 letters or digits
[ server name ] dmosk_seafile
Вводим IP-адрес или имя сервера, по которому можно подключиться к серверу:
What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] seafile.dmosk.ru
Вводим порт, на котором должен слушать сервис или оставляем 8082:
Which port do you want to use for the seafile fileserver?
[ default "8082" ]
Выбираем, использовать имеющуюся базу или создать новую. Мы создадим новую:
-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------
[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases
[ 1 or 2 ] 1
Указываем настройки для подключения к СУБД — хост, порт, пароль для root:
What is the host of mysql server?
[ default "localhost" ]
What is the port of mysql server?
[ default "3306" ]
What is the password of the mysql root user?
[ root password ]
Задаем имя пользователя mysql, который будет создан для seafile (можно оставить предложенный вариант, нажав ENTER):
Enter the name for mysql user of seafile. It would be created if not exists.
[ default "seafile" ]
Задаем пароль для создаваемой учетной записи в mysql:
Enter the password for mysql user "seafile":
[ password for seafile ]
Вводим имя для базы данных для сервера ccnet:
Enter the database name for ccnet-server:
[ default "ccnet-db" ]
Вводим имя для базы данных для сервера seafile:
Enter the database name for seafile-server:
[ default "seafile-db" ]
Вводим имя для базы данных для сервера seahub:
Enter the database name for seahub:
[ default "seahub-db" ]
Смотрим на сводную информацию:
---------------------------------
This is your configuration
---------------------------------
server name: dmosk_seafile
server ip/domain: seafile.dmosk.ru
seafile data dir: /opt/seafile/seafile-data
fileserver port: 8082
database: create new
ccnet database: ccnet-db
seafile database: seafile-db
seahub database: seahub-db
database user: seafile
---------------------------------
Press ENTER to continue, or Ctrl-C to abort
---------------------------------
Если ошибок нет, вводим ENTER — начнется установке и конфигурирование.
Мы должны увидеть сообщение:
-----------------------------------------------------------------
Your seafile server configuration has been finished successfully.
-----------------------------------------------------------------
run seafile server: ./seafile.sh { start | stop | restart }
run seahub server: ./seahub.sh { start <port> | stop | restart <port> }
-----------------------------------------------------------------
If you are behind a firewall, remember to allow input/output of these tcp ports:
-----------------------------------------------------------------
port of seafile fileserver: 8082
port of seahub: 8000
When problems occur, Refer to
https://download.seafile.com/published/seafile-manual/home.md
for information.
Установка завершена.
Внесем изменения в конфигурационный файл:
$ vi /opt/seafile/conf/gunicorn.conf.py
Отредактируем строку
bind = "0.0.0.0:8000"
* в данном примере мы настроили наш сервер, чтобы он слушал на всех интерфейсах, а не только на локальном. Это нужно, чтобы он мог отвечать на сетевые запросы.
Открываем другой конфигурационный файл:
vi /opt/seafile/conf/seahub_settings.py
Добавим строки:
CACHES = {
'default': {
'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
},
}
* в данном примере мы говорим серверу использовать memcached.
Теперь нам нужно запустить 2 сервиса:
- seafile fileserver — сервер, принимающий запросы от клиентов.
- seahub — веб-сервер на python.
Стартуем первый:
$ /opt/seafile/bin/seafile.sh start
Мы должны увидеть:
Starting seafile server, please wait ...
** Message: 16:02:58.146: seafile-controller.c(621): No seafevents.
Seafile server started
Done.
Запускаем второй сервис:
$ /opt/seafile/bin/seahub.sh start
Система задаст несколько вопросов.
Адрес электронной почты администратора (это же будет логин администратора):
What is the email for the admin account?
[ admin email ] postmaster@dmosk.ru
Пароль, который будет использоваться для администратора (вводим дважды):
What is the password for the admin account?
[ admin password ]
Enter the password again:
[ admin password again ]
Мы должны увидеть:
Seahub is started
Done.
Сервер запущен.
Попробуем открыть браузер и перейти по адресу http://<IP-адрес сервера>:8000 — должна открыться страница авторизации. Вводим логин и пароль, который создали при старте seahub (в нашем примере для пользователя postmaster@dmosk.ru). Мы должны попасть в систему с правами администратора. Теперь у нас есть возможность управлять сервисом из графического интерфейса.
Настройка автозапуска
В нашем примере были разово запущены сервисы, которые перестанут работать после перезагрузки сервера. Для решения задачи автозапуска мы создадим два юнита в systemd.
С предыдущей настройки мы вошли в консоль под пользователем seafile. Оставаясь в нем, остановим ранее запущенные сервисы:
$ /opt/seafile/bin/seahub.sh stop
$ /opt/seafile/bin/seafile.sh stop
Выходим из консоли пользователя seafile:
$ exit
Вводим команду для создания первого юнита:
systemctl edit --full --force seafile
[Unit]
Description=Seafile Service
After=network.target
[Service]
User=seafile
Group=seafile
Type=forking
ExecStart=/opt/seafile/bin/seafile.sh start
ExecStop=/opt/seafile/bin/seafile.sh stop
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
Создаем второй юнит:
systemctl edit --full --force seahub
[Unit]
Description=Seahub Service
After=network.target
[Service]
User=seafile
Group=seafile
Type=forking
ExecStart=/opt/seafile/bin/seahub.sh start
ExecStop=/opt/seafile/bin/seahub.sh stop
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
Разрешаем запуск созданных сервисов:
systemctl enable seafile seahub
Стартуем их:
systemctl start seafile seahub
Проверяем состоянию запущенных служб:
systemctl status seafile seahub
Пробуем снова зайти на веб-интерфейс Seafile.
NGINX Reverse Proxy
Рассмотрим процесс настройки NGINX для проксирования веб-запросов на seafile. Сначала настроим запросы без шифрования, после подключим SSL.
Установка и настройка NGINX + Seafile
Устанавливаем nginx командой:
apt install nginx
Создадим конфигурационный файл:
vi /etc/nginx/sites-enabled/default
Приводим его к виду:
server {
listen 80 default_server;
server_name _;
location / {
proxy_pass http://127.0.0.1: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 http;
proxy_read_timeout 1200s;
client_max_body_size 0;
}
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;
}
}
Проверяем конфигурацию nginx и перечитываем ее для применения:
nginx -t && nginx -s reload
Попробуем открыть браузер и перейти по адресу http://<IP-адрес сервера> (без порта) — должна открыться страница авторизации.
Настройка SSL
Мы рассмотрим пример получения сертификата от Let's Encrypt. Для этого у нас должен быть настроено доменное имя, которое ведет на сервер Seafile. Ссылку на детальную инструкцию по работе с Let's Encrypt смотрите в конце инструкции.
Устанавливаем certbot:
apt install certbot
Открываем конфигурационный файл nginx с настройкой seafile:
vi /etc/nginx/sites-enabled/default
Добавляем в секцию server:
server {
...
location ~ /.well-known {
root /usr/share/nginx/html;
allow all;
}
...
}
Применяем настройку nginx:
nginx -t && nginx -s reload
Вводим команду на получение сертификата:
certbot certonly --webroot --agree-tos --email postmaster@dmosk.ru --webroot-path /usr/share/nginx/html/ -d seafile.dmosk.ru
* в данном примере мы получаем сертификат для доменного имени seafile.dmosk.ru.
Добавляем задание в крон на продление сертификата:
crontab -e
0 0 * * 1,4 /usr/bin/certbot renew --noninteractive
Добавляем в файл строку:
vi /etc/letsencrypt/cli.ini
deploy-hook = systemctl reload nginx
Теперь откроем конфигурационный файл nginx:
vi /etc/nginx/sites-enabled/default
Отредактируем опцию listen, добавим ssl_certificate и ssl_certificate_key, а также секцию server:
server {
listen 443 ssl default_server;
server_name _;
ssl_certificate /etc/letsencrypt/live/seafile.dmosk.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seafile.dmosk.ru/privkey.pem;
...
}
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
Применяем настройку:
nginx -t && nginx -s reload
Попробуем открыть браузер и перейти по адресу https://<IP-адрес сервера> (с https) — должна открыться страница авторизации.
Возможные ошибки
Рассмотрим некоторые проблемы, с которыми можно столкнуться при настройке Seafile.
Ошибка проверки CSRF. Запрос отклонён
Данная ошибка появляется при попытке открыть веб-страницу Seafile.
Причина: запрос отправляет на адрес сайта (URL), которому не доверяет веб-сервер Seafile (не добавлен в список доверенных).
Решение: в настройках seahub предусмотрена опция CSRF_TRUSTED_ORIGINS, в которой мы можем перечислить все URL, на которые можно отправлять запрос.
Открываем конфигурационный файл:
vi /opt/seafile/conf/seahub_settings.py
Добавляем строку (или редактируем, если опция CSRF_TRUSTED_ORIGINS уже присутствует):
CSRF_TRUSTED_ORIGINS = ['seafile.dmosk.ru', 'seafile.dmosk.ru:4443']
* обратите внимание, что мы разрешили подключение для URL seafile.dmosk.ru, а также для нестандартного порта 4443.
Перезагружаем seafile:
systemctl restart seafile seahub
Проверяем работу портала.
Читайте также
Вам также могут быть полезны следующие инструкции:
1. Установка и настройка Nextcloud + NGINX на Ubuntu.
2. Установка и настройка NextCloud на CentOS.