三年前, 我以一個伺服器新人使用者的身分寫下了關於 Seafile 的兩篇文章文章《在 CentOS 7 下安装 Seafile 社区版》和《CentOS 7 与 MySQL 5.7 下搭建 Seafile 企业版》. 直到今天, Jonny'Blog 的訪問量中, 這幾篇關於私有雲的文章仍然佔有一些點擊率, 儘管它們已經不是最新的文章了. 在 CentOS 8 和 MySQL 8 已經發布的情況下, 我覺得有必要對文章進行更新
Seafile 專業版是面向個人、小型團隊和家庭的私有雲, 三個人以下的使用是免費的. 如果多於三個人使用則需要付費, 由於它的功能比社區版要多太多, 因此社區版的我不再另外撰寫教學
我們首先進入英文版的 Seafile 下載網站 https://www.seafile.com/en/download/, 中文版是找不到專業版這個版本的
然後把頁面拉到最下面找到

點擊 customer center
. 如果你沒有帳號, 那麼需要註冊一個賬號. 註冊完畢或者已經持有帳號的話, 直接登陸就可以了
點擊最左側的 Downloads
然後右側有一個藍色的下載鏈接 https://download.seafile.com/d/你自己的編號/?p=/pro
中間的編號每個人都是不一樣的, 這個和社區版的下載是不同的
進入這個網頁之後, 我們可以看到 Seafile 的演示版本, 拉到最下面. 截止發文為止, 最新版本為

這裡要注意的是, 從 Seafile 7.1 開始, Seafile 已經更改使用 Python 3 了, 因此依賴的套件會有些不同
由於我們是在 CentOS 下進行配置, 因此我們下載 CentOS 的版本. 這裡有兩種方法, 一種是下載到本機然後上載到伺服器, 另外一種是通過伺服器直接下載. 我們首先進入專門放置網站的檔案夾, 為 Seafile 創建一個專門的檔案夾
cd /www
mkdir seafile && cd seafile
然後下載
wget https://download.seafile.com/seafhttp/files/你的編號/seafile-pro-server_7.1.9_x86-64_CentOS.tar.gz
這個通過下載工具的查詢下載地址功能可以直接獲得
這裡要特別注意, Seafile 建議伺服器的記憶體至少有 2GB 的大小
直接解壓縮
tar -zxvf seafile-pro-server_7.1.9_x86-64_CentOS.tar.gz
上面的指令帶有版本號 7.1.9, 因此需要根據你下載的版本對指令進行修改. 後面所有帶有版本號的指令和這裡一樣需要進行修改

解壓縮之後, 我們得到了 seafile-pro-server-版本號
這個檔案夾, 進入這個檔案夾
cd seafile-pro-server-7.1.9
使用 ll
指令可以看到 Seafile 檔案夾的基本架構

在正式安裝之前, 我們需要安裝以來的套件 :
dnf install -y python3 python3-setuptools python3-pip poppler-utils java-1.8.0-openjdk
pip3 install Pillow pylibmc captcha jinja2 sqlalchemy django-pylibmc django-simple-captcha python3-ldap boto
然後就可以執行執行指令碼了 :

這個指令碼首先會檢查所有依賴的套件是否已經安裝, 如果沒有問題, 那麼就會出現上述界面. 如果沒有問題, 直接按 ENTER
鍵進入安裝流程

這裡是詢問伺服器的名稱

這裡可以填寫繫結到伺服器的網域名稱或者 IP 地址

這裡是詢問是否使用預設的 8082
連接埠, 如果沒有特殊需求, 那麼直接按 ENTER
鍵確認

這一步是詢問是否為 Seafile 創建新的資料庫, 如果你自己已經創建, 而不是用指令碼的創建方式, 那麼需要輸入 2
, 然後按照對應步驟輸入信息即可. 對於新手來說, 建議跟隨本文章給出的步驟, 輸入 1

這裡是詢問 MySQL 的伺服器, 我們把 MySQL 已經安裝在本機上, 所以直接按 ENTER
鍵確認即可

這裡是詢問 MySQL 的連接埠, 如果你按照本網誌之前給出的方式安裝的 MySQL, 那麼直接按 ENTER
鍵確認即可

這裡是詢問 root
帳戶的密碼

安裝指令碼將為 Seafile 創建一個獨立的帳戶, 預設的名稱為 seafile
, 我們直接按 ENTER
鍵確認

