Пост

Установка Seafile в Rocky Linux 9

Seafile – это облачное хранилище файлов с открытым исходным кодом, аналог Dropbox. Но в отличии от Dropbox, файлы хранятся вашем личном сервере. Файлы могут быть синхронизированы с персональными компьютерами и мобильными устройствами через приложения. Так же функционал Seafile позволяет предоставлять доступ к файлам как внешним пользователям, так и внутренним (другим зарегистрированным пользователям вашего хранилища).

  • Список статей из категории Seafile

Подготовка

Устанавливаем репозиторий EPEL и необходимый софт

1
2
3
$ sudo dnf -y install epel-release
$ sudo dnf -y install python3 python3-setuptools python3-pip python3-ldap python3-devel java-1.8.0-openjdk \
    curl tar nano pwgen poppler-utils libreoffice-headless libreoffice-pyuno libffi-devel gcc gcc-c++

Без этих библиотек не установится mysqlclient для python

1
$ sudo dnf -y install mariadb-connector-c-devel mariadb-connector-c

Устанавливаем утилиты Python

1
2
3
4
5
$ sudo pip3 install --upgrade pip
$ sudo pip3 install --upgrade Pillow
$ sudo pip3 install pylibmc captcha jinja2 sqlalchemy psd-tools django-pylibmc django-simple-captcha python3-ldap
$ sudo pip3 install django==3.2.* sqlalchemy==1.4.3 pycryptodome==3.12.0 cffi==1.14.0
$ sudo pip3 install mysqlclient

Установка Memcache

Устанавливаем Memcache

1
$ sudo dnf -y install memcached

Запускаем службу memcached и добавляем ее в автозагрузку

1
2
$ sudo systemctl enable --now memcached
$ sudo systemctl status memcached

Установка и настройка NGINX

Добавляем репозиторий Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo nano /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Устанавливаем Nginx

1
$ sudo dnf -y install nginx

Отключаем дефолтный конфиг

1
$ sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled

