如何优雅的安装配置知识管理系统Xwiki

XWiki是一个强大的Java开源的Wiki引擎。它支持一些受欢迎的特性如:

  • 内容管理(浏览/编辑/预览/保存)
  • 支持附件
  • 版本控制
  • 全文本搜索
  • 权限管理
  • 使用Hibernate进行数据存储
  • RSS输出与显示外部的RSS feeds
  • 多语言支持
  • 提供XML/RPC的API
  • WYSIWYG HTML编辑器
  • 导出为PDF
  • Groovy脚本支持等等

前置条件

环境要求

  • CentOS 7.6
  • Tomcat 9.0.31
  • Openjdk 1.8.0
  • Libreoffice
  • Mysql 5.7.28

Tips:JDK必须使用openjdk,Oracle Jdk不兼容!

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

软件下载

mkdir -p /opt/software
cd /opt/software
yum install wget -y
wget http://download.mrlapulga.com/Linux/Xwiki/xwiki-platform-distribution-war-12.1.war
wget http://download.mrlapulga.com/Linux/Xwiki/xwiki-platform-distribution-flavor-xip-12.1.xip
wget http://download.mrlapulga.com/Linux/Xwiki/mysql-connector-java-5.1.47.jar
wget http://download.mrlapulga.com/Linux/Mysql/software/generic/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
wget http://download.mrlapulga.com/Linux/Nginx/source/nginx-1.16.1-installed-opt-dir.tar.gz

安装基础环境

安装Openjdk

yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-headless.x86_64 -y

安装office

yum install libreoffice -y

解压tomcat和mysql

解压tomcat:

cd /opt/software
tar zxf apache-tomcat-9.0.31.tar.gz -C /opt
mv /opt/apache-tomcat-9.0.31 /opt/tomcat9

修改tomcat配置:

vim /opt/tomcat9/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               URIEncoding="UTF-8" 
               compression="on" 
               compressionMinSize="2048" 
               compressableMimeType="text/html,text/xml,text/css,text/javascript,application/x-javascript" />

解压mysql:

tar zxf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /opt
ln -s /opt/mysql-5.7.28-linux-glibc2.12-x86_64 /opt/mysql

配置mysql

yum install libaio -y
mkdir -p /data/mysql
sed -i '46s#basedir=#basedir=/opt/mysql#' /opt/mysql/support-files/mysql.server
sed -i '47s#datadir=#datadir=/data/mysql#' /opt/mysql/support-files/mysql.server
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown -R mysql.mysql /opt/mysql/
chown -R mysql.mysql /data/
ln -s /opt/mysql/bin/mysql /usr/bin/

添加配置文件:

