Найти тему

Установка Seafile 11 на Ubuntu 22

Оглавление

Seafile — это личное облачное хранилище для хранения данных в стиле Dropbox.

https://www.seafile.com

Сегодня мы установим Seafile 11.0.6 на Ubuntu 22.04

  • Имеется сервер с операционной системой Ubuntu 22.04.4.
  • Seafile для безопасности запустим под отдельным пользователем как службы.
  • В качестве БД используем MariaDB 10.6 на том же сервере.
  • Дополнительно поднимем и настроим Nginx.

Доступна версия 11.0.6 64bit.

https://www.seafile.com/en/download/

Ссылки

Ранее я уже публиковал статьи про установку Seafile:

Seafile 9.0.7 — установка на Ubuntu 20

Seafile 9.0.2 — установка на Debian 11

Seafile 7.1.1 — установка на Ubuntu 18.04 LTS

Seafile — установка на Ubuntu 18.04 LTS

https://www.seafile.com

Мануал:

https://manual.seafile.com/

Подготовка сервера

Подготовим сервер с операционной системой Ubuntu 22.04.4 LTS:

Установка Ubuntu Server 22.04 LTS на виртуальную машину VMware ESXi 6.7

Следует решить где будут находиться данные, тут у меня всё просто. Всё что касается БД будет лежать в /opt/mysql, всё что касается SeaFile — в /opt/seafile.

Ещё я настрою UFW:

UFW — начальная настройка в Ubuntu 22.04

Нужно доменное имя, у меня домен для SeaFile будет files.internet-lab.ru. Буду на нём файлики выкладывать разные для сайта. Добавляю в DNS новую A запись, IP адрес будет 176.109.108.64.

База данных MariaDB 10 для Seafile

Установим MariaDB 10. Процесс установки вынес в отдельную статью:

Установка MariaDB 10 на Ubuntu 22.04

Создадим директорию /opt/mysql и перенесём туда каталог данных MySQL:

Перемещение базы данных MariaDB 10 в Ubuntu 22.04

Для работы Seafile потребуется создать три базы данных. Их может создать установочный скрипт, но я предпочитаю создавать базы вручную. Создадим три базы:

  • seafile-ccnet
  • seafile-db
  • seafile-seahub

Также создаём пользователя 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 'youpassword';
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;
-2

Seafile использует для аутентификации mysql_native_password. Проверим:

SELECT user,plugin,host FROM mysql.user;

Если у вас для аутентификации используется unix_socket, то нужно изменить на mysql_native_password.

ALTER USER 'seafile'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('youpassword');

Установка пакетов

sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-setuptools python3-pip libmysqlclient-dev ldap-utils libldap2-dev
sudo apt-get install -y memcached libmemcached-dev
sudo pip3 install --timeout=3600 django==4.2.* future==0.18.* mysqlclient==2.1.* \
pymysql pillow==10.2.* pylibmc captcha==0.5.* markupsafe==2.0.1 jinja2 sqlalchemy==2.0.18 \
psd-tools django-pylibmc django_simple_captcha==0.6.* djangosaml2==1.5.* pysaml2==7.2.* pycryptodome==3.16.* cffi==1.15.1 lxml python-ldap==3.4.3

Создание директории и пользователя

Для Seafile создадим директорию /u01/seafile:

cd /opt
mkdir seafile
ll
-3

Права на папку seafile есть у пользователя root. Создадим пользователя в Ubuntu, под которым будет работать Seafile. Назовём его sf. Дадим ему права на /opt/seafile.

useradd -m -s /bin/bash sf
cd /
chown -R sf\: ./opt/seafile/
cd /opt
ls -fla | grep seafile
-4

Теперь права на папку /opt/seafile/ принадлежат пользователю sf.

Установка Seafile Server

Работаем под пользователем sf. Скачиваем и распаковываем Seafile Server для Linux. На текущий момент доступна версия Server for generic Linux 11.0.6 64bit.

https://www.seafile.com/en/download/

su - sf
cd /opt/seafile
wget https://download.seadrive.org/seafile-server_11.0.6_x86-64.tar.gz
tar -xf seafile-server_11.0.6_x86-64.tar.gz
ll

Запускаем скрипт установки Seafile Server для MySQL:

cd /opt/seafile/seafile-server-11.0.6/
./setup-seafile-mysql.sh