Отредактируем конфиг nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ sudo nano /etc/nginx/nginx.conf
...
events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile on;
    tcp_nopush on;
    server_tokens off;
    server_names_hash_bucket_size 128;
    client_max_body_size 50M;
    tcp_nodelay on;
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;
    gzip off;

    include /etc/nginx/conf.d/*.conf;
}

Создадим конфиг seafile.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$ sudo nano /etc/nginx/conf.d/seafile.conf

log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_response_time';

server {
    listen 80;
    server_name seafile.itdraft.ru;

    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_set_header   X-Forwarded-Proto $scheme;
         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 seafileformat;
         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;

        access_log      /var/log/nginx/seafhttp.access.log seafileformat;
        error_log       /var/log/nginx/seafhttp.error.log;
    }
    location /media {
        root /opt/seafile/seafile-server-latest/seahub;
    }
    location /seafdav {
        proxy_pass         http://127.0.0.1:8080/seafdav;
        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;
        proxy_read_timeout  1200s;

        client_max_body_size 0;

        access_log      /var/log/nginx/seafdav.access.log seafileformat;
        error_log       /var/log/nginx/seafdav.error.log;
    }
}

Проверяем на ошибки

1
$ sudo nginx -t

Запускаем Nginx и добавляем его в автозагрузку

1
$ sudo systemctl enable --now nginx

Настройка SeLinux и Firewall

Отключаем SELinux. В RHEL-9 изменилась процедура отключения SELinux

1
2
$ sudo setenforce 0
$ sudo grubby --update-kernel ALL --args selinux=0

Открываем порты 80, 443

1
2
$ sudo firewall-cmd --zone=public --add-service={http,https} --permanent
$ sudo firewall-cmd --reload

Установка MySQL-сервера MariaDB

Устанавливаем необходимые пакеты

1
$ sudo dnf -y install mariadb mariadb-server

Запускаем сервис mariadb и добавляем его в автозагрузку

1
$ sudo systemctl enable --now mariadb

Запускаем скрипт инициализации БД, устанавливаем пароль пользователя root для MySQL, отвечаем на вопросы

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sudo mysql_secure_installation
...
Switch to unix_socket authentication [Y/n]
...
Change the root password? [Y/n]
New password: myrootpass
Re-enter new password: myrootpass
...
Remove anonymous users? [Y/n]
...
Disallow root login remotely? [Y/n]
...
Remove test database and access to it? [Y/n]
...
Reload privilege tables now? [Y/n]
...
Thanks for using MariaDB!

Пробуем подключиться

1
$ mysql -u root -p

Установка Seafile 9

Создаем пользователя seafile

1
2
$ sudo useradd -m -U -r -d /opt/seafile seafile
$ sudo chmod 750 /opt/seafile

Добавляем пользователя nginx в группу seafile

1
$ sudo usermod -aG seafile nginx

Переключаемся на пользователя seafile

1
$ sudo su - seafile

Скачиваем архив seafile-server_9.0.10 (на момент написания статьи это была финальная версия) и распаковываем его

1
2
$ curl -OL https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_9.0.10_x86-64.tar.gz
$ tar xzf seafile-server_*

Запускаем установку Seafile, отвечаем на вопросы системы

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
$ ./seafile-server-9.0.10/setup-seafile-mysql.sh

Press ENTER to continue

[ server name ] seafile
[ This server's ip or domain ] seafile.itdraft.ru
[ 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

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 ] myrootpass

verifying password of user root ...  done

Enter the name for mysql user of seafile. It would be created if not exists.
[ default "seafile" ] 

Enter the password for mysql user "seafile":
(тут лучше использовать пароль без спец.символов @#$%^)
[ password for seafile ] seafilepass

Enter the database name for ccnet-server:
[ default "ccnet-db" ] 

Enter the database name for seafile-server:
[ default "seafile-db" ] 

Enter the database name for seahub:
[ default "seahub-db" ] 

This is your configuration
    server name:            seafile
    server ip/domain:       seafile.itdraft.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

[...]
-----------------------------------------------------------------
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.

Переключаемся на основного пользователя (правами sudo)

1
$ exit

Создаем Systemd Unit seafile.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo nano /etc/systemd/system/seafile.service
[Unit]
Description=Seafile Server
After=network.target remote-fs.target mysqld.service

[Service]
ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
User=seafile
Group=seafile
LimitNOFILE=infinity
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Создаем Systemd Unit seahub.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo nano /etc/systemd/system/seahub.service
[Unit]
Description=Seafile Seahub
After=network.target seafile.service

[Service]
ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Перечитываем Systemd Unit

1
$ sudo systemctl daemon-reload

Настройка Seafile

Отредактируем seafdav.conf, для активации WebDav

1
2
3
4
5
6
$ sudo nano /opt/seafile/conf/seafdav.conf
[WEBDAV]
enabled = true
port = 8080
#fastcgi = true
share_name = /seafdav

Проверяем настройки ccnet.conf

1
2
3
4
5
6
7
8
9
10
11
12
$ sudo nano /opt/seafile/conf/ccnet.conf
[General]
SERVICE_URL = http://seafile.itdraft.ru

[Database]
ENGINE = mysql
HOST = 127.0.0.1
PORT = 3306
USER = seafile
PASSWD = seafilepass
DB = ccnet-db
CONNECTION_CHARSET = utf8

В этом же файле задаются настройки для подключения LDAP-авторизации

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ sudo nano /opt/seafile/conf/ccnet.conf
...
# MS AD
[LDAP]
HOST = ldap://192.168.1.2:389/
BASE = ou=USERS,dc=itdraft,dc=ru;ou=Admins,ou=DomainUsers,ou=MSK,dc=itdraft,dc=ru
USER_DN = [email protected]
PASSWORD = mypass
#LOGIN_ATTR = uid
#LOGIN_ATTR = sAMAccountName
LOGIN_ATTR = userPrincipalName
#LOGIN_ATTR = mail
FILTER = memberOf=cn=Seafile.Access,ou=USERS,dc=itdraft,dc=ru

[LDAP_SYNC]
FIRST_NAME_ATTR = givenName
LAST_NAME_ATTR = sn
UID_ATTR = uid

Включим кеширование Memcached, капчу, время хранение сессии и языки

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
$ sudo nano /opt/seafile/conf/seahub_settings.py
# -*- coding: utf-8 -*-
SECRET_KEY = "b'o=nv+xw7xb&6jhdi^d7w^=-9j)yp@xmelvq7kh^q#8i#@^z7jd'"
SERVICE_URL = "http://seafile.itdraft.ru/"

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'seahub-db',
        'USER': 'seafile',
        'PASSWORD': 'seafilepass',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

# Enable chache
CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': '127.0.0.1:11211',
    },
    'locmem': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    },
}
COMPRESS_CACHE_BACKEND = 'locmem'

# Email settings
EMAIL_USE_TLS                       = False
EMAIL_HOST                          = 'mail.example.com'
EMAIL_HOST_USER                     = '[email protected]'
EMAIL_HOST_PASSWORD                 = ''
EMAIL_PORT                          = '25'
DEFAULT_FROM_EMAIL                  = EMAIL_HOST_USER
SERVER_EMAIL                        = EMAIL_HOST_USER
# https://download.seafile.com/published/seafile-manual/config/sending_email.md

TIME_ZONE                           = 'Europe/Moscow'
SITE_BASE                           = 'http://seafile.itdraft.ru'
SITE_NAME                           = 'Seafile Server'
SITE_TITLE                          = 'Seafile Server'
SITE_ROOT                           = '/'
ENABLE_SIGNUP                       = False
ACTIVATE_AFTER_REGISTRATION         = False
SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER  = True
SEND_EMAIL_ON_RESETTING_USER_PASSWD = True
CLOUD_MODE                          = False
FILE_PREVIEW_MAX_SIZE               = 30 * 1024 * 1024
SESSION_COOKIE_AGE                  = 60 * 60 * 24 * 7 * 2
SESSION_SAVE_EVERY_REQUEST          = False
SESSION_EXPIRE_AT_BROWSER_CLOSE     = False

# User management options
LOGIN_REMEMBER_DAYS = 1
LOGIN_ATTEMPT_LIMIT = 3

# Other options
# Максимальное количество одновремено загружаемых файлов
MAX_NUMBER_OF_FILES_FOR_FILEUPLOAD = 20
LANGUAGE_CODE = 'ru'
LANGUAGES = (
    ('en', 'English'),
    ('ru', 'Russian'),
)

FILE_SERVER_ROOT                    = 'http://seafile.itdraft.ru/seafhttp'

Так же в этом файле можно прописать настройки для подключения OnlyOffice

1
2
3
4
5
6
7
...
# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = True
ONLYOFFICE_APIJS_URL = 'http://seafile.itdraft.ru/onlyofficeds/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx')

Дополнительные параметры можно посмотреть на официальном сайте

Отредактируем файл seafile.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ sudo nano /opt/seafile/conf/seafile.conf
[fileserver]
port = 8082
max_upload_size=1024
max_download_dir_size=1024

[database]
type = mysql
host = 127.0.0.1
port = 3306
user = seafile
password = seafilepass
db_name = seafile-db
connection_charset = utf8

# Квота
[quota]
default = 5

[history]
keep_days = 7

# Очищать корзину, кол-во дней
[library_trash]
expire_days = 30

# Configure Syslog
[general]
enable_syslog = true

Запускаем сервисы вручную, так как в процессе первого запуска сервиса seahub надо будет указать e-mail и пароль администратора

1
2
3
4
5
$ sudo su - seafile /opt/seafile/seafile-server-latest/seafile.sh start
$ sudo su - seafile /opt/seafile/seafile-server-latest/seahub.sh start
[ admin email ] [email protected]
[ admin password ] mypasswd
[ admin password again ] mypasswd

Останавливаем

1
2
$ sudo su - seafile /opt/seafile/seafile-server-latest/seahub.sh stop
$ sudo su - seafile /opt/seafile/seafile-server-latest/seafile.sh stop

Запускаем службы и добавляем их в автозапуск

1
2
$ sudo systemctl enable --now seafile
$ sudo systemctl enable --now seahub

Перезапускаем Nginx

1
$ sudo systemctl restart nginx

Если надо скинуть пароль админа, выполняем команду

1
$ sudo su - seafile /opt/seafile/seafile-server-latest/reset-admin.sh
Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.