
Seafile — это личное облачное хранилище для хранения данных в стиле Dropbox.
Сегодня мы установим Seafile 9.0.2 на Debian 11.
- Имеется сервер с операционной системой Debian 11. Где-то в облаке.
- Seafile для безопасности запустим под отдельным пользователем как службы.
- В качестве БД используем MySQL 8 на том же сервере.
- Дополнительно поднимем и настроим Nginx.
Доступна версия 9.0.2 64bit.
https://www.seafile.com/en/download/
Ссылки
Ранее я уже публиковал статью про установку Seafile на Ubuntu:
Seafile 7.1.1 — установка на Ubuntu 18.04 LTS
В новой статье будет несколько отличий.
- Ранее я устанавливал Seafile 7.1.1, теперь установим более новую версию Seafile 9.0.2.
- Ранее была операционная система Ubuntu 18.04, сейчас Debian 11.
Мануал:
База данных MySQL 8 для Seafile
Установка MySQL 8 на Debian 11 у меня уже есть в отдельной статье:
Точно так же устанавливаем и перемещаем базу в директорию /opt.
Создаём три базы:
- seafile-ccnet
- seafile-db
- seafile-seahub
и пользователя MySQL: seafile:
mysql -u root -p
CREATE SCHEMA `seafile-ccnet` DEFAULT CHARACTER SET utf8 ;
CREATE SCHEMA `seafile-db` DEFAULT CHARACTER SET utf8 ;
CREATE SCHEMA `seafile-seahub` DEFAULT CHARACTER SET utf8 ;
CREATE USER 'seafile'@'localhost' identified by 'ПАРОЛЬ';
GRANT ALL PRIVILEGES ON `seafile-ccnet`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seafile-db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seafile-seahub`.* to `seafile`@localhost;
Меняем настройки безопасности пользователю:
ALTER USER 'seafile'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ПАРОЛЬ';
Установка пакетов
Устанавливаем пакеты, хочу обратить внимание на пакет python3-dev, который в официальном мануале не указан (работаем под ROOT):
apt-get update
apt-get install -y python3 python3-dev python3-setuptools python3-pip libmysqlclient-dev
apt-get install -y memcached libmemcached-dev
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
Создание директории и пользователя
Для Seafile создадим директорию /opt/seafile:
mkdir /opt/seafile
cd /opt/seafile
Создаём пользователя, под которым будет работать seafile (я назвал его sf) и назначаем права:
useradd -m -s /bin/bash sf
cd /
chown -R sf\: ./opt/seafile/
cd /opt
ls -fla | grep seafile
Установка Seafile Server
Работаем под пользователем sf:
su - sf
Скачиваем и распаковываем дистрибутив:
cd /opt/seafile
wget https://download.seadrive.org/seafile-server_9.0.2_x86-64.tar.gz
tar -xf seafile-server_9.0.2_x86-64.tar.gz
ls -Fla
Устанавливаем Seafile:
cd /opt/seafile/seafile-server-9.0.2/
./setup-seafile-mysql.sh
Запускается мастер установки. В процессе установки нам зададут вопросы, отвечаем на них, у вас будут собственные ответы:
- What is the name of the server? It will be displayed on the client. Пишу — seafile.
- What is the ip or domain of the server? Домена пока нет, пишу прямой IP — 46.39.246.23.
- Which port do you want to use for the seafile fileserver? Порт по умолчанию 8082 — устраивает.
- Please choose a way to initialize seafile databases:
[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases
Я уже создал все БД, указываю 2. - What is the host of mysql server? По умолчанию сервер БД localhost — localhost.
- What is the port of mysql server? Порт по умолчанию 3306, меня устраивает.
- Which mysql user to use for seafile? Указываем имя пользователя MySQL. Я пишу — seafile.
- What is the password for mysql user "seafile"? Указываем пароль от пользователя MySQL.
- Enter the existing database name for ccnet: Пишу — seafile-ccnet.
- Enter the existing database name for seafile: Пишу — seafile-db.
- Enter the existing database name for seahub: Пишу — seafile-seahub.
Проверяем настройки. Нажимаем Enter. Устанавливается Seafile Server.
Пробуем запустить seafile:
cd /opt/seafile/seafile-server-latest/
./seafile.sh start
Пробуем запустить seahub:
./seahub.sh start
При первом запуске нас попросят создать админа для seafile, укажите email и пароль.
Проверим, что сервисы seafile и seahub работают и используют порты 8000 и 8082:
netstat -plntu
Останавливаем службы для дальнейшей настройки:
./seahub.sh stop
./seafile.sh stop
Настройка автозапуска Seafile в качестве сервисов
Работаем под рутом. Создаём сервис seafile:
cd /etc/systemd/system/
vim seafile.service
Содержимое:
[Unit] Description=Seafile After=network.target [Service] Type=forking ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop LimitNOFILE=infinity User=sf Group=sf [Install] WantedBy=multi-user.target
Создаём сервис seahub:
vim seahub.service
Содержимое:
[Unit] Description=Seafile hub After=network.target seafile.service [Service] Type=forking ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop User=sf Group=sf [Install] WantedBy=multi-user.target
Запускаем сервисы и настраиваем автозагрузку:
systemctl daemon-reload
systemctl start seafile
systemctl start seahub
systemctl enable seafile
systemctl enable seahub
Проверяем:
systemctl status seafile
systemctl status seahub
Службы настроены.
Установка и настройка Nginx
Выполним установку Nginx и первоначальную настройку Seafile.
Установим nginx:
apt-get install nginx -y
Проверим что настроен автозапуск:
systemctl is-enabled nginx
Если автозапуск не настроен, то можно включить:
systemctl enable nginx
Проверим:
systemctl status nginx
Создаём конфигурационный файл для Seafile:
cd /etc/nginx/
vim sites-available/seafile
Содержимое:
server { listen 80; server_name _; server_tokens off; proxy_set_header X-Forwarded-For $remote_addr; 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_read_timeout 1200s; # used for view/edit office file via Office Online Server client_max_body_size 0; access_log /var/log/nginx/seahub.access.log; error_log /var/log/nginx/seahub.error.log; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; client_max_body_size 0; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 36000s; proxy_read_timeout 36000s; proxy_send_timeout 36000s; send_timeout 36000s; } location /media { root /opt/seafile/seafile-server-latest/seahub; } }
Применяем конфигурацию:
rm -f /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx
Начальная настройка Seafile Server
Работаем под пользователем sf:
su - sf
Переходим в директорию с файлами конфигурации:
cd /opt/seafile/conf/
ccnet.conf
Настраиваем ccnet.conf, указываем SERVICE_URL:
vim scnet.conf
Содержимое:
[General] SERVICE_URL = http://46.39.246.23 [Database] ENGINE = mysql HOST = 127.0.0.1 PORT = 3306 USER = seafile PASSWD = ПАРОЛЬ DB = seafile-ccnet CONNECTION_CHARSET = utf8
seafile.conf
Настраиваем seafile.conf, указываем host и keep_days:
vim seafile.conf
Содержимое:
[fileserver] host = 0.0.0.0 port = 8082 [database] type = mysql host = 127.0.0.1 port = 3306 user = seafile password = ПАРОЛЬ db_name = seafile-db connection_charset = utf8 [history] keep_days = 30
seahub_settings.py
Настраиваем seahub_settings.py:
mkdir /opt/seafile/seahub-data/thumbnail/
mkdir /opt/seafile/seahub-data/thumbnail/thumb/
vim seahub_settings.py
Содержимое:
# -*- coding: utf-8 -*- SECRET_KEY = "СОЛЬ" FILE_SERVER_ROOT = 'http://46.39.246.23/seafhttp' # For security consideration, please set to match the host/domain of your site, e.g., ALLOWED_HOSTS = ['.example.com']. # Please refer https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts for details. ALLOWED_HOSTS = ['46.39.246.23'] # Enalbe or disalbe registration on web. Default is `False`. ENABLE_SIGNUP = False DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'seafile-seahub', 'USER': 'seafile', 'PASSWORD': 'ПАРОЛЬ', 'HOST': '127.0.0.1', 'PORT': '3306', 'OPTIONS': {'charset': 'utf8mb4'}, } } ENABLE_SETTINGS_VIA_WEB = False TIME_ZONE = 'Europe/Moscow' LANGUAGE_CODE = 'ru' LANGUAGES = ( ('en', 'English'), ('ru', 'Русский'), ) SITE_NAME = 'Seafile' # Absolute filesystem path to the directory that will hold thumbnail files. THUMBNAIL_ROOT = '/opt/seafile/seahub-data/thumbnail/thumb/' SERVICE_URL = 'http://46.39.246.23'
Первый запуск
Проверяем что сайт заработал на HTTP протоколе.
http://46.39.246.23
Проверяем, что выполняется вход под созданным e-mail и паролем админа.
Настройка HTTPS и сертификата SSL
Правим конфигурационный файл для Seafile:
vim sites-available/seafile
В "server_name _;" указываем домен:
server_name internet-lab.ru;
Перезапускаем Nginx:
service nginx restart
Переходим в директорию с файлами конфигурации:
cd /opt/seafile/conf/
Правим ccnet.conf:
vim scnet.conf
В "SERVICE_URL" указываем домен и HTTPS:
SERVICE_URL = https://internet-lab.ru
Правим seahub_settings.py:
vim seahub_settings.py
В "SERVICE_URL" указываем домен и HTTPS. В "FILE_SERVER_ROOT" указываем домен и HTTPS. В "ALLOWED_HOSTS" добавляем домен.
SERVICE_URL = https://internet-lab.ru FILE_SERVER_ROOT = 'https://internet-lab.ru/seafhttp ALLOWED_HOSTS = ['46.39.246.23','internet-lab.ru']
Перезапускаем Seafile:
service seafile restart
service seahub restart
Устанавливаем certbot:
Let's Encrypt — настройка certbot в Debian
Проверяем работу сайта по HTTPS:
Сайт работает.
Конфигурация Seafile
Переходим в директорию с файлами конфигурации:
cd /opt/seafile/conf/
Настраиваем seahub_settings.py согласно своим потребностям:
Это не все настройки, больше смотрите в документации.