Linux环境下Seafile服务部署及自启动配置

1、部署 Seafile 服务器(使用 MySQL)

【参考链接】官方教程部署 Seafile 服务器(使用 MySQL),博主在官方教程的基础上,添加了启动、停止脚本以及自启动service文件,如果已经按照官方教程配置完成,需要配置Seafile的自启动,可以直接跳转到2、配置Seafile自启动章节。

部署 Seafile 服务器(使用 MySQL/MariaDB)

本文档用来说明通过预编译好的安装包来安装并运行基于 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 相关的配置文件都可以放在 haiwen 目录下,便于集中管理.
  • 后续升级时,你只需要解压最新的安装包到 haiwen 目录下.

安装 Seafile 服务器

安装前的准备工作

安装 Seafile 服务器之前,请确认已安装以下软件

  • MariaDB 或者 MySQL 服务器 (MariaDB 是 MySQL 的分支)
  • python 2.7 (从 Seafile 5.1 开始,python 版本最低要求为2.7)
  • python-setuptools
  • python-imaging
  • python-mysqldb
  • python-ldap
  • python-urllib3
  • python-memcache (或者 python-memcached)
# 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 数据库应该已经被你(或者其他人)提前创建。

如果安装正确完成,你会看到下面这样的输出 (新版本可能会有所不同)

Linux环境下Seafile服务部署及自启动配置_第1张图片

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 服务器

启动 Seafile 服务器和 Seahub 网站

在 seafile-server-1.8.2 目录下,运行如下命令

  • 启动 Seafile:
./seafile.sh start # 启动 Seafile 服务
  • 启动 Seahub
./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端口上)
    

关闭/重启 Seafile 和 Seahub

关闭

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

重启

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

如果停止/重启的脚本运行失败

大多数情况下 seafile.sh seahub.sh 脚本可以正常工作。如果遇到问题:

  • 使用pgrep命令检查 seafile/seahub 进程是否还在运行中
pgrep -f seafile-controller # 查看 Seafile 进程
pgrep -f "seahub" # 查看 Seahub 进程
  • 使用pkill命令杀掉相关进程
pkill -f seafile-controller # 结束 Seafile 进程
pkill -f "seahub" # 结束 Seafile 进程

OK!

查看seafile更多信息请访问:

  • Nginx 下配置 Seahub / Apache 下配置 Seahub
  • Nginx 下启用 Https / Apache 下启用 Https
  • Seafile LDAP配置
  • [管理员手册

2、配置 Seafile 自启动

进入seafile-server-*文件夹,创建systemd文件夹并进入:

sudo mkdir systemd
cd systemd

创建seafile启动脚本:

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

创建seafile停止脚本:

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

创建seafile.service文件

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)表示启动成功。

2、用Docker部署 Seafile 服务

【相关链接】用Docker部署 Seafile 服务

关于

  • Docker 是一个可以打包应用以及依赖包到一个可移植的容器中,以更轻量的方式运行Linux应用程序, 这比传统的虚拟机要更快.
  • Docker 可以让您在服务器上更轻松的部署以及更新 Seafile服务.
  • 在镜像中会使用 Seafile 团队推荐的配置作为默认配置.

如果您并不熟悉 Docker 的命令,请参考docker文档.

注意:本文档仅包含了在 docker 下部署 Seafile 开源版的方法,如果您想要在 docker 下部署 Seafile 专业版,请参考用 Docker 部署 Seafile-Pro 服务

部署 Seafile 7.x.x

从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 6.x.x

快速开始

运行 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

如果您忘记了管理员密码,你可以添加一个新的管理员账号,然后通过这个新的管理员账号重置之前的管理员密码.

向Let’s encrypt申请SSL证书

如果您设置SEAFILE_SERVER_LETSENCRYPTtrue, 那么容器会自动根据设置的主机名向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 服务的配置

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

共享卷的挂载点,您可以选择在容器外部存储某些持久性信息.在这个项目中,我们会在外部保存各种日志文件和上传目录。 这使您可以轻松重建容器而不会丢失重要信息。

  • /shared/db: mysql服务的数据目录
  • /shared/seafile: Seafile 服务的配置文件以及数据文件
  • /shared/logs: 日志目录
    • /shared/logs/var-log: 我们将容器内的/var/log挂载到本目录.您可以在shared/logs/var-log/nginx/中找到nginx的日志文件
    • /shared/logs/seafile: Seafile 服务运行产生的日志文件目录.比如您可以在 shared/logs/seafile/seafile.log文件中看到seaf-server的日志
  • /shared/ssl: 存放证书的目录,默认不存在

升级 Seafile 服务

如果您计划从 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

你可能感兴趣的:(Linux项目实践)