Ubuntu下部署MediaWiKi小記


layout: post
title: “Ubuntu下部署MediaWiKi小記”
subtitle: “海納百川,有容乃大”
date: “2017-05-14”
author: “cj”
tags:
web
ubuntu
mediawiki
visualeditor
parsoid
postfix

Ubuntu下部署MediaWiKi小記

MediaWiki簡介

MediaWiki是一款基於服務器的自由軟件,並獲得了 GNU 通用公共許可證 (GPL)的許可。這款軟件的設計之目的是使其運行於一個每天擁有百萬次點擊量網站的大型服務器羣組上。

MediaWiki是一款極其強大、具有極強擴展性的軟件,也是實現維基(wiki)豐富多彩的功能的一個載體,其使用PHP語言來處理和顯示貯存在一個數據庫中的數據,譬如MySQL。

維基頁面使用MediaWiki的維基文本格式編寫,以便使那些不會使用HTML或CSS的用戶也能輕鬆地編輯頁面。

當一個用戶提交一個頁面編輯時,MediaWiki就會將這次動作寫入後臺數據庫,但不會刪除之前頁面的版本。因此,管理員就可以輕而易舉地撤回編輯,以防破壞者或垃圾信息對頁面的損壞。當然,MediaWiki也可以管理圖片和其他流媒體文件,這些媒體文件貯存在檔案系統之中。對於擁有大量用戶的大型維基站點,MediaWiki支持高速緩存,亦可以輕鬆地與“魷魚代理服務器(Squid proxy server software)”軟件聯接。

沒說的,一看是WikiPedia的後臺程序,就它了!

安裝MediaWiki

1.搭建環境

騰訊雲的虛擬主機,Ubuntu 16.04.2 TLS
apache2/mysql環境搭建就不提了,基本功。
因爲我80端口另有用途,對外開放的站點都是用https,所以要設置Apache默認監聽端口爲443。

sudo vi /etc/apache2/ports.conf
Change Listen 80 to Listen 443
sudo vi /etc/apache2/sites-enabled/000-default.conf
Change <VirtualHost *:80> to <VirtualHost *:443>

安裝php與其他依賴庫

sudo apt-get update 
sudo apt-get upgrade
sudo apt-get install imagemagick php php7.0-intl php7.0-curl php7.0-gd php7.0-mbstring php7.0-mysql libapache2-mod-php php-xml php-mbstring
sudo a2enmod rewrite
sudo phpenmod mbstring
sudo phpenmod xml

2. 下載安裝

訪問Download頁面,下載最新版到/home/user/Downloads