這裡要求輸入 seafile
帳戶的密碼, 不建議和 root
帳戶相同. 需要注意的是, 密碼中不要包含 "%
" 字元, 這會導致錯誤



這幾步都是詢問和 Seafile 有關的資料庫名稱, 直接按 ENTER
鍵確認即可, 沒有必要進行修改

如上圖所示的話, 那麼就說明安裝成功
接下來, 我們在 Nginx 下啟用 Seafile. 首先需要創建 Seafile 的配置文件 :
vim /etc/nginx/conf.d/seafile.conf
將以下內容修改之後複製到這個配置檔案中
server {
listen 80;
server_name 你的網域名稱;
rewrite ^ https://$http_host$request_uri? permanent;
server_tokens off;
}
server {
listen 443 ssl http2;
server_name 你的網域名稱;
ssl_certificate /SSL .crt 證書所在位置;
ssl_certificate_key /SSL .key 證書所在位置;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
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_set_header X-Forwarded-Proto https;
proxy_read_timeout 1200s;
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
proxy_request_buffering off;
}
location /media {
root /Seafile 所在檔案夾/seafile-server-latest/seahub;
}
}
請注意, 上述配置預設開啟了 SSL, 本網誌將棄用不使用 SSL 的連線方式. 對於 SSL 開啟的具體教學, 參考文章《Nginx 下实现 HTTPS》. 接下來使用 nginx -t
指令測試一下是否存在問題, 如圖所示的話, 就沒有問題. 否則, 你需要根據 Nginx 給出的提示, 進行修改

重新載入 Nginx 的配置檔案 :
systemctl reload nginx
在進行接下來的配置之前, 我們首先啟動 Seafile 來試一下. 回到 Seafile 所在檔案夾 :
cd /www/seafile/seafile-pro-server-7.1.9
./seafile.sh start
./seahub.sh start
在第一次啟動 Seahub 的時候, 會讓你創建一個管理員帳戶, 根據提示輸入郵箱、密碼和確認密碼即可

