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 數據庫應該已經被你(或者其他人)提前創建。

如果安裝正確完成,你會看到下面這樣的輸出 (新版本可能會有所不同)

在這裏插入圖片描述

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更多信息請訪問:

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
發佈了51 篇原創文章 · 獲贊 75 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章