cat >> /etc/my.cnf <<EOF
[mysqld]
datadir                             = /data/mysql
basedir                             = /opt/mysql
#tmpdir                              = /data/mysql/tmp_mysql
port                                = 3306
socket                              = /data/mysql/mysql.sock
pid-file                            = /data/mysql/mysql.pid
max_connections                     = 8000
max_connect_errors                  = 100000
max_user_connections                = 3000
check_proxy_users                   = on
mysql_native_password_proxy_users   = on
local_infile                        = OFF
symbolic-links                      = FALSE
group_concat_max_len                = 4294967295
max_join_size                       = 18446744073709551615
max_execution_time                  = 20000
lock_wait_timeout                   = 60
autocommit                          = 1
lower_case_table_names              = 1
thread_cache_size                   = 64
disabled_storage_engines            = "MyISAM,FEDERATED"
character_set_server                = utf8mb4
character-set-client-handshake      = FALSE
collation_server                    = utf8mb4_general_ci
init_connect                        = 'SET NAMES utf8mb4'
transaction-isolation               = "READ-COMMITTED"
skip_name_resolve                   = ON
explicit_defaults_for_timestamp     = ON
log_timestamps                      = SYSTEM
local_infile                        = OFF
event_scheduler                     = OFF
query_cache_type                    = OFF
query_cache_size                    = 0
sql_mode                            = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
log_error                           = /data/mysql/mysql.err
slow_query_log                      = ON
slow_query_log_file                 = /data/mysql/slow.log
long_query_time                     = 1
general_log                         = OFF
general_log_file                    = /data/mysql/general.log
expire_logs_days                    = 99
log-bin                             = /data/mysql/mysql-bin
log-bin-index                       = /data/mysql/mysql-bin.index
max_binlog_size                     = 500M
binlog_format                       = mixed
binlog_rows_query_log_events        = ON
binlog_cache_size                   = 128k
binlog_stmt_cache_size              = 128k
log-bin-trust-function-creators     = 1
max_binlog_cache_size               = 2G
max_binlog_stmt_cache_size          = 2G
relay_log                           = /data/mysql/relay
relay_log_index                     = /data/mysql/relay.index
max_relay_log_size                  = 500M
relay_log_purge                     = ON
relay_log_recovery                  = ON
server_id                           = 1
read_buffer_size                    = 1M
read_rnd_buffer_size                = 2M
sort_buffer_size                    = 64M
join_buffer_size                    = 64M
tmp_table_size                      = 64M
max_allowed_packet                  = 128M
max_heap_table_size                 = 64M
connect_timeout                     = 43200
wait_timeout                        = 43200
back_log                            = 512
interactive_timeout                 = 300
net_read_timeout                    = 30
net_write_timeout                   = 30
skip_external_locking               = ON
key_buffer_size                     = 16M
bulk_insert_buffer_size             = 16M
concurrent_insert                   = ALWAYS
open_files_limit                    = 65000
table_open_cache                    = 16000
table_definition_cache              = 16000
default_storage_engine              = InnoDB
default_tmp_storage_engine          = InnoDB
internal_tmp_disk_storage_engine    = InnoDB
[client]
socket                              = /data/mysql/mysql.sock
default_character_set               = utf8mb4
[mysql]
default_character_set               = utf8mb4
[ndatad default]
TransactionDeadLockDetectionTimeOut = 20000
EOF
 chown -R mysql.mysql /etc/my.cnf

初始化:

/opt/mysql/bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/data/mysql

修改密码:

mysql_passwd=$(grep 'A temporary password is generated' /data/mysql/mysql.err |awk '{print $NF}')
/etc/init.d/mysqld start
/opt/mysql/bin/mysqladmin -uroot -p${mysql_passwd} password '123456'

设置环境变量:

echo "export PATH=\$PATH:/opt/mysql/bin" | tee /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

安装Xwiki

创建数据库及授予权限

mysql -uroot -p'123456'
mysql> create database xwiki default character set utf8mb4 collate utf8mb4_bin;
mysql> grant all privileges on *.* to xwiki@127.0.0.1 identified by 'xwiki';
mysql> flush privileges;

安装xwiki