Запускается мастер установки. В процессе установки нам зададут вопросы, отвечаем на них, у вас будут собственные ответы:

  • What is the name of the server? It will be displayed on the client. Пишу имя хоста — ilab00.
  • What is the ip or domain of the server? Пишу будущее доменное имя — files.internet-lab.ru.
  • 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.
-5

Проверяем настройки. Нажимаем Enter. Начинается установка Seafile Server.

-6

Готово. В папке /opt/seafile/ создаётся ссылка seafile-server-latest на директорию с текущей версией SeaFile.

-7

Пробуем запустить seafile:

cd /opt/seafile/seafile-server-latest/
./seafile.sh start
-8

Пробуем запустить seahub:

./seahub.sh start

При первом запуске нас попросят создать админа для seafile, укажите email и пароль.

-9

Проверим, что сервисы seafile и seahub работают и используют порты 8000 и 8082:

netstat -plntu
-10

Останавливаем сервисы:

./seafile.sh stop
./seahub.sh stop

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

Работаем под рутом. Устанавливаем пакет:

sudo apt install nginx -y

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

systemctl start nginx
systemctl enable nginx

Создаём конфигурационный файл:

cd /etc/nginx/
vim sites-available/seafile

Содержимое конфигурационного файла:

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 81;
server_name _;
rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https
# Enables or disables emitting nginx version on error pages and in the "Server" response header field.
server_tokens off;
}

server {
listen 80;
server_name _;

#ssl on;
#ssl_certificate /etc/nginx/ssl/seafile-cert.pem; # path to your cacert.pem
#ssl_certificate_key /etc/nginx/ssl/seafile-key.pem; # path to your privkey.pem

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 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;
proxy_send_timeout 36000s;
send_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;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;

# This option is only available for Nginx >= 1.8.0. See more details below.
proxy_request_buffering off;

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

Конфигурация уже подготовлена для HTTPS, добавить потом сертификаты и поменять порты. Пока работаем по 80 порту HTTP.

Применяем конфигурацию:

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. Настраиваем ccnet.conf. https://manual.seafile.com/config/ccnet-conf/

su - sf
cd /opt/seafile/conf/
vim ccnet.conf

Вносим изменения, указываем внешний URL нашего домашнего облака. Временное указываем локальный HTTP URL, потом отдельно будем менять на HTTPS, но позже:

[General]
SERVICE_URL = http://176.109.108.64/

[Database]
ENGINE = mysql
HOST = 127.0.0.1 PORT = 3306 USER = seafile
PASSWD = ПАРОЛЬ
DB = seafile-ccnet
CONNECTION_CHARSET = utf8

Настраиваем gunicorn.conf.py.

vim gunicorn.conf.py

Вносить изменения мне не пришлось:

import os

daemon = True
workers = 5
# default localhost:8000 bind = "127.0.0.1:8000"
# Pid pids_dir = '/opt/seafile/pids' pidfile = os.path.join(pids_dir, 'seahub.pid')

# for file upload, we need a longer timeout value (default is only 30s, too short) timeout = 1200
limit_request_line = 8190

Настраиваем seafile.conf. https://manual.seafile.com/config/seafile-conf/

vim seafile.conf

Вносим изменения, я указываю срок хранения удалённых данных 30 дней, квоту в 100 ГБ на пользователя:

[fileserver]
host = 0.0.0.0 port = 8082
#web_token_expire_time=3600
[history]
keep_days = 30
[database]
type = mysql
host = 127.0.0.1 port = 3306 user = seafile
password = ПАРОЛЬ
db_name = seafile-db
connection_charset = utf8

[quota]
# default user quota in GB, integer only default = 100
[library_trash]
expire_days = 30

Настраиваем seahub_settings.py:

vim seahub_settings.py

Вносим изменения:

# -*- coding: utf-8 -*- SECRET_KEY = "b'СЕКРЕТНЫЙСГЕНЕРИРОВАННЫЙКЛЮЧ'" SERVICE_URL = "http://176.109.108.64/"
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'seafile-seahub',
'USER': 'seafile',
'PASSWORD': 'ПАРОЛЬ',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'},
}
}

Проверяем

su - sf
/opt/seafile/seafile-server-latest/seafile.sh start
/opt/seafile/seafile-server-latest/seahub.sh start

Заходим на сервер по IP адресу сервера http://176.109.108.64.

-11

Система работает. Остались тонкости.

Источник:

Установка Seafile 11 на Ubuntu 22 | internet-lab.ru

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу. Пишите комментарии, задавайте вопросы, подписывайтесь.