Ubuntu 18.04 LTS 安装部署 Seafile

背景

新入职的公司内部同步一些文件使用的 Seafile,没部署远程,只使用的内网,由于这个 seafile 是一个前同事搭建的(之前的 iOSer,我来替代他了,阴差阳错。。。),可能那时他也不是太熟吧,把文件存放目录放在了安装位置的挂载分区,导致长时间使用下来,该分区磁盘空间满了,无法继续运行,于是我简单 google 了一番,开始转移目录,找到了 seafile-data 目录之后,发现查看都没权限,包括 cp -Rmv 都无法运行,直接给了755权限,mv seafile-data 目录至新目录,更改 seafile.ini 文件,指向新目录,重启 seafile,发现 seafile 已经无法启动……下意识重启一下电脑,还是不行,这时看下禅道,测试又提了一堆 BUG,就先放下开始修 BUG 了。第二天早上过来继续,发现系统都进不去了,登录界面无法输入密码,没办法只好命令行登入系统,再次 google 了解到 seafile 存放文件的形式类似于 svngit ,也是那种打散存放并内部记录 state 和带有 commit log 的,看到了官方有修复工具,尝试无果,放弃了,系统也崩了(多年linux 经验解决不了,尝试了几个小时,google 了解到貌似是 Ubuntu 16.04 LTSbug 所致,有个旧内核依赖怎么都干不掉,导致所有的 dpkg -i 都运行不了),这台机器上安装了 jenkinsseafile,问过了别无其他,心想 jenkins 我也熟练部署了,只能硬着头皮去跟组长说要重装系统,于是有了这篇文章。

重装系统

下载 Ububtu 系统,选了最新的长期支持版本 18.04,UI 大改了,看了挺喜欢,安排下载。这步没啥说,随便拿了个5年前的捣鼓用的 4G U盘,在 mac 制作了一个 Ubuntu 的安装盘。从 U盘启动,安装系统。

安装 Seafile 服务器端

更新下系统

apt-get update 
apt-get upgrade

安装 python 2.7 及其它依赖

由于 seafile 使用的 py 2.7,但 Ubuntu 默认集成的是 3+ 版本,所以要安装。

apt-get install python
apt-get install python2.7 libpython2.7 python-setuptools python-pil python-ldap python-urllib3 ffmpeg python-pip python-mysqldb python-memcache
pip install pillow moviepy

安装 Mariadb

sudo apt install mariadb-server

开始安装 seafile

下载 Seafile 服务器端程序

Seafile官方下载地址 复制 服务器端 -> Linux 服务器端 -> 64bit 链接,比如现在最新的是 http://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_6.2.5_x86-64.tar.gz,目录的话建议安装到 /opt 下面,但是数据目录使用磁盘空间比较大的地方,比如我这边是是安装位置和数据目录都放在了 /home/data/seafile 下,过程如下:

cd /home
mkdir -p data/seafile && cd data/seafile
wget http://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_6.2.5_x86-64.tar.gz
tar -xzf seafile-server_*
mkdir installed && mv seafile-server_6.2.5_x86-64.tar.gz installed

安装 seafile 服务端

因为依赖环境和数据库都已经安装好了,这边我是使用的 Mariadb,所以用的是 seafile 写好的 setup-seafile-mysql.sh 脚本进行 setup,中间会提示你输入 seafile-data 数据存放目录,记得输入你指定的目录,比如我这里应该填/home/data/seafile/seafile-data,当然如果你已经在/home/data/seafile/seafile-server-6.2.5则直接 Enter 默认即可,它会自动去上层目录创建seafile-data目录。

cd seafile-server-6.2.5
sudo ./setup-seafile-mysql.sh

一路按引导完成,根据提示,输入服务器名、IP、数据目录(默认为../seafile-data)、seahub 端口、seafile-server监听端口(默认8082,不可更改),ifconfig 查看自己内网 ip,查完成之后确认设置,目录会变成如下:

vanjay@VanJay:/home/data$ sudo tree -L 3
.
└── seafile
    ├── ccnet
    │   ├── ccnet.sock
    │   ├── misc
    │   ├── mykey.peer
    │   └── seafile.ini
    ├── conf
    │   ├── ccnet.conf
    │   ├── seafdav.conf
    │   ├── seafile.conf
    │   ├── seahub_settings.py
    │   └── seahub_settings.pyc
    ├── installed
    │   └── seafile-server_6.2.5_x86-64.tar.gz
    ├── logs
    │   ├── ccnet.log
    │   ├── controller.log
    │   ├── seafile.log
    │   ├── seahub.log
    │   └── seahub_django_request.log
    ├── pids
    │   ├── ccnet.pid
    │   └── seaf-server.pid
    ├── seafile-data
    │   ├── commits
    │   ├── fs
    │   ├── httptemp
    │   ├── library-template
    │   ├── storage
    │   └── tmpfiles
    ├── seafile-server-6.2.5
    │   ├── check_init_admin.py
    │   ├── reset-admin.sh
    │   ├── runtime
    │   ├── seaf-fsck.sh
    │   ├── seaf-fuse.sh
    │   ├── seaf-gc.sh
    │   ├── seafile
    │   ├── seafile.sh
    │   ├── seahub
    │   ├── seahub.sh
    │   ├── setup-seafile-mysql.py
    │   ├── setup-seafile-mysql.sh
    │   ├── setup-seafile.sh
    │   └── upgrade
    ├── seafile-server-latest -> seafile-server-6.2.5
    └── seahub-data
        └── avatars

