Seafile — это личное облачное хранилище для хранения данных в стиле Dropbox.
Сегодня мы установим Seafile 7.1.1 на Ubuntu 18.04 LTS.
- Сервер с операционной системой Ubuntu 18.04 LTS
- Seafile для безопасности запустим под отдельным пользователем.
- В качестве БД используем MySQL 8 на том же сервере.
- Дополнительно поднимем и настроим Nginx.
Ссылки
Ранее я уже публиковал статью про установку Seafile на Ubuntu:
Seafile — установка на Ubuntu 18.04 LTS
В новой статье будет несколько отличий.
- Ранее я устанавливал Seafile 6.3.4, теперь установим более новую версию Seafile 7.1.1.
- В качестве БД мы использовали MySQL 8 на стороннем сервере, теперь поднимем MySQL на том же сервере, что и Seafile.
- Пропустим создание и настройку виртуальной машины.
- Не будем устанавливать firewall ufw.
- Не используем IIS, у нас только nginx.
https://www.seafile.com/en/download/
Установка Ubuntu Server 18.04.2 LTS на виртуальную машину VMware
https://download.seafile.com/published/seafile-manual/deploy/using_mysql.md
Мануал:
Подготовка сервера
Подготовим сервер с операционной системой Ubuntu 8.04 LTS:
Установка Ubuntu Server 18.04.2 LTS на виртуальную машину VMware
Выделяю под MySQL и Seafile отдельный диск /u01.
cd /
ls -fla | grep u01
drwxr-xr-x 3 root root 4096 Feb 3 19:14 u01
df -h
Установка MySQL 8 и создание БД
Установим MySQL 8. Процесс установки вынес в отдельную статью:
Установка MySQL 8 на Ubuntu 18.04 LTS
Создадим директорию /u01/mysql и перенесём туда каталог данных MySQL:
Перемещение базы данных MySQL 8 в Ubuntu 18.04 LTS
Для работы 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 'seafile123';
ALTER USER 'seafile'@'localhost' IDENTIFIED WITH mysql_native_password 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;
У меня пользователь не захотел логиниться из-за настроек безопасности, поэтому я добавил команду ALTER USER из-за ошибки:
Failed to connect to MySQL: Plugin caching_sha2_password could not be loaded
ALTER USER 'seafile'@'localhost' IDENTIFIED WITH mysql_native_password BY 'youpassword';
Дополнительные пакеты
Перед установкой Seafile 7.1.1 нам потребуется установить дополнительные пакеты:
- python 3
- python3-setuptools
- python3-pip
- python3-ldap
А также pip пакеты:
- Pillow
- pylibmc
- captcha
- jinja2
- sqlalchemy
- psd-tools
- django-pylibmc
- django-simple-captcha
Работаем под рутом.
apt-get update
apt-get install python3 python3-setuptools python3-pip python3-ldap -y
pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy psd-tools \
django-pylibmc django-simple-captcha
Подготовка к установке Seafile
Для Seafile создадим директорию /u01/seafile. Вот она.
root@seafile00:/u01# cd /u01
root@seafile00:/u01# ls -fla
Видим, что права на папку seafile есть у пользователя root, нехорошо.
Работаем под рутом. Создадим пользователя в Ubuntu, под которым будет работать Seafile. Назовём его sf. Дадим ему права на /u01/seafile.
useradd -m -s /bin/bash sf
cd /
chown -R sf\: ./u01/seafile/
cd /u01
ls -fla | grep seafile
Теперь права на папку /u01/seafile/ принадлежат пользователю sf.
Установка Seafile Server
Работаем под пользователем sf. Скачиваем и распаковываем Seafile Server для Linux. На текущий момент доступна версия Server for generic Linux 7.1.1 64bit.
https://www.seafile.com/en/download/
su - sf
cd /u01/seafile
wget https://download.seadrive.org/seafile-server_7.1.1_x86-64.tar.gz
tar -xf seafile-server_7.1.1_x86-64.tar.gz
ll
Работаем под пользователем sf. Запускаем скрипт установки Seafile Server для MySQL:
cd /u01/seafile/seafile-server-7.1.1/
./setup-seafile-mysql.sh
Запускается мастер установки. В процессе установки нам зададут вопросы, отвечаем на них, у вас будут собственные ответы:
- What is the name of the server? It will be displayed on the client. Пишу имя хоста — seafile00.
- What is the ip or domain of the server? Пишу будущее доменное имя — cloud.e.local.
- Where do you want to put your seafile data? Определяемся, где хранить данные. У меня всё в папке /u01/seafile, путь по умолчанию будет /u01/seafile/seafile-data, меня это устраивает.
- 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.
- From which hosts could the mysql account be used? По умолчанию %.
- 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.
Готово.
Работаем под пользователем sf. Пробуем запустить seafile:
cd /u01/seafile/seafile-server-latest/
./seafile.sh start
Пробуем запустить seahub:
./seahub.sh start
При первом запуске нас попросят создать админа для seafile, укажите email и пароль.
Проверим, что сервисы seafile и seahub работают и используют порты 8000 и 8082:
netstat -plntu
Останавливаем сервисы:
./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
Содержимое конфигурационного файла:
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 /u01/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. Настраиваем ccnet.conf.
su - sf
cd /u01/seafile/conf/
vim ccnet.conf
Вносим изменения, указываем внешний URL нашего домашнего облака. Временное указываем локальный HTTP URL, потом отдельно будем менять на HTTPS, но позже:
SERVICE_URL = http://10.50.2.10:8000
Настраиваем gunicorn.conf:
vim gunicorn.conf
Вносим изменения:
bind = "0.0.0.0:8000"
Настраиваем seafile.conf:
vim seafile.conf
Вносим изменения:
[fileserver]
host = 0.0.0.0
port = 8082
[history]
keep_days = 30
Настраиваем seahub_settings.py:
vim seahub_settings.py
Вносим изменения:
# Устранение проблем с кодировкой UTF-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
ALLOWED_HOSTS = ['cloud.e.local','10.50.2.10']
ENABLE_WIKI = True
DISABLE_SYNC_WITH_ANY_FOLDER = True
ENABLE_REPO_HISTORY_SETTING = False
THUMBNAIL_ROOT = '/г01/seafile/seahub-data/thumbnail/thumb/'
TIME_ZONE = 'Europe/Moscow'
LANGUAGE_CODE = 'ru'
LANGUAGES = (
('en', 'English'),
('ru', 'Русский'),
)
SITE_NAME = 'Cloud'
Настройка автозапуска Seafile в качестве сервисов
Работаем под рутом. Создаём сервис seafile:
cd /etc/systemd/system/
vim seafile.service
Содержимое:
[Unit]
Description=Seafile
After=network.target
[Service]
Type=forking
ExecStart=/u01/seafile/seafile-server-latest/seafile.sh start
ExecStop=/u01/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=simple
ExecStart=/u01/seafile/seafile-server-latest/seahub.sh start
ExecStop=/u01/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
netstat -plntu
Проверяем
Заходим на сервер по IP адресу http://10.50.2.10