部署 Seafile 服務器(使用 MySQL)
到http://www.seafile.com/download下載最新的服務器安裝包.
部署和目錄設計
公司的名稱爲"kaiqigu",你也已經下載seafile-server_1.4.0_x86-64.tar.gz 到你的home 目錄下。 在這裏建議這樣的目錄結構:
mkdir kaiqigu
mv seafile-server_1.4.0_x86-64.tar.gz kaiqigu
#將 seafile-server_1.4.0_x86-64.tar.gz 移動到 kaiqigu 目錄下後
cd kaiqigu
tar -xzf seafile-server_1.4.0_x86-64.tar.gz
mkdir installed
mv seafile-server_1.4.0_x86-64.tar.gz installed
現在,你的目錄看起來應該像這樣:
# kaiqigu
├── installed
│ └── seafile-server_1.4.0_x86-64.tar.gz
└── seafile-server-1.4.0
├──reset-admin.sh
├── runtime
├── seafile
├── seafile.sh
├── seahub
├── seahub.sh
├──setup-seafile.sh
└── upgrade
這樣設計目錄的好處在於
1:和 seafile 相關的配置文件都可以放在 kaiqigu 目錄下,便於集中管理.
2:後續升級時,你只需要解壓最新的安裝包到"kaiqigu"目錄下.
這樣你可以重用"kaiqigu"目錄下已經存在的配置文件,而不用重新配置.
安裝 Seafile 服務器
安裝前的準備工作
系統賬號設置
安裝好 CentOS 6.5 的基本服務器,首先需要設置接下來會使用到的 admin 系統賬號,並設置好 ssh 的公鑰登錄,方便接下來的部署。
使用 root 賬號登錄(或者,具有 root 權限的賬號)登錄後,爲確保 sudo 已經安裝了,執行以下命令,如果提示已經安裝,則無需任何操作,如果沒有安裝,則進行安裝:
# yum install sudo
接下來,創建 admin 系統賬號:
# useradd admin
# mkdir /home/admin/.ssh
# chown admin:admin /home/admin/.ssh/
# chmod 0700 /home/admin/.ssh/
然後,在 .ssh 目錄中構建 authorized_keys 文件,方式不限,使用 vi 或者 echo 都行,之後,再設置好 authorized_keys 文件的所有者和屬性,操作如下:
# cd /home/admin/.ssh
# echo "xxxxxxx(公鑰內容)"> authorized_keys
# chown admin:admin authorized_keys
# chmod 0600 authorized_keys
爲方便接下來的操作,賦予 admin 用戶 sudo 的權限:
# echo "admin ALL=(ALL) NOPASSWD:ALL">> /etc/sudoers
更新系統軟件包
用 admin 賬號登錄後,使用 yum 機制安裝所需用到的軟件包:
$ sudo su
# yum install epel-release
# yum install zlib-devel bzip2-devel ncurses-developenssl-devel
# yum install make gcc-c++ cmake bison-devel
# yum install swig patch sqlite-devel readlinereadline-devel
# yum install rsync nload
建立自用目錄
# chown admin:admin /data
以 admin 賬戶登錄,執行
$ cd /data
$ mkdir soft
安裝Seafile 服務器之前,請確認已安裝以下軟件
l Nginx
l MySQL server
l Python2.7
Web Server 部分
該部分內容,適用於需要安裝 nginx 的 Web Server 服務器上,不需要安裝 nginx 的服務器,可以忽略。
在沒有特殊需求的情況下,採用 nginx 官方發佈的預編譯版本進行安裝,方便將來的升級維護(需要訪問外網):
$ cd /data/soft
$ wgethttp://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum installnginx-release-centos-6-0.el6.ngx.noarch.rpm
安裝了 nginx 軟件倉庫後,添加的文件爲:
/etc/yum.repos.d/nginx.repo
/etc/pki/rpm-gpg/RPM-GPG-KEY-nginx
緊接着安裝 nginx:
$ sudo yum install nginx
安裝完成後,相關的目錄和文件有:
/etc/rc.d/init.d/nginx# 自啓動腳本
/usr/sbin/nginx
/etc/nginx/# 配置文件目錄
/var/log/nginx/# 默認的日誌目錄
/var/run/nginx.pid
/var/run/nginx.lock
/var/cache/nginx/# 相關臨時文件目錄
管理 nginx :(啓動、重啓、停止和配置測試)
# service nginx start
# service nginx restart
# service nginx stop
# service nginx configtest
DB Server 部分
如無特殊應用,使用 centos 默認的 mysql-server (版本爲 5.1.73)安裝即可。
$ sudo su
# yum install mysql-server
啓動 mysql
# service mysqld start
修改 root 賬號密碼
# /usr/bin/mysqladmin -u root password'new-password'
修改mysql數據存放目錄
# /etc/rc.d/init.d/mysqld stop
# cd /var/lib
# cp -a mysql/ /data/
# vim /etc/my.cnf
修改datadir=/var/lib/mysql爲datadir=/data/mysql
註釋掉socket=/var/lib/mysql/mysql.sock一行,添加socket=/data/mysql/mysql.sock
# vim /etc/rc.d/init.d/mysqld
註釋掉datadir="$result"添加datadir="/data/mysql"
# vim /usr/bin/mysqld_safe
修改DATADIR="/var/lib/mysql"爲DATADIR="/data/mysql"
建立一個mysql.sock的鏈接
# ln -s /data/mysql/mysql.sock/var/lib/mysql/mysql.sock
# /etc/rc.d/init.d/mysqld start
進入mysql查看數據目錄
sudo mysql -uroot -p xxx
mysql>show variables like '%dir%';
查看datadir目錄是否爲/data/mysql
Python Server 部分
該部分內容,適用需要安裝 Python 來跑遊戲後端應用的服務器,不需要安裝 Python 的服務器,可以忽略。
CentOS6.5 默認安裝的是 Python 2.6.6 ,我們需要 2.7.x 系列的,尤其是 2.7.8 以上的,運行所需內存降了很多。所以,選擇手動編譯安裝 Python2.7.8 。
在有互聯網公網連接的情況下,使用 admin 賬號執行如下操作。
編譯安裝 Python:
$ cd /data/soft
$ wgethttps://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
$ tar xzvf Python-2.7.10.tgz
$ cd Python-2.7.10
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
安裝 setuptools
$ cd /data/soft
$ wgethttps://pypi.python.org/packages/source/s/setuptools/setuptools-15.2.tar.gz
$ tar xzvf setuptools-15.2.tar.gz
$ cd setuptools-15.2
$ sudo /usr/local/bin/python2.7 setup.pyinstall
iPython
安裝 pip
$ wgethttps://pypi.python.org/packages/source/p/pip/pip-6.1.1.tar.gz
$ tar xzvf pip-6.1.1.tar.gz
$ cd pip-6.1.1
$ sudo /usr/local/bin/python2.7 setup.pyinstall
使用 pip 安裝剩餘的需要的組件
$ sudo su
# /usr/local/bin/pip2.7 install redis
# /usr/local/bin/pip2.7 install M2Crypto
# /usr/local/bin/pip2.7 installbackports.ssl_match_hostname
# /usr/local/bin/pip2.7 install greenlet
# /usr/local/bin/pip2.7 installopenpyxl==1.7.0
# /usr/local/bin/pip2.7 install pysqlite
# /usr/local/bin/pip2.7 install readline
# /usr/local/bin/pip2.7 install tornadogevent psutil supervisor
# /usr/local/bin/pip2.7 install ipython
在沒有互聯網公網連接的情況,需要先在能聯網的機器上在 pypi.python.org 網站上將以上軟件的源碼包都下載下來,然後,複製過來,逐個解壓,並通過運行 setup.py 進行安裝。
安裝 MySQL-python
Python訪問 MySQL 數據庫,需要安裝相應的客戶端軟件包,通常會使用MySQL-python 這個軟件包,而這個包,需要 mysql 的開發文件。
可以採用如下的步驟進行安裝:
# yum install mysql-devel
# /usr/local/bin/pip2.7 installMySQL-python
安裝 Imaging
# wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
# tar -xzvf Imaging-1.1.7.tar.gz
# cd Imaging-1.1.7
# /usr/local/bin/python2.7 setup.pyinstall
安裝seafile-server-4.1.2
cdseafile-server-4.1.2
./setup-seafile-mysql.sh #運行安裝腳本並回答預設問題
如果你的系統中沒有安裝上面的某個軟件,那麼 Seafile初始化腳本會提醒你安裝相應的軟件包.
該腳本會依次詢問你一些問題,從而一步步引導你配置 Seafile 的各項參數
在這裏, 你會被要求選擇一種創建 Seafile 數據庫的方式:
-------------------------------------------------------
Please choose a way toinitialize seafile databases:
-------------------------------------------------------
[1] Create newccnet/seafile/seahub databases
[2] Use existingccnet/seafile/seahub databases
具體選擇哪項, 取決於你是否擁有根密碼.
l 如果選擇1, 你需要提供根密碼. 腳本程序會創建數據庫和用戶。
l 如果選擇2,ccnet/seafile/seahub 數據庫應該已經被你(或者其他人)提前創建。
如果選擇 [1] Create new ccnet/seafile/seahub databases,你會被問三個問題:
如果你選擇[2] Use existing ccnet/seafile/seahub databases,
你會被問到如下三個問題:
如果安裝正確完成,你會看到下面這樣的輸出
現在你的目錄結構看起來應該是這樣:
#treehaiwen -L 2
haiwen
├──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 toseafile-server-1.8.2
├──seahub-data
│ └── avatars
├──seahub_settings.py # optional configfile
└──seahub_settings.pyc
seafile-server-latest文件夾爲指向當前Seafile 服務器文件夾的符號鏈接. 將來你升級到新版本後,升級腳本會自動更新使其始終指向最新的 Seafile 服務器文件夾..
啓動 Seafile 服務器和 Seahub 網站
在 seafile-server-1.8.2 目錄下,運行如下命令
啓動 Seafile:
./seafile.shstart # 啓動 Seafile 服務
啓動 Seahub
./seahub.shstart <port> # 啓動 Seahub 網站 (默認運行在8000端口上)
小貼士:你第一次啓動 seahub 時,seahub.sh腳本會提示你創建一個seafile 管理員帳號。
服務啓動後, 打開瀏覽器並輸入以下地址
http://192.168.1.111:8000/
你會被重定向到登陸頁面. 輸入你在安裝 Seafile 時提供的用戶名和密碼後,你會進入 Myhome 頁面,新建資料庫.
恭喜!現在你已經成功的安裝了 Seafile 服務器.
在另一端口上運行 Seahub
如果你不想在默認的 8000 端口上運行 Seahub, 而是想自定義端口(比如8001)中運行,請按以下步驟操作:
關閉 Seafile 服務器
./seahub.shstop # 停止 Seafile 進程
./seafile.shstop # 停止 Seahub
更改haiwen/ccnet/ccnet.conf文件中SERVICE_URL 的值(假設你的 ip 或者域名時192.168.1.100),如下:
SERVICE_URL = http://192.168.1.100:8001
重啓 Seafile 服務器
./seafile.sh start # 啓動 Seafile 服務
./seahub.sh start 8001 # 啓動 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 "manage.py run_gunicorn" # 查看 Seahub 進程
使用pkill命令殺掉相關進程
pkill -f seafile-controller # 結束 Seafile 進程
pkill -f "manage.py run_gunicorn" # 結束 Seafile 進程
備份步驟
你所有的資料庫數據都存儲在 kaiqigu目錄。
Seafile 也在數據庫中存儲一些重要的元數據。數據庫的命名和存儲路徑取決於你所使用的數據庫。
對於 MySQL, 數據庫由管理員來創建,所以不同的人部署,可能會有不同的文件名。大體而言,有如下三個數據庫會被創建:
· ccnet-db:包含用戶和羣組信息
· seafile-db:包含資料庫元數據信息
· seahub.db:包含網站前端(seahub)所用到的數據庫表信息
備份需要如下三步:
· 可選步: 如果你選擇 SQLite 作爲數據庫,首先停掉 Seafile 服務器;【這裏不介紹SQLite數據庫備份】
· 備份數據庫;
· 備份存放 Seafile 數據的目錄;
這裏假設你的 Seafile 數據位於 /data/kaiqigu目錄下,並且你想將其備份到 /backup目錄(/backup目錄可以是 NFS(網絡文件系統),可以是另一臺機器的 Windows 共享,或者是外部磁盤)。請在/backup目錄下創建如下目錄結構:
/backup
----databases/ 包含數據庫備份
----data/ 包含 Seafile 數據備份
備份數據庫
這裏建議你每次將數據庫備份到另一個單獨文件,並且不要覆蓋最近一週來備份過的舊數據庫文件。
MySQL
假設你的數據庫名分別爲ccnet-db, seafile-db和 seahub-db。mysqldump會自動鎖住表,所以在你備份 MySql 數據庫的時候,不需要停掉 Seafile 服務器。通常因爲數據庫表非常小,所以執行以下命令備份不會花太長時間。
Mysqldump-h[mysqlhost] -u[username] -p[password] --opt ccnet-db >/backup/databases/ccnet-db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
mysqldump-h [mysqlhost] -u[username] -p[password] --opt seafile-db >/backup/databases/seafile-db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
mysqldump-h [mysqlhost] -u[username] -p[password] --opt seahub-db >/backup/databases/seahub-db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
備份 Seafile 資料庫數據
由於所有的數據文件都存儲在 /data/kaiqigu目錄, 備份整個目錄即可。你可以直接拷貝整個目錄到備份目錄,或者你也可以用 rsync 做增量備份。
直接拷貝整個數據目錄,
cp-R /data/kaiqigu /backup/data/kaiqigu-`date +"%Y-%m-%d-%H-%M-%S"`
這樣每次都會產生一個新的備份文件夾,完成後,可以刪掉舊的備份。如果你有很多數據,拷貝整個數據目錄會花很多時間,這時你可以用rsync做增量備份。
rsync-az /data/kaiqigu /backup/data
這個命令數據備份到 /backup/data/kaiqigu下。
讓拷貝和 rsync 過程成功結束是非常重要的,否則你最近的一些數據將會丟失。
注意: 因爲 ccnet/ccnet.conf文件中的 ID 值必須和 ccnet/mykey.peer中值的 SHA1 值保持一致。所以不要忘記拷貝 ccnet/mykey.peer文件。
恢復備份
如果你當前的 Seafile 服務器已經壞掉,將使用另一臺機器來提供服務,需要恢復數據:
· 假設在新機器中,Seafile 也被部署在了 /data/kaiqigu目錄中,拷貝 /backup/data/kaiqigu到新機器中即可。
· 恢復數據庫。
恢復數據庫
現在你已經擁有了數據庫備份文件,你可以按如下步驟來進行恢復。
MySQL
mysql -u[username] -p[password] ccnet-db <ccnet-db.sql.2013-10-19-16-00-05
Mysql-u[username] -p[password] seafile-db <seafile-db.sql.2013-10-19-16-00-20
mysql -u[username] -p[password]seahub-db.sql.2013-10-19-16-01-05