企业级MediaWiki知识库系统搭建部署指南(CentOS 8)

一、高级环境准备

1. 系统优化与安全加固

```bash

系统更新与内核优化

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性能优化

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. 数据库高级配置

bash

# 创建专用数据目录

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

二、企业级数据库部署

1. 安全初始化

bash

sudo mysql_secure_installation <<EOF

y

StrongRootPass123!

y

y

y

y

EOF

2. 高级数据库配置

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;

-- 创建监控用户

CREATE USER 'monitor'@'localhost' IDENTIFIED BY 'MonitorPass123!';

GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'localhost';

三、高可用MediaWiki安装

1. 源码编译安装(优化性能)

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

# 设置高级权限

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

安全头设置

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>

日志格式扩展

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>

四、企业级Web安装配置

1. 高级安装选项(LocalSettings.php)

php

## 数据库集群配置

$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,

];

## 企业级缓存配置

$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' ];

## 高级权限控制

$wgGroupPermissions['*']['read'] = true;

$wgGroupPermissions['*']['edit'] = false;

$wgGroupPermissions['editor']['edit'] = true;

$wgGroupPermissions['sysop']['delete'] = true;

2. 关键扩展安装

bash

# 企业级扩展

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' );

五、企业级安全加固

1. 多层安全防护

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安全增强

php

## LocalSettings.php 安全扩展

$wgEnableUploads = true;

$wgFileBlacklist = [ 'php', 'php3', 'php4', 'phps', 'phtml' ];

$wgMimeTypeBlacklist = [ 'application/x-php', 'text/x-php' ];

$wgVerifyMimeType = true;

# 双因素认证

wfLoadExtension( 'OATHAuth' );

$wgOATHAuthWindow = 2;

$wgOATHAuthDatabase = false;

# API安全限制

$wgAPIModules['edit']['mustbeposted'] = true;

$wgAPIFormatModules['json']['mustbeposted'] = true;

六、企业级备份方案

1. 多级备份策略

# 数据库增量备份

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

七、企业级监控体系

1. Prometheus高级监控

yaml

# mediawiki监控配置

  • job_name: 'mediawiki'

metrics_path: '/wiki/api.php'

params:

action: ['prometheus']

format: ['text']

static_configs:

scheme: https

tls_config:

insecure_skip_verify: true

# MariaDB监控

  • job_name: 'mariadb'

static_configs:

2. Grafana企业看板

sql

-- 关键性能指标查询

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. 智能告警规则

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: "检测到异常编辑冲突,可能存在并发问题"

  • alert: DatabaseSlowQuery

expr: rate(mysql_global_status_slow_queries[5m]) > 10

for: 5m

labels:

severity: critical

annotations:

summary: "数据库慢查询激增 ({{ $value }} queries/min)"

description: "需要检查查询优化或索引状态"

八、企业运维体系

1. 自动化维护

# 使用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. 灾难恢复计划

markdown

  1. ** 故障分级响应**
  • Level1 (页面不可访问):5分钟内切换CDN至备用站点

  • Level2 (数据库故障):15分钟内启用只读副本

  • Level3 (全站故障):30分钟内启用异地备份

  1. ** 恢复流程**

├─ 验证备份完整性 (md5sum检查)

├─ 基础环境恢复 (Puppet/Ansible自动化)

├─ 数据库恢复顺序:

│ 1. 恢复最新全量备份

│ 2. 应用增量备份

│ 3. 执行binlog重放

├─ 文件系统恢复 (rsync校验)

└─ 服务验证:

  • 关键页面访问检查

  • 编辑功能测试

  • 搜索服务验证

  1. **RTO/RPO 指标**
  • RTO (恢复时间目标):45分钟

  • RPO (数据恢复点目标):5分钟数据丢失

九、企业级架构图

图表

十、知识库最佳实践

1. 内容管理规范

markdown

  1. ** 分类体系**

├─ 01_公司制度

├─ 02_部门知识

│ ├─ 研发中心

│ ├─ 市场运营

│ └─ 客户服务

├─ 03_项目文档

└─ 04_最佳实践

  1. ** 版本控制**
  • 使用`VERSION`标记文档版本

  • 重大变更需添加变更日志章节

  1. ** 审核流程**

草稿 → 部门审核 → 知识委员会 → 发布

2. 高级搜索优化

php

// 启用ElasticSearch高级功能

$wgCirrusSearchIndexBaseName = 'wiki';

$wgCirrusSearchPhraseSlop = [ 'boost' => 1.5 ];

$wgCirrusSearchUseExperimentalHighlighter = true;

$wgCirrusSearchCompletionSuggesterUseDefault = true;

通过以上深度整合方案,您将获得一个具备企业级安全性、高可用性、易维护性的知识库系统,满足ISO 27001安全标准和SLA 99.99%可用性要求。

关键增强点说明

  1. **企业级安全架构**:
  • 多层防御(SELinux+Firewalld+Fail2ban)

  • 双因素认证和LDAP集成

  • 内容安全策略(CSP)保护

  • 数据库最小权限原则

  1. **高性能架构**:
  • PHP 8.2 + OPcache优化

  • Redis多级缓存

  • ElasticSearch全文搜索

  • HTTP/2和Brotli压缩

  1. **可靠性设计**:
  • 数据库主从架构

  • 增量+全量备份策略

  • 自动化灾难恢复流程

  • 跨区域云备份

  1. **企业运维支持**:
  • Prometheus深度监控

  • 智能告警规则

  • systemd维护定时器

  • 自动化配置管理

  1. **合规性保障**:
  • 访问审计日志

  • 加密数据存储

  • 权限分级控制

  • 变更管理流程

此方案适用于200人以上企业环境,支持每日10万次页面访问,通过架构横向扩展可支持千万级文档存储。

相关推荐
LB211215 分钟前
Maven(黑马)
linux·服务器·maven
Mr.小海37 分钟前
vmware虚拟机固定IP
网络·网络协议·tcp/ip
alex180140 分钟前
ubuntu磁盘挂载
linux·数据库·ubuntu
Stardep1 小时前
Linux下目录递归拷贝的单进程实现
linux·运维·服务器·实验
hawk2014bj1 小时前
KVM 安装 Ubuntu 22
linux·运维·ubuntu
nako_sayuri1 小时前
Linux进程间通信----简易进程池实现
linux·服务器·进程池
捏尼卜波卜1 小时前
TCP 四次挥手
服务器·网络·tcp/ip
藥瓿亭1 小时前
Vim常用快捷键
linux·ubuntu·centos·vim
mooyuan天天2 小时前
pikachu靶场通关笔记06 XSS关卡02-反射型POST
网络·web安全·反射型xss·pikachu靶场·xss漏洞
HinsCoder2 小时前
【技能拾遗】——家庭宽带单线复用布线与配置(移动2025版)
运维·网络·笔记·智能路由器·iptv·移动·单线复用