使用 Docker 部署 MediaWiki
0 簡介
MediaWiki 是 Wikipedia 使用的網站解決方案的開源版,以個人觀點來看,Wiki 在這個時代顯得不夠時尚,且不支持 MarkDown 等新興的標記語言,另外頁面的組織方式采用了自己的一套管理語言,上手需要一定的學習成本。不過經典總歸是經典。
MediaWiki 也提供了官方的 Docker image,這就節省了不少安裝環境的工作量,接下來就來看看私有 MediaWiki 站點是如何搭建起來的吧。
1 使用 docker 安裝 MediaWiki
第一部分中的命令除非特殊說明,都需要 root 權限。
1.1 安裝 Docker
第一部自然是要先安裝 docker,我們使用官方的 docker 安裝腳本來規避不同操作系統安裝命令不同的問題,命令運行結束后,docker 就安裝好了,如果你的環境中還沒有 wget 命令,CentOS 和 RedHat 用 yum install -y wget,Debian 和 Ubuntu 系統用 apt install -y wget 安裝。
# wget -qO- https://get.docker.com/ | sh接下來需修改 docker 的下載源:
# cat /etc/docker/daemon.json {"registry-mirrors": ["https://registry.docker-cn.com","http://hub.c.163.com"] }# systemctl restart docker.service1.2 下載所需的 docker images
MediaWiki 需要 MySQL,且 MediaWiki 鏡像中不提供 MySQL,所以 MySQL 鏡像也須要下載。
# docker pull wikimedia/mediawiki:1.30.0-wmf4 # docker pull mysql/mysql-server:5.71.3 啟動 MediaWiki 和 MySQL,并關聯
MediaWiki 需要依賴于 MySQL,所以要先啟動 MySQL,再啟動 MediaWiki,不然啟動會失敗。而且需要開啟 MySQL 的遠程連接權限。
# docker run -d --name mediawiki-mysql -e MYSQL_ROOT_PASSWORD=<mysql-root-password> mysql/mysql-server:5.7 # docker exec -it mediawiki-mysql /bin/bash bash-4.2# mysql -uroot -p<mysql-root-password> ...... mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<mysql-root-password>' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;然后啟動 MediaWiki。
# docker run --name facethink-mediawiki --link mediawiki-mysql:mysql -p 80:80 -e MEDIAWIKI_DB_PASSWORD=<mysql-root-password> -d wikimedia/mediawiki:1.30.0-wmf4需要注意的是,啟動 MediaWiki 時,需要使用 --link 參數來關聯之前啟動的 MySQL。
另外 -p 將 MediaWiki docker 中的 80 端口和 docker 宿主機上的 80 端口綁定在了一起。在瀏覽器中訪問 docker 宿主機的 IP 就可以訪問剛剛建好的 MediaWiki 網站了。不過要保證宿主機上 80 端口沒有被其他程序占用,不然 docker run 命令無法執行成功。
下面就是剛剛建好的 wiki 站點頁面,過程并不復雜,如果遇到問題,可以流言討論:
MediaWiki main page2. MediaWiki 配置
2.1 MediaWiki 的默認管理員
Wiki 是有了,不過這么素的界面,當然是要做些配置,那么就需要管理員權限了,可在安裝過程中,我們并不知道這些信息。不過我們可以從 MySQL 中找到。
# docker exec -it mediawiki-mysql -- mysql -uroot -p<mysql-root-password> ...... mysql> use mediawiki; mysql> select * from user; mysql> select * from user; +---------+-----------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+---------------------+----------------+----------------------------------+--------------------------+----------------------------------+--------------------------+-------------------+----------------+-----------------------+ | user_id | user_name | user_real_name | user_password | user_newpassword | user_newpass_time | user_email | user_touched | user_token | user_email_authenticated | user_email_token | user_email_token_expires | user_registration | user_editcount | user_password_expires | +---------+-----------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+---------------------+----------------+----------------------------------+--------------------------+----------------------------------+--------------------------+-------------------+----------------+-----------------------+ | 1 | Admin | | :pbkdf2:sha512:30000:64:CyuznKx44JuAClGG7avxow==:V9MLp3r/obJIjv+BR2Bs0eCvyWkyDK0eveqEE+9HiUgxvMjzu26kGBz+BcZSmlRssLswzq1j3a+PVuh6AFEaxQ== | | NULL | NULL | 20180622063649 | 490898f83d4ad9d1ec1c0276a740209b | NULL | d3bcbd107e31220c891334c8e1ba0440 | 20180629063644 | 20180622050411 | 0 | NULL +---------+-----------+----------------+-------------------------------------------------------------------------------------------------------------------------------------------+------------------+-------------------+---------------------+----------------+----------------------------------+--------------------------+----------------------------------+--------------------------+-------------------+----------------+-----------------------+看以看到默認賬戶是 Admin,但密碼是加密的,好在 root 用戶是有權限修改這個密碼的,
mysql> UPDATE user SET user_password = MD5( CONCAT( user_id, '-', MD5( 'NEWPASS' ) ) ) WHERE user_id =1;至此,我們終于可以用管理員的權限登陸了。
login page2.2 使用 php 變量配置 MediaWiki 站點地址
假設已經為站點申請了域名:wiki.example.com,如何讓 wiki 自己能夠識別這個域名呢?
這需要登陸到 MediaWiki 的 docker 中去,修改配置文件。MediaWiki 是 php 語言編寫的,所以配置文件以 .php 后綴結尾。
php 可以動態讀取配置文件,所以無需重啟即可生效。
2.3 修改 Logo
默認 logo 是金色的葵花,那么如何更換成自己心儀的圖標呢?
首先需要開啟 wiki 的文件上傳功能:
然后給 /var/www/html/images 目錄添加全部用戶開啟所有權限。
$ sudo docker exec -it facethink-mediawiki /bin/bash root@1a0f3692a08d:/# chmod 777 /var/www/html/images然后在 Upload File 頁面上傳文件:
找到文件所在目錄:
# ll /var/www/html/images/thumb/6/64/example.png/120px-example.png修改 php 配置文件:
$ sudo docker exec -it facethink-mediawiki /bin/bash root@1a0f3692a08d:/# vi /var/www/html/LocalSettings.php ... $wgLogo = $wgScriptPath . "images/thumb/6/64/example.png/120px-example.png"; ...好了,刷新一下頁面,看看更換 logo 之后效果如何吧。
2.4 郵箱配置
MediaWiki 的郵箱配置很坑,調試不太方便,而且默認配置很容易被判定成垃圾郵件, 或者無效,被拒掉,需要調整發件人的地址來規避。這里用的是 Elastic Email 的郵件服務器系統,這里大家需要自己注冊。
配置部分還是需要修改 /var/www/html/LocalSettings.php
# cat /var/www/html/LocalSettings.php ... $wgServerName = "example.com"; $wgPasswordSender = "";$wgSMTP = array('host' => 'smtp.elasticemail.com','port' => 2525,'IDHost' => 'wiki.example.com','username' => <user-id>,'password' => <password>,'auth' => true ); ...同時需要安裝 PHP 與郵件發送相關的插件,這里還需要說明一點,MediaWiki 的 docker 雖然能運行 PHP 代碼,但實際上并沒有安裝 PHP,原因是 Apache 能夠解析運行 PHP,LAMP 果然是集成度很高。而安裝 pear 是要依賴于 PHP 環境的,所以必須要安裝 PHP。
# apt install php, php-pear # pear install mail, net_smtp2.5 限制用戶權限
如果不想開放 Wiki 的公開注冊,并且在未登陸時,限制可見的頁面的話,還是需要通過對 LocalSettings.php 的定制實現。
# cat /var/www/html/LocalSettings.php ... # Prevent new user registrations $wgWhitelistAccount = array("user" => 0, "sysop" => 1, "developer" => 1); $wgGroupPermissions['*']['createaccount'] = false; $wgGroupPermissions['*']['read'] = true; $wgGroupPermissions['*']['edit'] = false; $wgWhitelistRead = array("Main Page", "Special:Userlogin", "Wikipedia:Help"); ...2.6 添加用戶
現在已經關閉了用戶注冊,那用戶只能手動添加了。MediaWiki 也提供添加用戶的腳本:
# apt install php-mbstring, php-mysql # php /usr/src/mediawiki/maintenance/createAndPromote.php --conf=/var/www/html/LocalSettings.php --force <user-id> <password>3. 參考文檔
- MySQL Docker
- MediaWiki docker file
- MediaWiki default admin user and password
- MediaWiki configuration settings
- Trouble uploading after installation
總結
以上是生活随笔為你收集整理的使用 Docker 部署 MediaWiki的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D引擎Axiom的选择与学习
- 下一篇: 【一键卸载mysql-5.7.38数据库