Установка 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