摘要訊息 : Seafile 新版本需要注意的一些問題.
0. 前言
文在 2022 年 4 月 16 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.
1. MySQL 下安裝 Seafile
Seafile 老版本沒有支援 MySQL 8, 所以建議大家使用 MySQL 5.7 進行安裝. 但是有些版本在 MySQL 5.7 下安裝的時候也會有問題. MySQL 會回傳這樣一個錯誤 : 1193, "Unknown system variable 'tx_isolation'
. 這個是因為 tx_isolation
在最新版本的 MySQL 5.7 (也包括 MySQL 8) 已經被遺棄了. 解決方案就是修改 Seafile 的程式碼, 修改之前需要進入 Seafile 的檔案夾中. 我們需要查找包含 tx_isolation
字串的檔案 : find . | xargs grep -ril "tx_isolation"
. 此時, 如果 Seafile 版本比較低, 一定查找成功, 因為在 Seafile 檔案夾下有這樣一個檔案包含這個字串 : ./seafile-pro-server-6.3.11/pro/python/SQLAlchemy-1.1.3-py2.6-linux-x86_64.egg/sqlalchemy/dialects/mysql/base.py
.
那麼我們編輯這個 base.py
: vim ./seafile-pro-server-6.3.11/pro/python/SQLAlchemy-1.1.3-py2.6-linux-x86_64.egg/sqlalchemy/dialects/mysql/base.py
. 然後查找 tx_isolation
, 修改為 transaction_isolation
. 修改之後的陳述式結果為 : cursor.execute('SELECT @@transaction_isolation')
.
然後繼續進行安裝步驟就沒有問題了.
2. Seafile 6.3 下的 Nginx 配置
如果使用本網誌的安裝方法, 那麼使用的網頁伺服器為 Nginx. Seafile 6.3 對 Nginx 配置要求已經發生了改變, 最大的改變就是遺棄 FastCGI. 如果大家還是使用原來的命令 ./seahub.sh start-fastcgi
, 可能會有這樣一個錯誤 : Unknown command: 'runfcgi'
. 我們首先需要修改 Nginx 配置檔案 :
server {
listen 80;
server_name 填寫你的網域名稱;
rewrite ^ https://$http_host$request_uri? permanent;
}
server {
listen 443 ssl http2;
server_name 填寫你的網域名稱;
ssl on;
ssl_certificate 填寫證書位置;
ssl_certificate_key 填寫 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" 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 /www/cloud/seafile-server-latest/seahub; #seahub 檔案夾
}
}
之後 Seahub 的啟動不再需要額外加 start-fastcgi
, 直接使用 ./seahub.sh start
就可以了.
《Seafile 進階玩法》開頭部分有提到開機啟動, 腳本中也需要去掉 start-fastcgi
才行 :
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
ExecStart=/www/cloud/seafile-server-latest/seahub.sh start
ExecStop=/www/cloud/seafile-server-latest/seahub.sh stop
User=root
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :