標籤:des class blog code http tar
seafile:下一代的開源雲端儲存
更好的檔案同步,隱私保護和團隊協作功能!
本文基於官方文檔,補充描述基於apache和mysql,安裝seafile伺服器。
原文網址:https://cloud.seafile.com/group/762/wiki/%E5%9C%A8apache%E7%8E%AF%E5%A2%83%E4%B8%8B%E9%83%A8%E7%BD%B2seafile/
修改:陳海青(http://hhrz.org)
1、準備下載安裝預裝了apache和mysql的虛擬機器(基於debain的) LAMP Stack - Web Stack (MySQL) :項目首頁:http://www.turnkeylinux.org/lampstack:http://downloads.sourceforge.net/project/turnkeylinux/ovf/turnkey-lamp-13.0-wheezy-amd64-ovf.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fturnkeylinux%2Ffiles%2Fovf%2F&ts=1400205666&use_mirror=skylink 2、下載和安裝Seafile伺服器
1)下載
到seafile的下載頁面(http://www.seafile.com/download)下載最新的伺服器安裝包.
2)部署和目錄選擇
假設安裝目錄 /usr/local/seafile,建議這樣的目錄結構:
mkdir -p /usr/local/
seafile #將 下載的伺服器安裝包seafile-server_* 移動到 haiwen 目錄下後 mv seafile-server_* /usr/local/seafile cd /usr/local/seafile
tar -xzf seafile-server_*mkdir installedmv seafile-server_* installed
現在,你的目錄看起來應該像這樣:
#tree seafile -L 2seafile├── 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 相關的設定檔都可以放在 seafile 目錄下,便於集中管理.
- 後續升級時,你只需要解壓最新的安裝包到 seafile 目錄下.
這樣你可以重用 seafile 目錄下已經存在的設定檔,而不用重新設定.
3)準備 MySQL 資料庫
Seafile 伺服器有三個組件需要擁有自己的資料庫:
- ccnet server
- seafile server
- seahub
Seafile 伺服器組件更多資訊請看Seafile伺服器組件概覽.
有兩種方法可以初始化資料庫:
- 通過
setup-seafile-mysql.sh
指令碼建立資料庫.
- 自己或其他人(比如資料庫管理員)建立
我們建議採用第一種方法. 指令碼會要求你提供 MySQL 資料庫的的根密碼,之後建立:
- ccnet/seafile/seahub 資料庫
- 一個可以串連到這些資料庫的使用者
然而,有時你不得不使用第二種方法. 如果你沒有根密碼,你需要通過擁有這種許可權的人(比如資料庫管理員)來協助你建立三個資料庫,和一個能串連這三個資料庫的使用者. 例如,為 ccnet/seafile/seahub 分別建立如下三個資料庫:ccnet-db
/ seafile-db
/ seahub-db
, 和一個可以串連這三個資料庫的 MySQL 使用者seafile
:
create database `ccnet-db` character set = ‘utf8‘;create database `seafile-db` character set = ‘utf8‘;create database `seahub-db` character set = ‘utf8‘;create user ‘seafile‘@‘localhost‘ identified by ‘seafile‘;GRANT ALL PRIVILEGES ON `ccnet-db`.* to `seafile`;GRANT ALL PRIVILEGES ON `seafile-db`.* to `seafile`;GRANT ALL PRIVILEGES ON `seahub-db`.* to `seafile`;
4)安裝 Seafile 伺服器(1)安裝前的準備工作
安裝 Seafile 伺服器之前,請確認已安裝以下軟體
- python 2.6 or 2.7
- python-setuptools
- python-simplejson
- python-imaging
- python-mysqldb
#在Debian/Ubuntu系統下apt-get updateapt-get install python2.7 python-setuptools python-simplejson python-imaging python-mysqldb
(2)開始設定資料庫
cd seafile-server-*./setup-seafile-mysql.sh #運行安裝指令碼並回答預設問題
如果你的系統中沒有安裝上面的某個軟體,那麼 Seafile初始化指令碼會提醒你安裝相應的軟體包.
該指令碼會依次詢問你一些問題,從而一步步引導你配置 Seafile 的各項參數:
參數 |
作用 |
說明 |
seafile server name |
seafile 伺服器的名字,將來在用戶端會顯示為這個名字 |
3 ~ 15 個字元,可以用英文字母,數字,底線 |
seafile server ip or domain |
seafile 伺服器的 IP 位址或者網域名稱 |
用戶端將通過這個 IP 或者地址來訪問你的 Seafile 服務 |
ccnet server port |
ccnet 使用的 TCP 通訊埠 |
一般使用預設的10001 連接埠,如果已經被佔用,可以設定為其他的連接埠 |
seafile data dir |
seafile 資料存放的目錄,用上面的例子,預設將是 /data/haiwen/seafile-data |
seafile 資料將隨著使用而逐漸增加,請把它放在一個有足夠大空閑空間的分區上 |
seafile server port |
seafile 伺服器 使用的 TCP 通訊埠 |
一般使用預設的 12001 連接埠,如果已經被佔用,可以設定為其他的連接埠 |
seafile httpserver port |
seafile httpserver 使用的 TCP 通訊埠 |
一般使用預設的 8082 連接埠,如果已經被佔用,可以設定為其他的連接埠 |
seahub admin email |
sehaub管理員的登入帳戶名稱 |
使用一個 email 地址 |
seahub admin password |
seahub 管理員的密碼 |
|
在這裡, 你會被要求選擇一種建立 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 資料庫應該已經被你(或者其他人)提前建立。
如果選擇 [1] Create new ccnet/seafile/seahub databases
,你會被問三個問題::
Question |
Description |
Note |
mysql server host |
the host address of the mysql server |
the default is localhost |
mysql server port |
the port of the mysql server |
the default is 3306. Almost every mysql server uses this port. |
root password |
the password of mysql root account |
the root password is required to create new databases and a new user |
mysql user for seafile |
the username for seafile programs to use to access MySQL server |
if the user does not exist, it would be created |
password for seafile mysql user |
the password for the user above |
|
ccnet dabase name |
the name of the database used by ccnet, default is "ccnet-db" |
the database would be created if not existing |
seafile dabase name |
the name of the database used by seafile, default is "seafile-db" |
the database would be created if not existing |
seahub dabase name |
the name of the database used by seahub, default is "seahub-db" |
the database would be created if not existing |
如果你選擇[2] Use existing ccnet/seafile/seahub databases
, 你會被問到如下三個問題::
Question |
Description |
Note |
mysql server host |
the host address of the mysql server |
the default is localhost |
mysql server port |
the port of the mysql server |
the default is 3306. Almost every mysql server uses this port |
mysql user for seafile |
the user for seafile programs to use to access MySQL server |
the user must already exists |
password for seafile mysql user |
the password for the user above |
|
ccnet dabase name |
the name of the database used by ccnet |
this database must already exist |
seafile dabase name |
the name of the database used by seafile, default is "seafile-db" |
this database must already exist |
seahub dabase name |
the name of the database used by seahub, default is "seahub-db" |
this database must already exist |
如果安裝正確完成,你會看到下面這樣的輸出
現在你的目錄結構看起來應該是這樣:
#tree seafile -L 2
seafile
├── ccnet # configuration files│ ├── ccnet.conf│ ├── mykey.peer│ ├── PeerMgr│ └── seafile.ini├── installed│ └── seafile-server_1.8.2_x86-64.tar.gz├── seafile-data│ └── seafile.conf├── 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├── seahub_settings.py # optional config file└── seahub_settings.pyc
seafile-server-latest
檔案夾為指向當前 Seafile 伺服器檔案夾的符號連結. 將來你升級到新版本後, 升級指令碼會自動更新使其始終指向最新的 Seafile 伺服器檔案夾,建立方法:
#cd /usr/local/seafile
# ln -s seafile-server-latest symbolic link to seafile-server-1.8.2
5)啟動 Seafile 伺服器(1)啟動之前
因為 Seafile 在用戶端和伺服器之間使用持續串連,如果你的用戶端數量巨大, 你應該在啟動 Seafile 之前修改你的 Linux 檔案最大開啟數,如下:
ulimit -n 30000
(2)啟動 Seafile 伺服器和 Seahub 網站
在 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 時提供的使用者名稱和密碼後,你會進入 Myhome 頁面,建立資料庫.
恭喜! 現在你已經成功的安裝了 Seafile 伺服器.
(3)在另一連接埠上運行 Seahub
如果你不想在預設的 8000 連接埠上運行 Seahub, 而是想自訂連接埠(比如8001)中運行,請按以下步驟操作:
./seahub.sh stop # 停止 Seafile 進程./seafile.sh stop # 停止 Seahub
- 更改
haiwen/ccnet/ccnet.conf
檔案中SERVICE_URL
的值(假設你的 ip 或者網域名稱時192.168.1.100
), 如下:
SERVICE_URL = http://192.168.1.100:8001
./seafile.sh start # 啟動 Seafile 服務./seahub.sh start 8001 # 啟動 Seahub 網站 (運行在8001連接埠上)
ccnet.conf
更多細節請看[Seafile server configuration options](Seafile server configuration options "wikilink").
(4)關閉/重啟 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 "manage.py run_gunicorn" # 查看 Seahub 進程
pkill -f seafile-controller # 結束 Seafile 進程pkill -f "manage.py run_gunicorn" # 結束 Seafile 進程
3、在Apache環境下部署Seafile1)準備工作
Ubuntu 下安裝python-flup
庫:
sudo apt-get install python-flup
Ubuntu 下安裝和啟用 mod_fastcgi 和 mod_rewrite :
debain下需要調整才能下載(參考:https://packages.debian.org/zh-cn/wheezy/libapache2-mod-fastcgi):
您可以使用以下列表中的任何一個源鏡像只要往您的 /etc/apt/sources.list 檔案中像下面這樣添加一行:
deb http://ftp.cn.debian.org/debian wheezy main non-free
請使用最終確定的源鏡像替換 ftp.cn.debian.org/debian。
sudo apt-get install libApache2-mod-fastcgisudo a2enmod rewritesudo a2enmod fastcgi
啟用 Apache proxy
sudo a2enmod proxy_http
Windows 下, 首先下載mod_fastcgi-*.dll並將它放置在你的組件目錄下. 在 debian/raspbian 環境下安裝 fcgi 請參考這裡
2)Apache 環境下部署 Seahub/HttpServer
Seahub 是 Seafile 伺服器的網站介面. HttpServer 用來處理瀏覽器端檔案的上傳與下載. 預設情況下, 它在 8082 連接埠上監聽 HTTP 要求.
這裡我們通過 fastcgi 部署 Seahub, 通過反向 Proxy(Reverse Proxy)部署 HttpServer. 我們假設你已經將 Seahub 綁定了網域名稱"www.myseafile.com".
如果使用ip地址:則使用ip地址代替網域名稱。
首先編輯你的 Apache 設定檔.根據你的 Linux 版本, 你需要在檔案末尾增加以下語句:
Apache2.conf
, for ubuntu/debian:
FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000
httpd.conf
, for centos/fedora:
FastCGIExternalServer /var/www/html/seahub.fcgi -host 127.0.0.1:8000
httpd.conf
, for Windows:
LoadModule fastcgi_module modules/mod_fastcgi-2.4.6-AP22.dllLoadModule rewrite_module modules/mod_rewrite.soFastCGIExternalServer e:/seafile-server-1.7.1/seahub/seahub.fcgi -host 127.0.0.1:8000
注意, seahub.fcgi
只是一個位置標識符, 你並不需要在你的系統中建立這個檔案夾.
二, 修改 Apache 設定檔: (sites-enabled/000-default
) for ubuntu/debian (vhost.conf
) for centos/fedora
<VirtualHost *:80> ServerName www.myseafile.com DocumentRoot /var/www Alias /media /home/user/haiwen/seafile-server-latest/seahub/media RewriteEngine On # # seafile httpserver # ProxyPass /seafhttp http://127.0.0.1:8082 ProxyPassReverse /seafhttp http://127.0.0.1:8082 RewriteRule ^/seafhttp - [QSA,L] # # seahub # RewriteRule ^/(media.*)$ /$1 [QSA,L,PT] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /seahub.fcgi$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]</VirtualHost>
3)修改 ccnet.conf 和 seahub_setting.py修改 ccnet.conf
你需要在/data/haiwen/ccnet/ccnet.conf
的SERVICE_URL
欄位中自訂網域名。
SERVICE_URL = http://www.myseafile.com
注意:如果你改變了 Seahub 的網域名稱,也需要同步更改SERVICE_URL
.
修改 seahub_settings.py
請在seahub_settings.py
新增一行,設定HTTP_SERVER_ROOT
的值
HTTP_SERVER_ROOT = ‘http://www.myseafile.com/seafhttp‘
啟動 Seafile 和 Seahub
sudo service apache2 restart./seafile.sh start./seahub.sh start-fastcgi
4)升級 Seafile 伺服器注意事項
在升級Seafile時, 除了常規操作外,還需增加一步操作: ‘‘‘在 nginx/apache 配置中更新靜態檔案路徑‘‘‘. 例如, 假設你正在將伺服器從 1.3.0 升級到 1.4.0, 那麼你需要:
Alias /media /home/user/haiwen/seafile-server-1.4.0/seahub/media
小貼士:
你可以建立一個符號連結seafile-server-latest
, 並將它指向當前 Seafile 伺服器檔案夾(在2.1.0及其後續伺服器版本中,e setup-seafile.sh
指令碼程式會自動建立). 之後, 每次你運行一個升級指令碼, 指令碼都會自動為seafile-server-latest
建立符號連結並將其指向最新版本伺服器的檔案夾.
通過如下語句實現:
location /media { root /home/user/haiwen/seafile-server-latest/seahub; }
這樣,以後在你升級 Seafile 伺服器的時候,不必每次都去更新 Nginx 配置.
5)其他說明
閱讀Seafile伺服器組件概覽會幫你更好的理解 Seafile
查看seafile更多資訊請移至..
- 在Nginx環境下部署Seafile / 在Apache環境下部署Seafile
- Seafile Web在Nginx環境下啟用Https / Seafile Web在Apache環境下啟用Https
- Seafile LDAP配置
- Seafile伺服器配置選項
在 Seafile 伺服器端有兩個組件:Seahub 和 HttpServer. HttpServer 通過監聽 8082 連接埠處理檔案的上傳與下載. Seahub 通過監聽 8000 連接埠負責其他的WEB頁面. 但是在 https 下, Seahub 應該通過 fastcgi 模式監聽8000連接埠 (運行./seahub.sh start-fastcgi). 而且在 fastcgi 模式下, 如果直接存取http://domain:8000
時,會返回錯誤頁面.
當一個使用者訪問https://domain.com/home/my/
時, Apache 接受到訪問請求後,通過 fastcgi 將其轉寄至 Seahub. 可通過以下配置來實現:
## seahub#RewriteRule ^/(media.*)$ /$1 [QSA,L,PT]RewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^/(seahub.*)$ /seahub.fcgi/$1 [QSA,L,E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
and
FastCGIExternalServer /var/www/seahub.fcgi -host 127.0.0.1:8000
當一個使用者在 Seahub 中點擊檔案下載連結時, Seahub 讀取HTTP_SERVER_ROOT
的值,並將其使用者重新導向到 https://domain.com/seafhttp/xxxxx/
. https://domain.com/seafhttp
時HTTP_SERVER_ROOT
的值. 這裡, HTTP_SERVER
表示是 Seafile 中只負責檔案上傳與下載的的 HttpServer 組件.
當 Apache 在 https://domain.com/seafhttp/xxxxx/
接收到訪問請求後, 它把請求發送到正在監聽 127.0.0.1:8082 的 HttpServer 組件, 可通過以下配置來實現:
ProxyPass /seafhttp http://127.0.0.1:8082ProxyPassReverse /seafhttp http://127.0.0.1:8082RewriteRule ^/seafhttp - [QSA,L]