背景
在平時的工作中,把常規工作進行文件整理非常重要,無論是平時工作處理或是工作交接,實時的維護文件資料可以提高工作效率。如果採用傳統的TXT文件或者Word文件來記錄的話修改查詢都不太方便,採用線上Wiki可以更好的讓大家實時地檢視或者修改文件資料。
在開源Wiki系統中,XWiki是做的最好的產品之一。因為它提供的功能與Confluence的功能非常相似,不需要學習任何語法格式,可以直接線上像編輯Word一樣編輯WIKI頁面。通過配置外掛和擴充套件,還可以實現包括Markdown語法之內的各種延展功能。
本文僅記錄必須的安裝步驟,更完整的資訊請參考官方手冊。
軟體版本
CentOS 7
OpenJDK 1.8
MySQL 5.7
Tomcat 7.0.90
XWiki 10.10
準備工作
建立資料庫和使用者
生產環境下,我們需要把後設資料儲存在外部的RDBMS中。我們先在MySQL中建立使用者和庫。
PS:本文不涉及MySQL的安裝,如果需要可以參考網上文章。
-- 建立對應的DB和User
drop user xwiki;
drop database if exists xwiki;
-- 注意修改使用者名稱和密碼
create database xwiki default charset utf8;
grant all privileges on xwiki.* to 'xwiki'@'%' identified by 'xwiki';
flush privileges;
複製程式碼
安裝OpenOffice
為了在XWiki中實現匯入匯出Office Word文件,需要單獨安裝OpenOffice,並在XWiki中進行呼叫。
PS: 使用yum安裝的OO目錄是在 /usr/lib64/libreoffice/ ,記錄下來後面要配置
yum install -y libreoffice libreoffice-headless
複製程式碼
建立OS使用者
根據運維規範,我們需要使用一個獨立的使用者來執行XWiki。這裡先建立使用者和相關目錄。
# 新建使用者
useradd xwiki
passwd xwiki
# 建立用於儲存XWiki附件的目錄
mkdir /data/xwiki_data
chown -R xwiki.xwiki /data/xwiki_data
複製程式碼
配置Tomcat
因為XWiki執行過程中對容器有一些特殊的配置要求,所以我們使用一個獨立的Tomcat來承載XWiki服務。如果沒有現成的,我們這裡重新安裝一個。
### 使用二進位制安裝
unzip apache-tomcat-7.0.90.zip -d /usr/local/
mv /usr/local/apache-tomcat-7.0.90/ /usr/local/xwiki_app/
chown -R xwiki.xwiki /usr/local/xwiki_app
### 設定字符集為utf8
vi /usr/local/xwiki_app/conf/server.xml
#
<Connector port="8080"
URIEncoding="UTF-8"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
### 必須修改預設JVM記憶體大小,否則啟動XWiki後會報錯。
### 因為我們使用的是二進位制安裝Tomcat,所以修改bin/catalina.sh 這個檔案。
### 如果是yum安裝的需要修改如/etc/tomcat7/tomcat7.conf 這個檔案 (未驗證yum安裝這種方法)
vi /usr/local/xwiki_app/bin/catalina.sh
# 在開頭增加這樣一句
JAVA_OPTS="-Xmx2048m"
複製程式碼
安裝和啟動前配置
下載安裝
### 下載指定版本
wget http://nexus.xwiki.org/nexus/content/groups/public/org/xwiki/platform/xwiki-platform-distribution-war/10.10/xwiki-platform-distribution-war-10.10.war
### 安裝到webapps目錄下
unzip xwiki-platform-distribution-war-10.10.war -d /usr/local/xwiki_app/webapps/xwiki/
### 拷貝資料庫驅動程式
wget http://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.26/mysql-connector-java-5.1.26.jar
cp mysql-connector-java-5.1.26.jar /usr/local/xwiki_app/webapps/xwiki/WEB-INF/lib/
複製程式碼
配置資料庫
預設情況下XWiki使用的是自帶的HSQLDB,我們需要修改成使用外部MySQL。
### 資料庫相關的配置在hibernate.cfg.xml
vi /usr/local/xwiki_app/webapps/xwiki/WEB-INF/hibernate.cfg.xml
# 首先要註釋掉 Configuration for the default database 這部分,具體操作略
# 取消註釋並修改 MySQL configuration 這部分。修改IP,Port,User,Passwd資訊
<property name="connection.url">jdbc:mysql://x.x.x.x:3306/xwiki?useSSL=false</property>
<property name="connection.username">xwiki</property>
<property name="connection.password">xxxxxx</property>
複製程式碼
配置OpenOffice
前面的步驟中,我們已經安裝了OO,在XWiki中進行配置就可以在啟動階段自動連線OO伺服器。
###
vi /usr/local/xwiki_app/webapps/xwiki/WEB-INF/xwiki.properties
# 修改下列資訊
openoffice.autoStart=true
openoffice.homePath=/usr/lib64/libreoffice/
複製程式碼
配置附件管理
預設情況下,XWiki使用資料庫儲存附件,所以對檔案尺寸有一定限制。使用檔案系統儲存可以上傳更大的附件,所以我們修改為檔案系統。
### 啟用檔案系統儲存附件
vi /usr/local/xwiki_app/webapps/xwiki/WEB-INF/xwiki.cfg
# 修改下列資訊
xwiki.store.attachment.hint = file
xwiki.store.attachment.versioning.hint = file
xwiki.store.attachment.recyclebin.content.hint=file
xwiki.store.attachment.recyclebin.hint = file
xwiki.store.recyclebin.content.hint = file
### 指定存放附件檔案的目錄
vi /usr/local/xwiki_app/webapps/xwiki/WEB-INF/xwiki.properties
# 指定前面建立的目錄
environment.permanentDirectory=/data/xwiki_data/
複製程式碼
啟動後初始化配置
首次啟動XWiki的過程中,還需要完成一系列配置
### 首次安裝Tomcat後需要賦予sh檔案執行許可權
find /usr/local/xwiki_app/ -name *.sh | xargs chmod +x
### 啟動Tomcat
sh /usr/local/xwiki_app/bin/startup.sh
複製程式碼
整個網頁版的安裝工作都在頁面中完成,跟著嚮導一步一步操作。
配置管理員賬號
安裝常用外掛
標準外掛包的安裝過程比較慢,耐心等待十幾分鍾到幾十分鐘。。。(國外網站,你懂滴)
PS:如果因為網路原因無法線上安裝擴充套件和外掛,可以使用離線安裝的方式。
看到下面的介面,就說明安裝成功了。
配置Markdown
預設不支援Markdown語法,所以我們需要安裝額外的擴充套件來實現。
擴充套件安裝成功後,還需要在編輯器裡面啟用語法支援。如下圖的配置,我們只保留了Markdown語法。
配置自定義LOGO
公司內部使用,所以還是換上公司的LOGO比較規範。
配置中文介面
XWiki介面原生支援多語言,不過經過簡單使用後發現,介面的中文化並不完全,顯得有點LOW,還不如用英文。
日常維護
新建組和使用者
建立組和使用者很簡單,新建的所有使用者都會預設屬於一個叫 XWikiAllGroup 的組。從許可權管理的角度出發,我們需要把每個使用者歸屬到不同的組當中。
設定目錄許可權
公司內部使用的XWiki,在許可權管理上要滿足下列要求
- Admin組成員擁有系統管理許可權;
- 每個組有專屬的文件目錄(如運維組有自己專屬的根目錄,技術組同理);
- 普通使用者歸屬於各自的組;
- 註冊使用者和匿名使用者擁有所有文件的讀許可權(特殊要求的除外);
- 組成員對組目錄下的文件都有編輯許可權;
- 文件作者及指定管理人員有文件的刪除許可權;
舉例,許可權管理矩陣關係如下
組 \ 目錄 | DIR-01 (G01根目錄) | DIR-02(G02根目錄) |
---|---|---|
Admin | full | full |
Group-01 | read, write | read |
Group-02 | read | read, write |
全域性許可權
為了實現後面基於目錄的細粒度控制,首先在全域性取消預設的使用者許可權。如下圖
目錄許可權
以Dir01為例,選中指定目錄後點選管理頁面,如下圖
為避免使用者誤操作修改根目錄內容,先在頁面級別取消組G01的編輯許可權,如下圖
然後給組G01賦予Dir01下級所有子目錄的讀寫許可權,如下圖
備份恢復
具體的備份指令碼本文暫不提供,僅說明安裝前文進行安裝之後需要進行備份的部分。完整的備份恢復請參考官方手冊。
- MySQL中的xwiki庫。這裡儲存的是所有基礎資料。
- /data/xwiki_data/ 目錄。這裡儲存的是所有附件檔案,以及一些執行時資料。
- /usr/local/xwiki_app/webapps/xwiki/ 目錄。這裡是XWiki應用,因為修改了Tomcat的預設配置,所以建議把整個 /usr/local/xwiki_app/ 目錄進行備份。
Troubleshooting
離線安裝標準擴充套件包
此處記錄必須操作,更多詳細的原理和流程請參看官方手冊。
### 下載標準擴充套件
wget http://nexus.xwiki.org/nexus/content/groups/public/org/xwiki/platform/xwiki-platform-distribution-flavor-xip/10.10/xwiki-platform-distribution-flavor-xip-10.10.xip
### 解壓縮xip檔案
unzip xwiki-platform-distribution-flavor-xip-10.10.xip -d /data/xwiki_data/extension/repository/
### 重啟XWiki
sh /usr/local/xwiki_app/bin/shutdown.sh
sh /usr/local/xwiki_app/bin/startup.sh
複製程式碼
Tomcat版本問題
在使用Tomcat 8.5.31測試過程中發現,後臺會出現字符集問題。換用7.0.90版本後問題不再出現。
PS:在官方手冊中這裡有對於Tomcat版本的需求,但是並沒有說8.5.31有問題。
警告 [xwiki/bin/download/Main/SolrSearch/dark-grey-disclosure-arrow-down.png] org.apache.catalina.connector.Response.setCharacterEncoding The encoding [] is not recognised by the JRE
java.lang.IllegalArgumentException: java.io.UnsupportedEncodingException: The character encoding [] is not supported
複製程式碼
重啟OpenOffice
在測試過程中發現,如果XWiki意外掛掉,在後續啟動的過程中XWiki不能自動連線到OO伺服器上。這個時候XWiki的基本功能都是正常的,但是不能匯入匯出Office文件。
如果在管理介面重啟OO,會出現如下圖的錯誤資訊
檢視系統日誌catalina.out中會出現類似這樣的錯誤資訊
# 類似這樣的錯誤資訊
Caused by: java.lang.IllegalStateException: a process with acceptString 'socket,host=127.0.0.1,port=8100' is already running; pid 9099
at org.artofsolving.jodconverter.office.OfficeProcess.start(OfficeProcess.java:72)
複製程式碼
這個時候的解決辦法是,根據錯誤資訊中的OO程式號(如上圖中的pid),手工殺掉OO程式。
#### 查詢確認一下埠號對應的程式
lsof -i:8100
#
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
soffice.b 9099 xwiki 17u IPv4 2322562 0t0 TCP localhost:xprint-server (LISTEN)
### 手工殺掉OO程式
kill -9 9099
複製程式碼
然後在管理頁面重啟OO即可恢復。