一、Seafile 概述
Seafile是一个开源、专业、可靠的云存储平台;解决文件集中存储、共享和跨平台访问等问题,由北京海文互知网络有限公司开发,发布于2012年10月;除了一般网盘所提供的云存储以及共享功能外,Seafile还提供消息通信、群组讨论等辅助功能,帮助更好的围绕文件展开协同工作。
1.1 主要功能
文件同步与共享
你可以创建不同的资料库来分类组织文件。可以在私人间或群组中共享这些资料库。每个资料库都可以选择性的在多台设备上同步。
在线协作
你可以在线编辑文件,对文件进行评论,在私人间或群组间展开讨论。事件通知、版本管理使得文件协作异常的方便和安全。 [1]
移动办公
移动客户端使得你可以在移动设备上查看最新改动、访问文件资料、进行群组讨论等等,方便的完成移动办公。
1.2 适用平台
Seafile服务器支持主流的Linux发行版,Windows服务器以及Raspberry Pi。
Seafile桌面客户端支持Windows, Linux以及MacOS。
Seafile移动客户端支持Android和IOS。 [1]
二、环境准备
2.1 安装依赖软件
pip3 install Pillow captcha jinja2 sqlalchemy psd-tools django-simple-captcha future
apt update
apt install memcached
apt install libmemcached-dev
apt install libmysqlclient-dev
pip3 install pylibmc django-pylibmc mysqlclient
2.2 安装MySQL
apt install mariadb-server
./mysql_secure_installation ##执行安装脚本,一路默认即可。
三、安装Seafile8.0.3
su
mkdir /opt/seafile
cd /opt/seafile
wget https://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_8.0.3_x86-64.tar.gz
tar -xzf seafile-server_8.0.3_x86-64.tar.gz
mkdir installed
mv seafile-server_8.0.3_x86-64.tar.gz installed/
cd seafile-server-8.0.3/
./setup-seafile-mysql.sh
提示安装完成后
四、配置Nginx
apt install nginx
vi /etc/nginx/sites-avaliable/seafile.conf
内容如下:
server {
listen 80;
server_name localhost;
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 /opt/seafile/seafile-server-latest/seahub;
}
}
后续在/etc/nginx/sites-enabled/目录下建立软链接至该文件
cd /etc/nginx/sites-enabled
rm default
ln -s ../sites-available/seafile.conf seafile.conf
systemctl restart nginx ##修改完成后重启nginx服务
五、设置seafile开机启动
#!/bin/bash
path_base="/opt/seafile/seafile-server-latest"
path_seafile="${path_base}/seafile.sh"
path_seahub="${path_base}/seahub.sh"
echo "Seafile Starting..."
# TODO: Determine if the script exists
echo "$(date "+%Y-%m-%d %H:%M:%S"): Determine if the script exists."
if ! [ -f "${path_seafile}" ]
then
echo "$(date "+%Y-%m-%d %H:%M:%S"): Missing script main file: ${path_seafile}."
exit 1
fi
if ! [ -f "${path_seahub}" ]
then
echo "$(date "+%Y-%m-%d %H:%M:%S"): Missing script main file: ${path_seahub}."
exit 1
fi
echo "$(date "+%Y-%m-%d %H:%M:%S"): The script exists."
#cd "${path_base}"
# TODO: Stop all service.
cmd_seahub=`${path_seahub} stop`
if [[ $cmd_seahub =~ "Seahub is not running" ]]; then
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seahub server not running, Start it."
else
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seahub server is running, stop and restart it."
fi
cmd_seafile=`${path_seafile} stop`
if [[ $cmd_seafile =~ "seafile server not running yet" ]]; then
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seafile server not running, Start it."
else
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seafile server is running, stop and restart it."
fi
# TODO: Start seafile.
cmd_seafile=`${path_seafile} start`
echo $cmd_seafile
if [[ $cmd_seafile =~ "Seafile server started" ]]; then
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seafile server started."
else
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seafile server Startup failed, Exit."
exit 1
fi
# TODO: Start seahub.
cmd_seahub=`${path_seahub} start`
echo $cmd_seahub
if [[ $cmd_seahub =~ "Seahub is started" ]]; then
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seahub server started."
else
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seahub server Startup failed, Exit."
exit 1
fi
echo "$(date "+%Y-%m-%d %H:%M:%S"): All services started successfully."
# TODO: Cycling detection service.
echo "$(date "+%Y-%m-%d %H:%M:%S"): Cycling detection service."
while true
do
sleep 30s
cmd_seafile=`${path_seafile} start`
if ! [[ $cmd_seafile =~ "Seafile controller is already running" ]]; then
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seafile server err, Stop all services and exit."
${path_seahub} stop
${path_seafile} stop
exit 1
fi
cmd_seahub=`${path_seahub} start`
if ! [[ $cmd_seahub =~ "Seahub is already running" ]]; then
echo "$(date "+%Y-%m-%d %H:%M:%S"): Seahub server err, Stop all services and exit."
${path_seahub} stop
${path_seafile} stop
exit 1
fi
done
创建stop-seafile.sh
#!/bin/bash
path_base="/opt/seafile/seafile-server-latest"
path_seafile="${path_base}/seafile.sh"
path_seahub="${path_base}/seahub.sh"
${path_seahub} stop
${path_seafile} stop
创建seafile.service
[Unit]
Description=Seafile Service
After=network.target
[Service]
Restart=always
RestartSec=10
User=lfpara
WorkingDirectory=/opt/seafile/seafile-server-7.0.5/systemd/
ExecStart=/opt/seafile/seafile-server-7.0.5/systemd/start-seafile.sh
ExecStop=/bin/kill $MAINPID
ExecStopPost=/opt/seafile/seafile-server-7.0.5/systemd/stop-seafile.sh
[Install]
WantedBy=multi-user.target
cp seafile.service /usr/lib/systemd/system ##将seafile.service文件复制至系统文件
systemctl enable seafile.service ##设置seafile开机运行
systemctl start seafile.service ##启动seafile服务
systemctl stop seafile.service ##停止seafile服务
systemctl status seafile.service ##查看seafile运行状态