【参考链接】官方教程部署 Seafile 服务器(使用 MySQL),博主在官方教程的基础上,添加了启动、停止脚本以及自启动service文件,如果已经按照官方教程配置完成,需要配置Seafile的自启动,可以直接跳转到2、配置Seafile自启动章节。
本文档用来说明通过预编译好的安装包来安装并运行基于 MySQL/MariaDB 的 Seafile 服务器。(MariaDB 是 MySQL 的分支)
到下载页面下载最新的服务器安装包.
假设你公司的名称为 haiwen, 你也已经下载 seafile-server_1.4.0_* 到你的 home 目录下。 我们建议这样的目录结构:
mkdir haiwen
mv seafile-server_* haiwen
cd haiwen
#将 seafile-server_* 移动到 haiwen 目录下后
tar -xzf seafile-server_*
mkdir installed
mv seafile-server_* installed
现在,你的目录看起来应该像这样:
#tree haiwen -L 2
haiwen
├── installed
│ └── seafile-server_1.8.2_x86-64.tar.gz
└── seafile-server-1.8.2
├── reset-admin.sh
├── runtime
├── seafile
├── seafile.sh
├── seahub
├── seahub.sh
├── setup-seafile.sh
└── upgrade
这样设计目录的好处在于
安装 Seafile 服务器之前,请确认已安装以下软件
# on Debian/Ubuntu 14.04 server
apt-get update
apt-get install python2.7 libpython2.7 python-setuptools python-imaging \ python-ldap python-mysqldb python-memcache python-urllib3
# on Ubuntu 16.04 server
# As the default python binary on Ubuntu 16.04 server is python 3, we need to install python (python 2) first.
apt-get update
apt-get install python
apt-get install python2.7 libpython2.7 python-setuptools python-imaging python-ldap python-urllib3 ffmpeg python-pip python-mysqldb python-memcache
pip install pillow moviepy
# on CentOS 7
yum -y install epel-release
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
yum -y install python-imaging MySQL-python python-memcached python-ldap python-urllib3 ffmpeg ffmpeg-devel
pip install pillow moviepy
cd seafile-server-*
./setup-seafile-mysql.sh #运行安装脚本并回答预设问题
如果你的系统中没有安装上面的某个软件,那么 Seafile初始化脚本会提醒你安装相应的软件包.
该脚本会依次询问你一些问题,从而一步步引导你配置 Seafile 的各项参数:
参数 | 作用 | 说明 |
---|---|---|
seafile server name | seafile 服务器的名字,目前该配置已经不再使用 | 3 ~ 15 个字符,可以用英文字母,数字,下划线 |
seafile server ip or domain | seafile 服务器的 IP 地址或者域名 | 客户端将通过这个 IP 或者地址来访问你的 Seafile 服务 |
seafile data dir | seafile 数据存放的目录,用上面的例子,默认将是 /data/haiwen/seafile-data | seafile 数据将随着使用而逐渐增加,请把它放在一个有足够大空闲空间的分区上 |
seafile fileserver port | seafile fileserver 使用的 TCP 端口 | 该端口用于文件同步,请使用默认的 8082,不能更改。 |
在这里, 你会被要求选择一种创建 Seafile 数据库的方式:
Please choose a way to initialize seafile databases:
-------------------------------------------------------
[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases
1
, 你需要提供根密码. 脚本程序会创建数据库和用户。2
, ccnet/seafile/seahub 数据库应该已经被你(或者其他人)提前创建。如果安装正确完成,你会看到下面这样的输出 (新版本可能会有所不同)
server-setup-succesfully
现在你的目录结构看起来应该是这样:
#tree haiwen -L 2
haiwen
├── conf # configuration files
│ ├── ccnet.conf
│ └── seafile.conf
│ └── seahub_settings.py
│ └── seafdav.conf
├── ccnet
│ ├── mykey.peer
│ ├── PeerMgr
│ └── seafile.ini
├── installed
│ └── seafile-server_1.8.2_x86-64.tar.gz
├── seafile-data
├── seafile-server-1.8.2 # active version
│ ├── reset-admin.sh
│ ├── runtime
│ ├── seafile
│ ├── seafile.sh
│ ├── seahub
│ ├── seahub.sh
│ ├── setup-seafile.sh
│ └── upgrade
├── seafile-server-latest # symbolic link to seafile-server-1.8.2
├── seahub-data
│ └── avatars
seafile-server-latest
文件夹为指向当前 Seafile 服务器文件夹的符号链接. 将来你升级到新版本后, 升级脚本会自动更新使其始终指向最新的 Seafile 服务器文件夹.
在 seafile-server-1.8.2 目录下,运行如下命令
./seafile.sh start # 启动 Seafile 服务
./seahub.sh start <port> # 启动 Seahub 网站 (默认运行在8000端口上)
小贴士: 你第一次启动 seahub 时,seahub.sh
脚本会提示你创建一个 seafile 管理员帐号。
服务启动后, 打开浏览器并输入以下地址
http://192.168.1.111:8000/
你会被重定向到登陆页面. 输入管理员用户名和密码即可。
恭喜! 现在你已经成功的安装了 Seafile 服务器.
在另一端口上运行 Seahub
如果你不想在默认的 8000 端口上运行 Seahub, 而是想自定义端口(比如8001)中运行,请按以下步骤操作:
6.2.x 及其之前版本
关闭 Seafile 服务器
./seahub.sh stop # 停止 Seafile 进程
./seafile.sh stop # 停止 Seahub
更改haiwen/conf/ccnet.conf
文件中SERVICE_URL
的值(假设你的 ip 或者域名时192.168.1.100
), 如下 (从 5.0 版本开始,可以直接在管理员界面中设置。注意,如果同时在 Web 界面和配置文件中设置了这个值,以 Web 界面的配置为准。):
SERVICE_URL = http://192.168.1.100:8001
重启 Seafile 服务器
./seafile.sh start # 启动 Seafile 服务
./seahub.sh start 8001 # 启动 Seahub 网站 (运行在8001端口上)
6.3.x 及其以上版本
6.3.0 及其之后的版本,我们弃用了 ./seahub.sh start
的方式使seahub进程监听在其他端口。但是,您可以通过修改 conf/gunicorn.conf
中的端口设置来指定seahub启动端口。
关闭 Seafile 服务器
./seahub.sh stop # 停止 Seafile 进程
./seafile.sh stop # 停止 Seahub
更改haiwen/conf/ccnet.conf
文件中SERVICE_URL
的值(假设你的 ip 或者域名时192.168.1.100
), 如下 (从 5.0 版本开始,可以直接在管理员界面中设置。注意,如果同时在 Web 界面和配置文件中设置了这个值,以 Web 界面的配置为准。):
SERVICE_URL = http://192.168.1.100:8001
修改conf/gunicorn.conf
# default localhost:8000
bind = "0.0.0.0:8001"
重启 Seafile 服务器
./seafile.sh start # 启动 Seafile 服务
./seahub.sh start # 启动 Seahub 网站 (运行在8001端口上)
关闭
./seahub.sh stop # 停止 Seahub./seafile.sh stop # 停止 Seafile 进程
重启
./seafile.sh restart # 停止当前的 Seafile 进程,然后重启 Seafile
./seahub.sh restart # 停止当前的 Seahub 进程,并在 8000 端口重新启动 Seahub
如果停止/重启的脚本运行失败
大多数情况下 seafile.sh seahub.sh 脚本可以正常工作。如果遇到问题:
pgrep -f seafile-controller # 查看 Seafile 进程
pgrep -f "seahub" # 查看 Seahub 进程
pkill -f seafile-controller # 结束 Seafile 进程
pkill -f "seahub" # 结束 Seafile 进程
OK!
查看seafile更多信息请访问:
进入seafile-server-*
文件夹,创建systemd
文件夹并进入:
sudo mkdir systemd
cd systemd
sudo nano start-seafile.sh
内容如下:
【注意】需要根据实际情况修改path_base
目录,博主的seafile.sh
文件目录为/mnt/raid/seafile/seafile-server-latest
#!/bin/bash
path_base="/mnt/raid/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
sudo nano stop-seafile.sh
内容如下:
【注意】同上
#!/bin/bash
path_base="/mnt/raid/seafile/seafile-server-latest"
path_seafile="${path_base}/seafile.sh"
path_seahub="${path_base}/seahub.sh"
${path_seahub} stop
${path_seafile} stop
sudo nano seafile.service
内容如下:
[Unit]
Description=Seafile Service
After=network.target
[Service]
Restart=always
RestartSec=10
User=sworld
WorkingDirectory=/mnt/raid/seafile/seafile-server-7.0.5/systemd/
ExecStart=/mnt/raid/seafile/seafile-server-7.0.5/systemd/start-seafile.sh
ExecStop=/bin/kill $MAINPID
ExecStopPost=/mnt/raid/seafile/seafile-server-7.0.5/systemd/stop-seafile.sh
[Install]
WantedBy=multi-user.target
需要根据实际情况修改一下项:
User:服务执行用户,博主在此处踩坑,seafile不能使用root用户执行,需要改为root之外的其他用户;
WorkingDirectory:脚本所在目录,该字段好像没有什么用,具体没有测试,最好修改为工作目录;
ExecStart:seafile启动命令;
ExecStop:seafile停止命令;
ExecStopPost:执行ExecStop后执行的命令,在该服务中,先杀死启动脚本,然后执行seafile停止。
服务文件已经创建完成,接下来是部署,进入上述三个文件的文件夹。
复制service文件:
sudo cp seafile.service /usr/lib/systemd/system/
启动服务:
sudo systemctl enable seafile.service
sudo systemctl start seafile.service
查看服务状态:
sudo systemctl status seafile.service
执行结果的Active
为绿色的active (running)
表示启动成功。
【相关链接】用Docker部署 Seafile 服务
如果您并不熟悉 Docker 的命令,请参考docker文档.
注意:本文档仅包含了在 docker 下部署 Seafile 开源版的方法,如果您想要在 docker 下部署 Seafile 专业版,请参考用 Docker 部署 Seafile-Pro 服务
从7.0开始,我们调整了seafile-docker 镜像的架构,使用多个容器来运行 Seafile 服务。旧版本的镜像中,除了运行 Seafile 服务本身之外,还负责运行 MariaDB-Server 和 Memcached。现在,我们从 Seafile 镜像中剥离出 MariaDB-Server 和 Memcached 服务,并在各自的容器中运行它们。
如果您计划使用 docker 全新部署 Seafile 7.0,请参考部署文档。
如果您计划从 6.3 升级到 7.0,则可以参考[升级文档](https://docs.seafile.com/published/seafile-manual-cn/docker/6.3 升级到 7.0.md)。
运行 Seafile 服务容器:
docker run -d --name seafile \ -e SEAFILE_SERVER_HOSTNAME=seafile.example.com \ -v /opt/seafile-data:/shared \ -p 80:80 \ seafileltd/seafile:latest
第一次运行会进行初始化,等待几分钟然后通过访问http://seafile.example.com
查看 Seafile 的Web界面.
这条命令会将宿主机上的/opt/seafile-data
目录挂载到 Seafile 容器中,你可以在这里找到日志或其他的数据文件.
默认的管理员账号以及密码分别为[email protected]
,asecret
.你可以通过设置容器的环境变量来改变初始化时生成的管理员的账号和密码.
例如:
docker run -d --name seafile \ -e SEAFILE_SERVER_HOSTNAME=seafile.example.com \ -e [email protected] \ -e SEAFILE_ADMIN_PASSWORD=a_very_secret_password \ -v /opt/seafile-data:/shared \ -p 80:80 \ seafileltd/seafile:latest
如果您忘记了管理员密码,你可以添加一个新的管理员账号,然后通过这个新的管理员账号重置之前的管理员密码.
如果您设置SEAFILE_SERVER_LETSENCRYPT
为true
, 那么容器会自动根据设置的主机名向Let’s encrypt申请SSL证书
例如:
docker run -d --name seafile \ -e SEAFILE_SERVER_LETSENCRYPT=true \ -e SEAFILE_SERVER_HOSTNAME=seafile.example.com \ -e [email protected] \ -e SEAFILE_ADMIN_PASSWORD=a_very_secret_password \ -v /opt/seafile-data:/shared \ -p 80:80 \ -p 443:443 \ seafileltd/seafile:latest
如果你想使用已经拥有的SSL证书:
/opt/seafile-data/ssl
目录, 并将你的证书以及私钥放入这个目录中.seafile.example.com
, 那么您的证书名称必须为seafile.example.com.crt
,而且您的私钥名称必须为seafile.example.com.key
Seafile 服务的配置会存放在/shared/seafile/conf
目录下,你可以根据 Seafile 手册修改配置
修改之后需要重启容器.
docker restart seafile
Seafile 服务的日志会存放在/shared/logs/seafile
目录下, 由于是将/opt/seafile-data
挂载到/shared
,所以同样可以在宿主机上的/opt/seafile-data/logs/seafile
目录下找到.
系统日志会存放在/shared/logs/var-log
目录下.
确保您的容器正在运行,然后输入以下命令:
docker exec -it seafile /opt/seafile/seafile-server-latest/reset-admin.sh
然后根据提示输入用户名以及密码即可
/shared
共享卷的挂载点,您可以选择在容器外部存储某些持久性信息.在这个项目中,我们会在外部保存各种日志文件和上传目录。 这使您可以轻松重建容器而不会丢失重要信息。
/var/log
挂载到本目录.您可以在shared/logs/var-log/nginx/
中找到nginx的日志文件shared/logs/seafile/seafile.log
文件中看到seaf-server的日志如果您计划从 6.3 升级到 7.0,请参考[升级文档](https://docs.seafile.com/published/seafile-manual-cn/docker/6.3 升级到 7.0.md)。
如果您计划升级到 Seafile 6.3 系列的最新版本:
docker pull seafileltd/seafile:latestdocker rm -f seafiledocker run -d --name seafile \ -e SEAFILE_SERVER_LETSENCRYPT=true \ -e SEAFILE_SERVER_HOSTNAME=seafile.example.com \ -e [email protected] \ -e SEAFILE_ADMIN_PASSWORD=a_very_secret_password \ -v /opt/seafile-data:/shared \ -p 80:80 \ -p 443:443 \ seafileltd/seafile:latest
如果您是使用launcher
脚本的最先一批用户,您应该参考从旧的结构升级.
在 seafile 中,当文件被删除时,组成这些文件的块数据不会立即删除,因为可能有其他文件也会引用这些块数据(用于去重功能的实现)。为了真正删除无用的块数据,还需要额外运行"GC"程序。GC 会自动检测到哪些数据块不再被任何文件所引用,并清除它们。
GC 脚本被放在docker容器的 /scripts
目录下。执行 GC 的方法很简单:docker exec seafile /scripts/gc.sh
。对于社区版来说,该程序会暂停 Seafile 服务,但这是一个相对较快的程序,一旦程序运行完成,Seafile 服务也会自动重新启动。而专业版提供了在线运行 GC 的功能,不会暂停 Seafile 服务。
如果你运行的过程中碰到问题,可以运行"docker exec"等docker命令来寻找更多的错误信息.
docker exec -it seafile /bin/bash