wget https://releases.wikimedia.org/mediawiki/1.28/mediawiki-1.28.2.tar.gz
tar zxvf mediawiki-1.28.2.tar.gz
sudo mkdir /var/lib/mediawiki
sudo mv mediawiki-1.28.2/* /var/lib/mediawiki

3. 創建軟鏈接並設置合適的權限

ln -s /var/lib/mediawiki /var/www/html/wiki
chown -R www-data:www-data /var/www/html/wiki

4. 創建數據庫

mysql -u root -p
mysql> SET GLOBAL sql_mode='';
mysql> CREATE DATABASE wikidb;
mysql> CREATE USER 'wikiuser'@'localhost' IDENTIFIED BY 'y0uR-pa5sW0rd';
mysql> GRANT ALL PRIVILEGES ON wikidb.* TO 'wikiuser'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

5. 在Apache中添加新虛擬主機的配置並重啓Apache

touch /etc/apache2/sites-available/mediawiki.conf
ln -s /etc/apache2/sites-available/mediawiki.conf /etc/apache2/sites-enabled/mediawiki.conf
vi /etc/apache2/sites-available/mediawiki.conf

寫入如下內容

<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/html/wiki/
ServerName your-domain.com
ServerAlias www.your-domain.com
<Directory /var/www/html/wiki/>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/your-domain.com-error_log
CustomLog /var/log/apache2/your-domain.com-access_log common
</VirtualHost>

重啓Apache:

sudo systemctl restart apache2

6. 配置MediaWiki

訪問https://your-domain.com/wiki
根據提示進行配置,Store Engine 選擇 InnoDB, Database charactor set 選擇 UTF-8,其他隨意。

配置完成後下載LocalSettings.php並放入/var/www/html/wiki/,在尾部追加如下內容:

# Speed improvements
$wgUseGzip = true;
$wgUseFileCache = true;

# Performance settings
$wgDisableCounters = true;
$wgMiserMode = true;

現在可以訪問https://your-domain.com/wiki 進行編輯了

7. 安裝VisualEditor插件

訪問網址找到最新版VisualEditor下載地址。

wget https://extdist.wmflabs.org/dist/extensions/VisualEditor-REL1_28-93528b7.tar.gz
tar -xzf VisualEditor-REL1_28-93528b7.tar.gz -C /var/www/wiki/extensions

編輯/var/www/html/wiki/LocalSettings.php,追加如下內容:

wfLoadExtension( 'VisualEditor' );
$wgDefaultUserOptions['visualeditor-enable'] = 1;
$wgHiddenPrefs[] = 'visualeditor-enable';

此時VisualEditor插件已經生效了,但只能新建詞條並編輯,不能保存,不能編輯已有的詞條。

8. 安裝parsoid

parsoid依賴npm,首先安裝npm

sudo apt-get install nodejs npm

下載parsoid到/home/user/Downloads並解壓安裝

git clone https://gerrit.wikimedia.org/r/p/mediawiki/services/parsoid
cd parsoid
npm install

配置parsoid

cp config.example.yaml config.yaml

編輯

uri: 'https://you-domain.com/wiki/api.php'
domain: 'localhost'  # optional
serverPort: 8000
serverInterface: '127.0.0.1'

注意由於啓用了https,因此uri不能使用https://localhost/wiki/api.php ,會導致ssl驗證失敗無法訪問。

運行

nohup node bin/server.js &

測試

curl localhost:8000

使MediaWiki可以找到parsoid,編輯/var/www/html/wiki/LocalSettings.php,追加如下內容:

$wgVirtualRestConfig['modules']['parsoid'] = array(
        'url' => 'http://localhost:8000',
        'domain' => 'localhost',
        'prefix' => 'localhost'
);

9. 私有化

2017年5月16日增補

編輯/var/www/html/wiki/LocalSettings.php,

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

$wgSessionsInObjectCache = true;
$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;

禁用了匿名用戶的查看、編輯、創建用戶功能。並轉發cookies到parsoid。後面2句必須添加,否則私有維基無法使用VisualEditor。
想要開放匿名用戶對指定頁面的查看權限,使用如下語句:

$wgWhitelistRead = array(urldecode("%E9%A6%96%E9%A1%B5"));

開啓了“首頁”的匿名查看權限。

搭建郵件服務器

由於安全原因,需要配置MediaWiki安全策略使得註冊用戶纔可編輯,而用戶註冊需要驗證郵箱,因此需要安裝postfix。

以下皆以[email protected]爲例說明。

1. 創建admin用戶

sudo useradd -G root admin
passwd admin
su - admin

2. 安裝

sudo DEBIAN_PRIORITY=low apt-get install postfix

在安裝嚮導中作如下設置:

  • General type of mail configuration?: Internet Site
  • System mail name: your-domain.com (not mail.example.com)
  • Root and postmaster mail recipient: admin
  • Other destinations to accept mail for: $myhostname, your-domain.com, mail.your-domain.com, localhost.your-domain.com, localhost
  • Force synchronous updates on mail queue?: No
  • Local networks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  • Mailbox size limit: 0
  • Local address extension character: +
  • Internet protocols to use: all

如果有需要隨時可以重新配置

sudo dpkg-reconfigure postfix

3. 配置

使用Maildir格式,基於用戶操作會自動將郵件歸檔到不同的文件夾(cur, new, sent, tmp)內。另一種可用的格式是mbox,會將所有郵件保存爲一個文件。

sudo postconf -e 'home_mailbox= Maildir/'
sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

4. 映射郵件地址到Linux賬戶

sudo vi /etc/postfix/virtual

寫入

[email protected] admin
[email protected] admin

應用並重啓postfix

sudo postmap /etc/postfix/virtual
suto systemctl restart postfix

5. 添加防火牆例外

sudo ufw allow Postfix

我的虛擬主機是騰訊雲,需要配置安全策略,添加郵件收發需要用到的端口到例外:

  • SMTP - port 25 or 2525 or 587
  • Secure SMTP (SSL / TLS) - port 465 or 25 or 587, 2526 (Elastic Email)
  • POP3 - port 110
  • IMAP - port 143
  • IMAP SSL (IMAPS) - port 993

6. 設置環境變量

echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh
sudo source /etc/profile.d/mail.sh

7. 安裝配置郵件客戶端s-nail

sudo apt-get install s-nail
sudo vi /etc/s-nail.rc

追加如下內容:

set emptystart
set folder=Maildir
set record=+sent

8. 測試

(1) 給本機賬戶發一封郵件

echo 'hello world' | mail -s 'this is a subject' -Snorecord admin

此時會有如下錯誤

Output
Can't canonicalize "/home/admin/Maildir"

這是正常的且只會出現一次。可以使用

ls -R ~/Maildir

來確保目錄存在。可以看到目錄結構已經被創建,新的郵件已經被歸檔到~/Maildir/new中:

Output
/home/admin/Maildir/:
cur  new  tmp

/home/admin/Maildir/cur:

/home/admin/Maildir/new:
1463177269.Vfd01I40e4dM691221.mail.your-domain.com

/home/sammy/Maildir/tmp:

(2) 給外部用戶如[email protected]發送一封郵件

echo 'Accorss the Greate Wall we can reach every corner in the world!' | mail -s 'Hello Wolrd!' -r admin '[email protected]'

選項說明:

可以運行以下命令查看已發郵件

mail
file +sent

完工

打開https://your-domain.com/wiki ,註冊一個賬戶,創建一個頁面,盡情享受“海納百川,有容乃大”吧!

Enjoy it!

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章