22 directories, 26 files

启动/停止 Seafile

启动Seafile-serverSeahub,第一次启动会提示建立管理员账号。

./seafile.sh start
./seahub.sh start <端口号>

此时通过浏览器本地访问 localhost:端口号,应该可以出现登录页面。如果出现网页乱码,可以删除/tmp/seahub_cache再重启seahub,即可恢复正常。

常用命令:

关闭

./seahub.sh stop # 停止 Seahub
./seafile.sh stop # 停止 Seafile 进程

重启

./seafile.sh restart # 停止当前的 Seafile 进程,然后重启 Seafile
./seahub.sh restart  # 停止当前的 Seahub 进程,并在 8000 端口重新启动 Seahub

使用 pgrep 命令检查 seafile/seahub 进程是否还在运行中

pgrep -f seafile-controller # 查看 Seafile 进程
pgrep -f "seahub" # 查看 Seahub 进程

使用 pkill 命令杀掉相关进程

pkill -f seafile-controller # 结束 Seafile 进程
pkill -f "seahub" # 结束 Seafile 进程

配置防火墙

本地可以访问了,但从外部访问就不行了,需要配置下防火墙,当然你也直接关闭防火墙。

开关防火墙

ufw disable # 关闭
ufw enable # 开启

也可添加端口,端口8082,必须添加,这是 seafile-file 端口,不可更改。8000为 seahub 默认监听端口,如果自定义 seahub 监听端口,这里记得添加。

firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --permanent --add-port=8082/tcp
firewall-cmd --permanent --add-service http
firewall-cmd --reload
firewall-cmd --list-all

安装 Ubuntu Seafile 客户端

开始使用吧。

sudo add-apt-repository ppa:seafile/seafile-client
sudo apt-get update
sudo apt-get install seafile-gui

添加执行用户和配置目录权限

useradd vanjay -s /sbin/nologin -d /home/data/seafile
chown -R vanjay:vanjay /home/data/seafile/
chown -R vanjay:vanjay /tmp/seahub_cache/

配置开机自启动 Seafile

对于运行 systemd 的系统(例如 Debian 8 以及更新的版本,Ubuntu 15.04以及更新的版本),创建 systemd 服务管理文件(注意自行更改 User 、Group 和Seafile 路径)

  • 创建 seafile service
sudo vim /etc/systemd/system/seafile.service

注意!注意!注意! 这里有个大坑,花了我一个晚上去解决!
由于官方提供了开机启动 service 脚本,一般都是直接拿来用,改改路径用户名就好,但是!我在 Ubuntu 18.04 开机启动 seafile 上花了整整一个晚上!,systemctl status seafile查看服务状态,由于 seafile 启动依赖数据库,所以需要先等待数据库服务启动完毕再启动,我这安装的是 mariadb ,所以要在 After 后面加上 mariadb.service,重启正常自启了,阿弥陀佛!

[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target mariadb.service

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

[Install]
WantedBy=multi-user.target
  • 创建 seahub service
sudo vim /etc/systemd/system/seahub.service

输入如下内容,用户、用户组、路径改为自己的 seafile 路径。

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/home/data/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/data/seafile/seafile-server-latest/seahub.sh stop
User=vanjay
Group=vanjay
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

设置服务开机自启动

sudo systemctl daemon-reload
sudo systemctl enable seafile
sudo systemctl enable seahub

配置邮件通知服务

编辑你 seafile 目录下的 conf/seahub_settings.py文件,比如我这里应该 vim /home/data/seafile/conf/seahub_settings.py,加入如下内容,我只尝试了阿里企业邮箱和 qq 邮箱,仅供参考,EMAIL_HOST 填写发送邮件服务器,EMAIL_PORT 填写发送邮件服务器端口,改完重启 seafile 生效。

QQ 邮箱,EMAIL_HOST_PASSWORD 是授权码,去 qq 邮箱设置获取。

EMAIL_USE_SSL = True
EMAIL_HOST = 'smtp.qq.com'
EMAIL_HOST_USER = 'your_qq_number@qq.com'
EMAIL_HOST_PASSWORD = 'your_auth_code'
EMAIL_PORT = '465'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

阿里企业邮箱,EMAIL_HOST_PASSWORD 是邮箱密码。

EMAIL_USE_SSL = False
EMAIL_HOST = 'smtp.mxhichina.com'
EMAIL_HOST_USER = 'username@xxx.com'
EMAIL_HOST_PASSWORD = 'your_password'
EMAIL_PORT = '25'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

致谢

参考链接:

Seafile 中文文档

搭建一个属于自己的Seafile网盘