如果出現這種情況, 請檢查一下
location /media {
root /Seafile 所在檔案夾/seafile-server-latest/seahub;
}
Seafile 的 Nginx 配置檔案中, 這裡的路徑是不是寫錯了
現在已經可以正常使用了, 接下來是進階教學
1. 開機啟動
創建 Seafile 服務檔案 :
vim /etc/systemd/system/seafile.service
將下列內容修改後複製入檔案中
[Unit]
Description=Seafile
After=network.target
[Service]
Type=oneshot
ExecStart=/Seafile 所在檔案夾/seafile-server-latest/seafile.sh start
ExecStop=/Seafile 所在檔案夾/seafile-server-latest/seafile.sh stop
RemainAfterExit=yes
User=seafile
Group=seafile
[Install]
WantedBy=multi-user.target
創建 Seahub 服務檔案 :
vim /etc/systemd/system/seahub.service
將下列內容修改後複製入檔案中
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
ExecStart=/Seafile 所在檔案夾/seafile-server-latest/seahub.sh start
ExecStop=/Seafile 所在檔案夾/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
重新載入 systemd 設定檔
systemctl daemon-reload
然後就可以使用 systemd
指令啟動 Seafile 了
systemctl start seafile
systemctl start seahub
接著我們設定開機啟動
systemctl enable seafile
systemctl enable seahub
2. 設定 logrotate
這個功能允許你在剪切日誌檔案的時候無需關閉 Seafile
vim /etc/logrotate.d/seafile
將下列內容修改後複製入檔案即可
/opt/seafile/logs/seafile.log
{
daily
missingok
rotate 15
compress
delaycompress
notifempty
sharedscripts
postrotate
[ ! -f /home/haiwen/pids/seaf-server.pid ] || kill -USR1 `cat /Seafile 所在檔案夾/pids/seaf-server.pid`
endscript
}
/opt/seafile/logs/ccnet.log
{
daily
missingok
rotate 15
compress
delaycompress
notifempty
sharedscripts
postrotate
[ ! -f /home/haiwen/pids/ccnet.pid ] || kill -USR1 `cat /Seafile 所在檔案夾/pids/ccnet.pid`
endscript
}
/opt/seafile/logs/index.log
{
daily
missingok
rotate 15
compress
delaycompress
notifempty
sharedscripts
}
3. 配置 Memcached
Memcached 在多人使用的情況下 (特別是超過 50 人的情況下), 可以提高效能
dnf install -y memcached libmemcached
pip3 install pylibmc django-pylibmc
systemctl enable --now memcached
然後將以下內容加入到 /Seafile 所在檔案夾/conf/seahub_settings.py
中
CACHES = {
'default': {
'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
},
'locmem': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
},
}
COMPRESS_CACHE_BACKEND = 'locmem'
4. 全文搜尋
Seafile 7 中, 全文搜尋和 PDF、Office 搜尋預設是開啟的
5. 斷點傳續
把 ENABLE_RESUMABLE_FILEUPLOAD = True
添加到 /Seafile 所在檔案夾/conf/seahub_settings.py
中
6. 用戶角色和管理員角色設定
下面是普通用戶角色的設定說明
can_add_repo # 允許創建資料庫 can_add_group # 允許創建群組 can_view_org # 允許閱覽組織 can_add_public_repo # 允許創建全員可見的公共資料庫 can_use_global_address_book # 允許使用全域通訊錄 (比如共享時能搜索到其他的用戶) can_use_wiki # 允許使用維基百科 can_publish_repo # 允許公開發佈資料庫 can_generate_share_link # 允許創建共享外鏈 can_generate_upload_link # 允許創建上載外鏈 can_invite_guest # 允許邀請訪客, 訪客不能擁有自己的文件 can_connect_with_android_clients # 允許使用安卓客戶端登錄 can_connect_with_ios_clients # 允許使用 iOS 客戶端登錄 can_connect_with_desktop_clients # 允許使用桌面客戶端登錄
要添加一個新的角色, 只需要把以下內容按照你的要求作修改, 然後添加到 /Seafile 所在檔案夾/conf/seahub_settings.py
中即可
ENABLED_ROLE_PERMISSIONS = {
'角色名稱': {
'can_add_repo': True,
'can_add_group': True,
'can_view_org': True,
'can_add_public_repo': True,
'can_use_global_address_book': True,
'can_use_wiki': True,
'can_publish_repo': True,
'can_generate_share_link': True,
'can_generate_upload_link': True,
'can_invite_guest': True,
'can_connect_with_android_clients': True,
'can_connect_with_ios_clients': True,
'can_connect_with_desktop_clients': True,
},
}
Seafile 內建了四種管理員角色 :
default_admin
: 擁有所有權限system_admin
: 只能查看系統信息和系統配置daily_admin
: 只能查看系統信息、統計信息、用戶日誌以及管理資料庫/用戶/群組audit_admin
: 只能查看系統信息和管理員日誌
其對應的設定為
ENABLED_ADMIN_ROLE_PERMISSIONS = {
'system_admin': {
'can_view_system_info': True,
'can_config_system': True,
},
'daily_admin': {
'can_view_system_info': True,
'can_view_statistic': True,
'can_manage_library': True,
'can_manage_user': True,
'can_manage_group': True,
'can_view_user_log': True,
},
'audit_admin': {
'can_view_system_info': True,
'can_view_admin_log': True,
},
'custom_admin': {
'can_view_system_info': True,
'can_config_system': True,
'can_view_statistic': True,
'can_manage_library': True,
'can_manage_user': True,
'can_manage_group': True,
'can_view_user_log': True,
'can_view_admin_log': True,
},
}
可以看到, 上面不管是關於用戶還是關於管理員的設定全是 True
, 如果你需要關閉某些功能, 把 True
改為 False
即可
7. 多機構支援
Seafile 支援添加機構, 每個機構下都可以有管理員
我們需要在 /Seafile 所在檔案夾/conf/seahub_settings.py
中添加下列程式碼
MULTI_INSTITUTION = True
EXTRA_MIDDLEWARE_CLASSES = (
'seahub.institutions.middleware.InstitutionMiddleware',
)
8. 病毒掃描
個人使用的話, 不建議配置病毒掃描. 會導致伺服器極其緩慢, 而且會佔用大量的資源. 況且你自己也不會故意上傳一些病毒
首先安裝依賴套件
dnf install -y clamav-server clamav-data clamav-filesystem clamav-lib clamav-update clamav clamav-devel
配置 Freshclam 以支援定期更新病毒資料庫
cp /etc/freshclam.conf /etc/freshclam.conf.bak
sed -i '/^Example/d' /etc/freshclam.conf
令其可以開機啟動
vim /usr/lib/systemd/system/clam-freshclam.service
將以下內容複製到上述檔案中
[Unit]
Description = freshclam scanner
After = network.target
[Service]
Type = forking
ExecStart = /usr/bin/freshclam -d -c 4
Restart = on-failure
PrivateTmp = true
[Install]
WantedBy=multi-user.target
啟動
systemctl enable --now clam-freshclam
接下來配置 Clamd
cp /usr/share/doc/clamd/clamd.conf /etc/clamd.conf
sed -i '/^Example/d' /etc/clamd.conf
vim /clamd.conf
搜尋 User