rm -rf /opt/tomcat9/webapps/*
mkdir -p /opt/tomcat9/webapps/xwiki
cd /opt/software/
unzip xwiki-platform-distribution-war-12.1.war -d /opt/tomcat9/webapps/xwiki/

修改配置文件

cd /opt/tomcat9/webapps/xwiki/WEB-INF/
cp hibernate.cfg.xml{,.bak}
cp xwiki.cfg{,.bak}
cp xwiki.properties{,.bak}

vim hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD//EN"
  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>

    <property name="hibernate.show_sql">false</property>
    <property name="hibernate.use_outer_join">true</property>
    
    <property name="hibernate.jdbc.use_scrollable_resultset">false</property>

    <property name="hibernate.dbcp.defaultAutoCommit">false</property>
    <property name="hibernate.dbcp.maxTotal">50</property>
    <property name="hibernate.dbcp.maxIdle">5</property>
    <property name="hibernate.dbcp.maxWaitMillis">30000</property>
    <property name="hibernate.connection.provider_class">com.xpn.xwiki.store.DBCPConnectionProvider</property>
    
    <property name="hibernate.schema_update.unique_constraint_strategy">skip</property>

    <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/xwiki?useSSL=false</property>
    <property name="hibernate.connection.username">xwiki</property>
    <property name="hibernate.connection.password">xwiki</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    <property name="hibernate.dbcp.poolPreparedStatements">true</property>
    <property name="hibernate.dbcp.maxOpenPreparedStatements">20</property>

    <property name="hibernate.connection.charSet">UTF-8</property>
    <property name="hibernate.connection.useUnicode">true</property>
    <property name="hibernate.connection.characterEncoding">utf8</property>

    <mapping resource="xwiki.hbm.xml"/>
    <mapping resource="feeds.hbm.xml"/>
    <mapping resource="instance.hbm.xml"/>
    <mapping resource="notification-filter-preferences.hbm.xml"/>
    <mapping resource="mailsender.hbm.xml"/>
    
  </session-factory>
</hibernate-configuration>

vim xwiki.cfg

xwiki.encoding=UTF-8
xwiki.section.edit=1
xwiki.section.depth=2
xwiki.backlinks=1
xwiki.tags=1
xwiki.store.migration=1
xwiki.inactiveuser.allowedpages=
xwiki.authentication.validationKey=totototototototototototototototo
xwiki.authentication.encryptionKey=titititititititititititititititi
xwiki.authentication.cookiedomains=
xwiki.authentication.logoutpage=(/|/[^/]+/|/wiki/[^/]+/)logout/*
xwiki.editcomment=1
xwiki.editcomment.mandatory=0
xwiki.defaultskin=flamingo
xwiki.defaultbaseskin=flamingo
xwiki.plugins=\
  com.xpn.xwiki.monitor.api.MonitorPlugin,\
  com.xpn.xwiki.plugin.skinx.JsSkinExtensionPlugin,\
  com.xpn.xwiki.plugin.skinx.JsSkinFileExtensionPlugin,\
  com.xpn.xwiki.plugin.skinx.JsResourceSkinExtensionPlugin,\
  com.xpn.xwiki.plugin.skinx.CssSkinExtensionPlugin,\
  com.xpn.xwiki.plugin.skinx.CssSkinFileExtensionPlugin,\
  com.xpn.xwiki.plugin.skinx.CssResourceSkinExtensionPlugin,\
  com.xpn.xwiki.plugin.skinx.LinkExtensionPlugin,\
  com.xpn.xwiki.plugin.feed.FeedPlugin,\
  com.xpn.xwiki.plugin.mail.MailPlugin,\
  com.xpn.xwiki.plugin.packaging.PackagePlugin,\
  com.xpn.xwiki.plugin.svg.SVGPlugin,\
  com.xpn.xwiki.plugin.fileupload.FileUploadPlugin,\
  com.xpn.xwiki.plugin.image.ImagePlugin,\
  com.xpn.xwiki.plugin.diff.DiffPlugin,\
  com.xpn.xwiki.plugin.rightsmanager.RightsManagerPlugin,\
  com.xpn.xwiki.plugin.jodatime.JodaTimePlugin,\
  com.xpn.xwiki.plugin.scheduler.SchedulerPlugin,\
  com.xpn.xwiki.plugin.mailsender.MailSenderPlugin,\
  com.xpn.xwiki.plugin.tag.TagPlugin,\
  com.xpn.xwiki.plugin.zipexplorer.ZipExplorerPlugin
xwiki.plugin.image.cache.capacity=30
xwiki.stats.default=0

vim xwiki.properties

environment.permanentDirectory=/opt/xwiki/
openoffice.autoStart=true
openoffice.homePath=/usr/lib64/libreoffice
extension.oldflavors=org.xwiki.enterprise:xwiki-enterprise-ui-mainwiki
extension.oldflavors=org.xwiki.enterprise:xwiki-enterprise-ui-wiki
extension.oldflavors=org.xwiki.manager:xwiki-manager-ui
extension.oldflavors=org.xwiki.manager:xwiki-manager-wiki-administrator
extension.oldflavors=org.xwiki.manager:xwiki-enterprise-manager-wiki-administrator
extension.oldflavors=com.xpn.xwiki.products:xwiki-enterprise-manager-wiki-administrator
extension.oldflavors=com.xpn.xwiki.products:xwiki-enterprise-wiki
mkdir -p /opt/xwiki/extension/repository
cd /opt/software
unzip xwiki-platform-distribution-flavor-xip-12.1.xip -d /opt/xwiki/extension/repository/

安装mysql驱动

cp /opt/software/mysql-connector-java-5.1.47.jar /opt/tomcat9/webapps/xwiki/WEB-INF/lib/

启动服务

/opt/tomcat9/bin/startup.sh

通过浏览器进行安装

在浏览器输入地址:http://IP:8080/xwiki

进行初始化:

进行安装向导配置:

创建管理员账号:

安装flavor框架:

安装完成:

关闭向导:

本地化配置:

配置Nginx反向代理

安装Nginx

useradd nginx -s /usr/sbin/nologin
cd /opt/software
tar zxf nginx-1.16.1-installed-opt-dir.tar.gz -C /opt
mkdir -p /opt/nginx/conf/conf.d

创建配置文件

vim /opt/nginx/conf/nginx.conf

worker_processes  auto;
worker_rlimit_nofile 65535;
error_log  /opt/nginx/log/error.log warn;
pid        /opt/nginx/nginx.pid;

events {
    use epoll;
    worker_connections  8192;
}

http {
    include       /opt/nginx/conf/mime.types;
    default_type  application/octet-stream;
    client_max_body_size 5000M;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /opt/nginx/log/access.log  main;
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    server_tokens   off;
    keepalive_timeout 3600;
    keepalive_requests   100000;
    client_header_timeout 180;
    client_body_timeout 180;
    reset_timedout_connection on;
    client_body_buffer_size 128m;
    proxy_connect_timeout   300s;
    proxy_send_timeout      900;
    proxy_read_timeout      900;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_temp_file_write_size 256k;
    include /opt/nginx/conf/conf.d/*.conf;
}

vim /opt/nginx/conf/conf.d/xwiki.conf

server {
    listen 80;
    server_name wiki.iuskye.com 192.168.1.235;
    rewrite ^ https://$server_name/xwiki$request_uri?permanent;
}

server {
    listen 443 ssl;
    server_name wiki.iuskye.com 192.168.1.235;
    ssl_certificate /opt/nginx/certs/certificate.pem;
    ssl_certificate_key /opt/nginx/certs/privatekey.pem;
    root  /opt/tomcat9/webapps/xwiki;
    access_log  /opt/nginx/log/access.log  main;
    error_log  /opt/nginx/log/error.log;

    location / {
        rewrite ^ $scheme://$server_name/xwiki$request_uri?permanent;
    }

    location ^~ /xwiki {
    proxy_pass http://127.0.0.1:8080/xwiki;
   }
}

启动Nginx

/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf

开始体验wiki

配置本地hosts

打开Mac或者Windows的hosts文件,写入:

192.168.1.235 wiki.iuskye.com

保存!

登录

打开浏览器输入http://wiki.iuskye.com/xwiki

输入创建的管理员账号进行登录:

配置启停服务脚本

启停状态检查脚本

cd /opt
vim xwiki-ctl
#!/bin/bash
# author: iuskye
# email: iuskye@126.com

check_info() {
if [[ $2 == "0" ]];then
    echo -e "\033[32m$1 is OK! \033[0m"
elif [[ $2 == "1" ]];then
    echo -e "\033[31m$1 is DOWN! \033[0m"
fi
}

start_info() {
echo -e "\033[32mStart $1 ...\033[0m"
sleep 2
}

stop_info() {
echo -e "\033[31mStop $1 ...\033[0m"
sleep 2
}

status_info() {
echo -e "\033[36mCheck $1 Service ...\033[0m"
sleep 2
}

start_nginx() {
start_info "Nginx"
/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
}

start_mysql() {
start_info "Mysql"
/etc/init.d/mysqld start >/dev/null 2>&1
}

start_tomcat() {
start_info "Tomcat"
/opt/tomcat9/bin/startup.sh >/dev/null 2>&1
}

stop_nginx() {
stop_info "Nginx"
/opt/nginx/sbin/nginx -s stop
nginx_code=$(ps -ef | grep nginx | grep -v grep >/dev/null 2>&1;echo $?)
if [[ ${nginx_code} -eq 0 ]];then
    ps -ef | grep nginx | grep -v grep | awk -F' ' '{print $2}' | xargs kill -9 >/dev/null 2>&1
fi
}

stop_mysql() {
stop_info "Mysql"
/etc/init.d/mysqld stop >/dev/null 2>&1
mysql_code=$(ps -ef | grep mysqld | grep -v grep >/dev/null 2>&1;echo $?)
if [[ ${mysql_code} -eq 0 ]];then
    ps -ef | grep mysqld | grep -v grep | awk -F' ' '{print $2}' | xargs kill -9 >/dev/null 2>&1
fi
}

stop_tomcat() {
stop_info "Tomcat"
/opt/tomcat9/bin/shutdown.sh >/dev/null 2>&1
sleep 3
tomcat_code=$(ps -ef | grep tomcat | grep -v grep >/dev/null 2>&1;echo $?)
if [[ ${tomcat_code} -eq 0 ]];then
    ps -ef | grep tomcat9 | grep -v grep | awk -F' ' '{print $2}' | xargs kill -9 >/dev/null 2>&1
fi
}

status_nginx() {
status_info "Nginx"
local check_code=$(ps -C nginx --no-header >/dev/null 2>&1;echo $?)
check_info "Nginx" "${check_code}"
}

status_mysql() {
status_info "Mysql"
local check_code=$(ps -ef | grep mysqld | grep -v grep >/dev/null 2>&1;echo $?)
check_info "Mysql" "${check_code}"
}

status_tomcat() {
status_info "Tomcat"
local check_code=$(ps -ef | grep tomcat9 | grep -v grep >/dev/null 2>&1;echo $?)
check_info "Tomcat" "${check_code}"
}

start() {
if [[ $1 == "nginx" ]];then
    start_nginx
fi
if [[ $1 == "mysql" ]];then
    start_mysql
fi
if [[ $1 == "tomcat" ]];then
    start_tomcat
fi
if [[ $1 == "all" ]];then
    start_nginx
    sleep 1
    start_mysql
    sleep 1
    start_tomcat
fi
}

stop() {
if [[ $1 == "nginx" ]];then
    stop_nginx
fi
if [[ $1 == "mysql" ]];then
    stop_mysql
fi
if [[ $1 == "tomcat" ]];then
    stop_tomcat
fi
if [[ $1 == "all" ]];then
    stop_nginx
    sleep 1
    stop_mysql
    sleep 1
    stop_tomcat
fi
}

status() {
if [[ $1 == "nginx" ]];then
    status_nginx
fi
if [[ $1 == "mysql" ]];then
    status_mysql
fi
if [[ $1 == "tomcat" ]];then
    status_tomcat
fi
if [[ $1 == "all" ]];then
    status_nginx
    sleep 1
    status_mysql
    sleep 1
    status_tomcat
fi
}

help_info() {
echo "Usage: xwiki-ctl [start|stop|status] [nginx|mysql|tomcat|all]"
echo
echo "    xwiki-ctl start nginx      # start nginx service."
echo "    xwiki-ctl start mysql      # start mysql service."
echo "    xwiki-ctl start tomcat     # start tomcat service."
echo "    xwiki-ctl start all        # start all service."
echo "    xwiki-ctl stop nginx       # stop nginx service."
echo "    xwiki-ctl stop mysql       # stop mysql service."
echo "    xwiki-ctl stop tomcat      # stop tomcat service."
echo "    xwiki-ctl stop all         # stop all service."
echo "    xwiki-ctl status nginx     # check nginx service."
echo "    xwiki-ctl status mysql     # check mysql service."
echo "    xwiki-ctl status tomcat    # check tomcat service."
echo "    xwiki-ctl status all       # check all service."
}

case $1 in
start)
    start $2
    ;;
stop)
    stop $2
    ;;
status)
    status $2
    ;;
-h|--help)
    help_info
    ;;
*)
    if [[ -z $1 || -z $2 ]];then
        echo -e "\033[31mxwiki-ctl --help or -h to show how to use.\033[0m"
    fi
    ;;
esac

配置系统环境

ln -s /opt/xwiki-ctl /usr/bin/xwiki-ctl

配置开机自启

chmod +x /etc/rc.d/rc.local
echo "xwiki-ctl start all" | tee -a /etc/rc.d/rc.local
posted @ 2020-08-20 23:37  SimonLiu91  阅读(1957)  评论(0编辑  收藏  举报