企業(yè)級MediaWiki知識庫系統(tǒng)搭建部署指南(CentOS 8)
## 一、高級環(huán)境準(zhǔn)備
### 1. 系統(tǒng)優(yōu)化與安全加固
```bash
# 系統(tǒng)更新與內(nèi)核優(yōu)化
sudo dnf update -y --security
sudo dnf install kernel-tools tuned -y
sudo tuned-adm profile throughput-performance
# 安裝高級安全工具
sudo dnf install fail2ban aide rkhunter -y
sudo aide --init
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 配置Fail2Ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[apache-botsearch]
enabled = true
logpath = %(apache_error_log)s
maxretry = 3
[mysqld-auth]
enabled = true
logpath = /var/log/mariadb/mariadb.log
maxretry = 3
2. LAMP高級配置
bash
# 安裝最新PHP版本(Remi倉庫)
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
sudo dnf module enable php:remi-8.2 -y
sudo dnf install php php-opcache php-apcu php-mysqlnd php-xml php-mbstring \
php-intl php-json php-curl php-gd php-zip \
php-redis php-ldap php-imagick -y
# 配置PHP性能優(yōu)化
sudo nano /etc/php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
realpath_cache_size=4096K
realpath_cache_ttl=600
3. 數(shù)據(jù)庫高級配置
bash
# 創(chuàng)建專用數(shù)據(jù)目錄
sudo mkdir /data/mysql
sudo chown mysql:mysql /data/mysql
# 修改MariaDB配置
sudo nano /etc/my.cnf.d/mariadb-server.cnf
[server]
datadir=/data/mysql
innodb_buffer_pool_size=2G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=2
max_connections=200
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
query_cache_type=0
query_cache_size=0
slow_query_log=1
long_query_time=1
二、企業(yè)級數(shù)據(jù)庫部署
1. 安全初始化
bash
sudo mysql_secure_installation <<EOF
y
StrongRootPass123!
y
y
y
y
EOF
2. 高級數(shù)據(jù)庫配置
sql
CREATE DATABASE wikidb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wikiuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON wikidb.* TO 'wikiuser'@'localhost';
FLUSH PRIVILEGES;
-- 創(chuàng)建監(jiān)控用戶
CREATE USER 'monitor'@'localhost' IDENTIFIED BY 'MonitorPass123!';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'localhost';
三、高可用MediaWiki安裝
1. 源碼編譯安裝(優(yōu)化性能)
bash
# 安裝編譯依賴
sudo dnf install gcc make libtool-ltdl-devel pcre-devel expat-devel \
libjpeg-turbo-devel libpng-devel libwebp-devel -y
# 下載最新版
cd /opt
sudo wget https://releases.wikimedia.org/mediawiki/1.40/mediawiki-1.40.0.tar.gz
sudo tar xzf mediawiki-*.tar.gz
sudo mv mediawiki-* /var/www/html/wiki
# 設(shè)置高級權(quán)限
sudo chown -R apache:apache /var/www/html/wiki
sudo chmod 750 /var/www/html/wiki
sudo setfacl -Rm u:apache:rwx,d:u:apache:rwx /var/www/html/wiki/images
2. Apache高級配置
bash
sudo nano /etc/httpd/conf.d/wiki-ssl.conf
apache
<VirtualHost *:443>
ServerName wiki.example.com
DocumentRoot /var/www/html/wiki
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/wiki.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/wiki.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/wiki.example.com/chain.pem
<Directory "/var/www/html/wiki">
Require all granted
AllowOverride All
Options -Indexes +FollowSymLinks
# 安全頭設(shè)置
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'"
</Directory>
# 日志格式擴(kuò)展
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %I %O" wiki_log
CustomLog /var/log/httpd/wiki_ssl_access.log wiki_log
ErrorLog /var/log/httpd/wiki_ssl_error.log
# 啟用HTTP/2
Protocols h2 http/1.1
# 啟用Brotli壓縮
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript application/json
</VirtualHost>
四、企業(yè)級Web安裝配置
1. 高級安裝選項(LocalSettings.php)
php
## 數(shù)據(jù)庫集群配置
$wgDBservers = [
[
'host' => 'db-master.example.com',
'dbname' => 'wikidb',
'user' => 'wikiuser',
'password' => 'StrongPassword123!',
'type' => 'mysql',
'flags' => DBO_DEFAULT,
'load' => 1,
],
[
'host' => 'db-replica.example.com',
'dbname' => 'wikidb',
'user' => 'wikiuser',
'password' => 'StrongPassword123!',
'type' => 'mysql',
'flags' => DBO_DEFAULT | DBO_IGNORE,
'load' => 2,
]
];
## 企業(yè)級緩存配置
$wgMainCacheType = CACHE_REDIS;
$wgSessionCacheType = CACHE_REDIS;
$wgObjectCaches['redis'] = [
'class' => 'RedisBagOStuff',
'servers' => [ 'redis://cache.example.com:6379' ],
'password' => 'RedisPass123!',
];
## LDAP集成
require_once "$IP/extensions/LdapAuthentication/LdapAuthentication.php";
$wgAuth = new LdapAuthenticationPlugin();
$wgLDAPDomainNames = [ 'yourdomain' ];
$wgLDAPServerURLs = [ 'yourdomain' => 'ldap://dc.example.com' ];
$wgLDAPSearchStrings = [ 'yourdomain' => 'uid=USER-NAME,ou=People,dc=example,dc=com' ];
## 高級權(quán)限控制
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['editor']['edit'] = true;
$wgGroupPermissions['sysop']['delete'] = true;
2. 關(guān)鍵擴(kuò)展安裝
bash
# 企業(yè)級擴(kuò)展
cd /var/www/html/wiki/extensions
sudo git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Elastica.git
sudo git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/CirrusSearch.git
sudo git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/LdapAuthentication.git
# 安裝并配置ElasticSearch
$wgDisableSearchUpdate = false;
$wgSearchType = 'CirrusSearch';
wfLoadExtension( 'Elastica' );
wfLoadExtension( 'CirrusSearch' );
五、企業(yè)級安全加固
1. 多層安全防護(hù)
bash
# SELinux策略定制
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wiki/images(/.*)?"
sudo restorecon -R /var/www/html/wiki/images
sudo setsebool -P httpd_can_network_connect_db 1
sudo setsebool -P httpd_can_network_connect 1
# 高級防火墻配置
sudo firewall-cmd --permanent --new-zone=wiki
sudo firewall-cmd --permanent --zone=wiki --add-source=192.168.1.0/24
sudo firewall-cmd --permanent --zone=wiki --add-service=http
sudo firewall-cmd --permanent --zone=wiki --add-service=https
sudo firewall-cmd --permanent --zone=public --remove-service=http
sudo firewall-cmd --reload
2. MediaWiki安全增強(qiáng)
php
## LocalSettings.php 安全擴(kuò)展
$wgEnableUploads = true;
$wgFileBlacklist = [ 'php', 'php3', 'php4', 'phps', 'phtml' ];
$wgMimeTypeBlacklist = [ 'application/x-php', 'text/x-php' ];
$wgVerifyMimeType = true;
# 雙因素認(rèn)證
wfLoadExtension( 'OATHAuth' );
$wgOATHAuthWindow = 2;
$wgOATHAuthDatabase = false;
# API安全限制
$wgAPIModules['edit']['mustbeposted'] = true;
$wgAPIFormatModules['json']['mustbeposted'] = true;
六、企業(yè)級備份方案
1. 多級備份策略
# 數(shù)據(jù)庫增量備份
sudo dnf install percona-xtrabackup-80 -y
sudo nano /backup/wiki_incremental_backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/mysql"
FULL_DIR="$BACKUP_DIR/full"
INC_DIR="$BACKUP_DIR/inc-$DATE"
# 周日全量備份
if [ $(date +%u) -eq 7 ]; then
xtrabackup --backup --target-dir=$FULL_DIR --user=backup --password=BackupPass123!
else
# 增量備份
xtrabackup --backup --target-dir=$INC_DIR \
--incremental-basedir=$FULL_DIR \
--user=backup --password=BackupPass123!
fi
# 備份加密
gpg --batch --yes --passphrase "EncryptionPass123!" -c $INC_DIR/backup.qp
2. 異地備份方案
# 使用Rclone同步到云存儲
sudo dnf install rclone -y
rclone config # 配置云存儲
# 自動備份腳本
sudo nano /backup/wiki_cloud_backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d)
tar -czvf /backup/wiki_full_$DATE.tar.gz /var/www/html/wiki
# 加密備份
gpg --symmetric --batch --passphrase "CloudPass123!" /backup/wiki_full_$DATE.tar.gz
# 上傳到云存儲
rclone copy /backup/wiki_full_$DATE.tar.gz.gpg remote:wiki-backups/
# 保留最近7天備份
find /backup -name "wiki_full_*.tar.gz*" -mtime +7 -delete
七、企業(yè)級監(jiān)控體系
1. Prometheus高級監(jiān)控
yaml
# mediawiki監(jiān)控配置
- job_name: 'mediawiki'
metrics_path: '/wiki/api.php'
params:
action: ['prometheus']
format: ['text']
static_configs:
- targets: ['wiki.example.com']
scheme: https
tls_config:
insecure_skip_verify: true
# MariaDB監(jiān)控
- job_name: 'mariadb'
static_configs:
- targets: ['db-master.example.com:9104']
2. Grafana企業(yè)看板
sql
-- 關(guān)鍵性能指標(biāo)查詢
SELECT
UNIX_TIMESTAMP() as time_sec,
(SELECT Variable_value
FROM information_schema.global_status
WHERE Variable_name='Threads_connected') as connections,
(SELECT Variable_value
FROM information_schema.global_status
WHERE Variable_name='Innodb_row_lock_time_avg') as lock_avg,
(SELECT Variable_value
FROM information_schema.global_status
WHERE Variable_name='Innodb_buffer_pool_wait_free') as buffer_wait
3. 智能告警規(guī)則
yaml
groups:
- name: MediaWiki Alerts
rules:
- alert: HighEditConflict
expr: rate(mediawiki_edit_conflict_total[5m]) > 0.5
for: 10m
labels:
severity: warning
annotations:
summary: "編輯沖突率過高 ({{ $value }} conflicts/min)"
description: "檢測到異常編輯沖突,可能存在并發(fā)問題"
- alert: DatabaseSlowQuery
expr: rate(mysql_global_status_slow_queries[5m]) > 10
for: 5m
labels:
severity: critical
annotations:
summary: "數(shù)據(jù)庫慢查詢激增 ({{ $value }} queries/min)"
description: "需要檢查查詢優(yōu)化或索引狀態(tài)"
八、企業(yè)運維體系
1. 自動化維護(hù)
# 使用systemd定時器
sudo nano /etc/systemd/system/wiki-maintenance.timer
[Unit]
Description=MediaWiki daily maintenance
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo nano /etc/systemd/system/wiki-maintenance.service
[Unit]
Description=MediaWiki Maintenance
[Service]
Type=oneshot
ExecStart=/usr/bin/php /var/www/html/wiki/maintenance/update.php
ExecStart=/usr/bin/php /var/www/html/wiki/maintenance/runJobs.php
ExecStart=/usr/bin/php /var/www/html/wiki/maintenance/purgeOldText.php
2. 災(zāi)難恢復(fù)計劃
markdown
1. **故障分級響應(yīng)**:
- Level1 (頁面不可訪問):5分鐘內(nèi)切換CDN至備用站點
- Level2 (數(shù)據(jù)庫故障):15分鐘內(nèi)啟用只讀副本
- Level3 (全站故障):30分鐘內(nèi)啟用異地備份
2. **恢復(fù)流程**:
├─ 驗證備份完整性 (md5sum檢查)
├─ 基礎(chǔ)環(huán)境恢復(fù) (Puppet/Ansible自動化)
├─ 數(shù)據(jù)庫恢復(fù)順序:
│ 1. 恢復(fù)最新全量備份
│ 2. 應(yīng)用增量備份
│ 3. 執(zhí)行binlog重放
├─ 文件系統(tǒng)恢復(fù) (rsync校驗)
└─ 服務(wù)驗證:
- 關(guān)鍵頁面訪問檢查
- 編輯功能測試
- 搜索服務(wù)驗證
3. **RTO/RPO指標(biāo)**:
- RTO (恢復(fù)時間目標(biāo)):45分鐘
- RPO (數(shù)據(jù)恢復(fù)點目標(biāo)):5分鐘數(shù)據(jù)丟失
九、企業(yè)級架構(gòu)圖
圖表
十、知識庫最佳實踐
1. 內(nèi)容管理規(guī)范
markdown
1. **分類體系**:
├─ 01_公司制度
├─ 02_部門知識
│ ├─ 研發(fā)中心
│ ├─ 市場運營
│ └─ 客戶服務(wù)
├─ 03_項目文檔
└─ 04_最佳實踐
2. **版本控制**:
- 使用`__VERSION__`標(biāo)記文檔版本
- 重大變更需添加變更日志章節(jié)
3. **審核流程**:
草稿 → 部門審核 → 知識委員會 → 發(fā)布
2. 高級搜索優(yōu)化
php
// 啟用ElasticSearch高級功能
$wgCirrusSearchIndexBaseName = 'wiki';
$wgCirrusSearchPhraseSlop = [ 'boost' => 1.5 ];
$wgCirrusSearchUseExperimentalHighlighter = true;
$wgCirrusSearchCompletionSuggesterUseDefault = true;
通過以上深度整合方案,您將獲得一個具備企業(yè)級安全性、高可用性、易維護(hù)性的知識庫系統(tǒng),滿足ISO 27001安全標(biāo)準(zhǔn)和SLA 99.99%可用性要求。
## 關(guān)鍵增強(qiáng)點說明
1. **企業(yè)級安全架構(gòu)**:
- 多層防御(SELinux+Firewalld+Fail2ban)
- 雙因素認(rèn)證和LDAP集成
- 內(nèi)容安全策略(CSP)保護(hù)
- 數(shù)據(jù)庫最小權(quán)限原則
2. **高性能架構(gòu)**:
- PHP 8.2 + OPcache優(yōu)化
- Redis多級緩存
- ElasticSearch全文搜索
- HTTP/2和Brotli壓縮
3. **可靠性設(shè)計**:
- 數(shù)據(jù)庫主從架構(gòu)
- 增量+全量備份策略
- 自動化災(zāi)難恢復(fù)流程
- 跨區(qū)域云備份
4. **企業(yè)運維支持**:
- Prometheus深度監(jiān)控
- 智能告警規(guī)則
- systemd維護(hù)定時器
- 自動化配置管理
5. **合規(guī)性保障**:
- 訪問審計日志
- 加密數(shù)據(jù)存儲
- 權(quán)限分級控制
- 變更管理流程
此方案適用于200人以上企業(yè)環(huán)境,支持每日10萬次頁面訪問,通過架構(gòu)橫向擴(kuò)展可支持千萬級文檔存儲。

浙公網(wǎng)安備 33010602011771號