把後面的 <USER>
修改為 root

搜尋 LocalSocket

去掉最前面的 "#
", 然後把後面修改為 /var/run/clamd.sock

接下來我們要啟動 clamd 服務, 必須進行配置
vim /etc/init.d/clamd
加入下列內容
case "$1" in
start)
echo -n "Starting Clam AntiVirus Daemon... "
/usr/sbin/clamd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/clamd
;;
stop)
echo -n "Stopping Clam AntiVirus Daemon... "
pkill clamd
rm -f /var/run/clamav/clamd.sock
rm -f /var/run/clamav/clamd.pid
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/clamd
;;
esac
執行指令 chmod +x /etc/init.d/clamd
service clamd on
然後我們利用指令 clamdscan /你要掃描的檔案夾
測試一下病毒掃描 :

最後, 我們在配置檔案 /Seafile 所在檔案夾/conf/seafile.conf
中, 將一下內容加入最後即可 :
[virus_scan]
scan_command = clamscan
virus_code = 1
nonvirus_code = 0
scan_interval = 60
scan_size_limit = 8192
scan_skip_ext = .bmp, .gif, .ico, .png, .jpg, .mp3, .mp4, .wav, .avi, .rmvb, .mkv
threads = 2
其中, scan_interval
是掃描間隔, 單位是分鐘. scan_size_limit
是掃描檔案的最大大小, 單位為 MB. scan_skip_ext
是後綴已經列出的檔案直接跳過掃描, 以 ",
" 隔開. threads 是掃描的執行緒最大數量. 上面配置可以自訂
9. LibreOffice 支援
LibreOffice 是對 Office 檔案的在線協作和預覽的工具. LibreOffice 我們採用手動安裝
首先進入 https://www.libreoffice.org/download/download/?type=rpm-x86_64&lang=lt 查看最新版本的下載地址, 選擇之後記得選擇 RPM
檔案夾, 接下來還需要選擇 x86_64
檔案夾. 截止發文為止, 最新的版本下載地址為
首先進入 Seafile 檔案夾中
cd /www/seafile
然後下載
wget http://mirrors.ustc.edu.cn/tdf/libreoffice/stable/7.0.3/rpm/x86_64/LibreOffice_7.0.3_Linux_x86-64_rpm.tar.gz
解壓縮
tar -zxvf LibreOffice_7.0.3_Linux_x86-64_rpm.tar.gz
進入 RPM 包的檔案夾
cd LibreOffice_7.0.3.1_Linux_x86-64_rpm/RPMS
然後直接手動安裝即可
dnf localinstall -y *.rpm
對於中文, 需要安裝一些字體
dnf install -y install wqy-microhei-fonts wqy-zenhei-fonts wqy-unibit-fonts
接下來讓 Seafile 支援 LibreOffice. 在 /Seafile 所在檔案夾/conf/seafevents.conf
配置檔案的最後增加
[OFFICE CONVERTER]
enabled = true
workers = 1
outputdir = /tmp/
其中, workers
是同作處理的數量, outputdir
是 Office 及 PDF 檔案轉換後臨時存放的位置
10. 其它一些設定
其它一些設定可以參考文章《Seafile 进阶玩法》
需要提醒大家的是, 每一次修改任何屬於 Seafile 的設定檔之後, 都需要重新啟動 Seafile 或者 Seahub 服務
自創文章, 原著 : Jonny, 如若需要轉發, 在已經授權的情況下請註明出處 :《在 CentOS 8 + Nginx + MySQL 8 下配置 Seafile 專業版》https://jonny.vip/2021/01/02/%e5%9c%a8-centos-8-nginx-mysql-8-%e4%b8%8b%e9%85%8d%e7%bd%ae-seafile-%e5%b0%88%e6%a5%ad%e7%89%88/
Leave a Reply