The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
Difference between revisions of "Package:MediaWiki"
Threesixes (talk | contribs) |
Threesixes (talk | contribs) m (add tip to define user supplied default landing page, and publish arbitrary sidebar items. fixed some TT =D) |
||
Line 13: | Line 13: | ||
== Portage Settings == | == Portage Settings == | ||
Add the following line to < | Add the following line to <code>/etc/make.conf</code>: | ||
Line 20: | Line 20: | ||
</pre> | </pre> | ||
Add the following lines to < | Add the following lines to <code>/etc/portage/package.use/php</code>: | ||
<pre> | <pre> | ||
Line 50: | Line 50: | ||
== Database Setup == | == Database Setup == | ||
Now, let's create a database named < | Now, let's create a database named <code>mediawiki</code> for use by MediaWiki, and a <code>mediawiki@localhost</code> user to access this database, using a password of <code>wikifever</code>: | ||
<console> | <console> | ||
Line 88: | Line 88: | ||
== User and Group == | == User and Group == | ||
When we run our wiki, we will run it as the < | When we run our wiki, we will run it as the <code>docs</code> user, for security. Let's set up a <code>docs</code> user and group: | ||
<console> | <console> | ||
Line 99: | Line 99: | ||
== Set up PHP == | == Set up PHP == | ||
As our last major configuration step, we will configure the PHP FastCGI Process Manager by creating a < | As our last major configuration step, we will configure the PHP FastCGI Process Manager by creating a <code>/etc/php/fpm-php5.4/php-fpm.conf</code> file with the following contents (existing contents can be deleted): | ||
{{file|name=/etc/php/fpm-php5.4/php-fpm.conf|desc= |body= | {{file|name=/etc/php/fpm-php5.4/php-fpm.conf|desc= |body= | ||
Line 126: | Line 126: | ||
posix_getgrgid, parse_ini_file, proc_get-status, proc_nice, proc_terminate, suexec, pclose, virtual, set_time_limit, show_source | posix_getgrgid, parse_ini_file, proc_get-status, proc_nice, proc_terminate, suexec, pclose, virtual, set_time_limit, show_source | ||
}} | }} | ||
This configuration file tells PHP to use the < | This configuration file tells PHP to use the <code>docs</code> user when running MediaWiki. '''Please note that the last line is very long - I have split it into 3 lines for readability on this wiki, but you should combine them into a single line in your configuration file. The line should start with <code>php_admin_value[disable_functions]</code> and end with <code>show_source</code>. | ||
== Configure Nginx == | == Configure Nginx == | ||
Oh! Now we need to configure nginx to serve pages as the docs user. Assuming your site is named wiki.mysite.com, create a < | Oh! Now we need to configure nginx to serve pages as the docs user. Assuming your site is named wiki.mysite.com, create a <code>/etc/nginx/sites-available/wiki.mysite.com</code> file with the following contents: | ||
<pre> | <pre> | ||
Line 234: | Line 234: | ||
== Download MediaWiki == | == Download MediaWiki == | ||
We're getting close. Now, head to http://www.mediawiki.org/wiki/Download and copy the link address for the latest version of MediaWiki, currently 1.19.1 at the time this was written. Let's download the archive to < | We're getting close. Now, head to http://www.mediawiki.org/wiki/Download and copy the link address for the latest version of MediaWiki, currently 1.19.1 at the time this was written. Let's download the archive to <code>/var/tmp</code>: | ||
<console> | <console> | ||
Line 275: | Line 275: | ||
== Initial Web Config == | == Initial Web Config == | ||
You will now be able to load the URL of your server in your Web browser and configure MediaWiki through the Web user interface. Complete the '''full''' installation process and be sure to specify that you are using XCache for caching. Once you go through this process, the Web installation process will provide you with a < | You will now be able to load the URL of your server in your Web browser and configure MediaWiki through the Web user interface. Complete the '''full''' installation process and be sure to specify that you are using XCache for caching. Once you go through this process, the Web installation process will provide you with a <code>LocalSettings.php</code> file, which you should place in <code>/home/docs/public_html</code>. The <code>LocalSettings.php</code> file can also be manually edited and used to enable MediaWiki features and extensions. | ||
== Tips and Tricks == | == Tips and Tricks == | ||
=== Main Page === | |||
To define your default landing page for mediawiki. | |||
edit: localhost/wiki/MediaWiki:Mainpage | |||
example: http://www.funtoo.org/MediaWiki:Mainpage | |||
=== Sidebar === | |||
To define your own sidebar links, edit localhost/wiki/MediaWiki:Sidebar | |||
links follow the page|text format. example: | |||
http://www.funtoo.org/MediaWiki:Sidebar | |||
=== ArticlePath === | === ArticlePath === | ||
By default, MediaWiki pages will have a URL of < | By default, MediaWiki pages will have a URL of <code>wiki.myserver.com/index.php?title=PageName</code>. With a few minor tweaks, you can tell MediaWiki to use <code>wiki.myserver.com/PageName</code> instead. Here's how. Open up <code>LocalSettings.php</code> and search for the <code>$wgScriptPath</code> line. This part of the config will look like this: | ||
<pre> | <pre> | ||
Line 301: | Line 313: | ||
=== $wgSpamRegex === | === $wgSpamRegex === | ||
You may find that your wiki is the target of spammers. The easiest way to combat spam is to set < | You may find that your wiki is the target of spammers. The easiest way to combat spam is to set <code>$wgSpamRegex</code> in <code>LocalSettings.php</code>, like so: | ||
<pre> | <pre> | ||
Line 311: | Line 323: | ||
=== DNS Blacklist === | === DNS Blacklist === | ||
MediaWiki also has the ability to consult a DNS blacklist to prevent known forum and wiki spam sites from performing any edits on your wiki. To enable this capability, add the following to < | MediaWiki also has the ability to consult a DNS blacklist to prevent known forum and wiki spam sites from performing any edits on your wiki. To enable this capability, add the following to <code>LocalSettings.php</code>: | ||
<pre> | <pre> | ||
Line 331: | Line 343: | ||
=== $wgServer === | === $wgServer === | ||
Here is an important tip -- the <code>$wgServer</code> variable in <code>LocalSettings.php</code> defines the URL of your MediaWiki installation. MediaWiki will encode this within its HTML replies, which means that the Web browser from which you are accessing MediaWiki must be able to reach your server using this address, or pages will not display. This is not a security feature in any way, but a configuration issue. For example, if <code>$wgServer</code> is set to <code>10.0.1.128</code>, then the only systems that will be able to access your MediaWiki installation are those for which < | Here is an important tip -- the <code>$wgServer</code> variable in <code>LocalSettings.php</code> defines the URL of your MediaWiki installation. MediaWiki will encode this within its HTML replies, which means that the Web browser from which you are accessing MediaWiki must be able to reach your server using this address, or pages will not display. This is not a security feature in any way, but a configuration issue. For example, if <code>$wgServer</code> is set to <code>10.0.1.128</code>, then the only systems that will be able to access your MediaWiki installation are those for which <code>10.0.1.128</code> resolves to your MediaWiki installation. The same is true of non-IP <code>$wgServer</code> entries like <code>wiki.mysite.com</code>. If you are setting up a test wiki, you may need a temporary entry in a desktop's <code>/etc/hosts</code> file so that it can interact with the wiki properly before DNS is set up. | ||
=== $wgLogo === | === $wgLogo === | ||
If you want to change the wiki logo, edit < | If you want to change the wiki logo, edit <code>LocalSettings.php</code> and replace $wgLogo with the location of the image you want to use: | ||
<pre> | <pre> | ||
$wgLogo = "image.png" | $wgLogo = "image.png" | ||
</pre> | </pre> | ||
{{fancynote| The above references the file < | {{fancynote| The above references the file <code>image.png</code> in the directory <code>/home/docs/public_html</code>}} | ||
=== MySQL wildcard searches === | === MySQL wildcard searches === |
Revision as of 02:08, September 20, 2014
MediaWiki
We welcome improvements to this page. To edit this page, Create a Funtoo account. Then log in and then click here to edit this page. See our editing guidelines to becoming a wiki-editing pro.
This page documents how to install MediaWiki from source, which is the preferred method. It also shows how to use MediaWiki with php-5.4. As of late 1.22 and 1.23, MediaWiki now unofficially works with php-5.5.
MediaWiki is a Web-server-stack web application. This page documents how to set up MediaWiki on Funtoo Linux, from a bare stage3 install with network connectivity. We will use Nginx, xcache and PHP-FPM, which will result in very good performance. We will also properly secure MediaWiki, and also cover some additional tips and tricks, focusing on spam reduction.
Portage Settings
Add the following line to /etc/make.conf
:
PHP_TARGETS="php5-4"
Add the following lines to /etc/portage/package.use/php
:
dev-lang/php curl exif fpm gd mysql mysqli sockets suhosin threads intl xmlreader xmlwriter >=dev-php/xcache-2.0.0 php_targets_php5-4
Emerge
Emerge xcache, and we'll also emerge metalog and postfix. This should pull in MySQL as well as php-5.4:
root # emerge --jobs xcache metalog postfix
Start and Configure Services
Time to configure MySQL with a root password, start it, secure it, and enable it to start at boot. We'll also start metalog and postfix:
root # emerge --config mysql root # rc-update add mysql default root # rc-update add metalog default root # rc-update add postfix default root # rc root # mysql_secure_installation
Database Setup
Now, let's create a database named mediawiki
for use by MediaWiki, and a mediawiki@localhost
user to access this database, using a password of wikifever
:
root # mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.1.62-log Gentoo Linux mysql-5.1.62-r1 Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database mediawiki; Query OK, 1 row affected (0.01 sec) mysql> grant index, create, select, insert, update, delete, alter, lock tables on mediawiki.* to 'mediawiki'@'localhost' identified by 'wikifever'; Query OK, 0 rows affected (0.01 sec) mysql> \q Bye root #
Nginx Setup
We will use nginx as our Web server. Let's emerge it:
root # emerge --jobs nginx
User and Group
When we run our wiki, we will run it as the docs
user, for security. Let's set up a docs
user and group:
root # groupadd docs root # useradd -g docs --home /home/docs docs root # install -d /home/docs root # chown -R docs:docs /home/docs
Set up PHP
As our last major configuration step, we will configure the PHP FastCGI Process Manager by creating a /etc/php/fpm-php5.4/php-fpm.conf
file with the following contents (existing contents can be deleted):
/etc/php/fpm-php5.4/php-fpm.conf
[global]
error_log = /var/log/php-fpm.log
log_level = notice
[docs]
listen = /var/run/docs.php-fpm.socket
listen.allowed_clients = 127.0.0.1
listen.owner = docs
listen.group = nginx
listen.mode = 0660
user = docs
group = docs
pm = dynamic
pm.max_children = 16
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 2
pm.max_requests = 500
php_admin_value[open_basedir] = /home/docs/public_html:/tmp
php_admin_value[error_log] = /home/docs/php-errors.log
php_admin_value[disable_functions] = exec, system, shell_exec, passthru, popen, dl, curl_multi_exec, posix_getpwuid,
disk_total_space, disk_free_space, escapeshellcmd, escapeshellarg, eval, get_current_user, getmyuid, getmygid,
posix_getgrgid, parse_ini_file, proc_get-status, proc_nice, proc_terminate, suexec, pclose, virtual, set_time_limit, show_source
This configuration file tells PHP to use the docs
user when running MediaWiki. Please note that the last line is very long - I have split it into 3 lines for readability on this wiki, but you should combine them into a single line in your configuration file. The line should start with php_admin_value[disable_functions]
and end with show_source
.
Configure Nginx
Oh! Now we need to configure nginx to serve pages as the docs user. Assuming your site is named wiki.mysite.com, create a /etc/nginx/sites-available/wiki.mysite.com
file with the following contents:
server { listen 80; server_name wiki.mysite.com; access_log /var/log/nginx/wiki.mysite.com.access.log main; error_log /var/log/nginx/wiki.mysite.com.error.log error; root /home/docs/public_html; index index.html index.php; # uncomment this if you want to htpasswd-protect your site while you set it up initially # auth_basic "Ninjas allowed only"; # auth_basic_user_file /etc/nginx/docs.funtoo.org.htpasswd; location ~* ^(.*)(install.php|LocalSettings.php|\.git) { deny all; } location ~* \.php$ { #set $https "off"; #if ($scheme = https) { set $https "on"; } #fastcgi_param HTTPS $https; try_files $uri @404; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME wiki.mysite.com; fastcgi_pass unix:/var/run/docs.php-fpm.socket; fastcgi_index index.php; } # this will secure the MediaWiki uploads against arbitrary PHP injection attacks: location /images/ { location ~.*\.(php)?$ { deny all; } } location @404 { return 404; break; } location / { try_files $uri $uri/ @mediawiki; } location @mediawiki { rewrite ^/([^?]*)(?:\?(.*))? /index.php?title=$1&$2 last; } }
for localhost/wiki/ short urls in nginx
/etc/nginx/sites-enabled/localhost
- domain.com/wiki/ short urlslocation /wiki { index index.php; rewrite "^(wiki)$" $1/ permanent; rewrite "^/?wiki(/.*)?" /mediawiki/index.php?title=$1&$args last; }
Enable Ngnix and PHP-FPM
Now, let's enable nginx to serve our site, and also be sure to enable php-fpm:
root # cd /etc/nginx/sites-enabled root # ln -s ../sites-available/wiki.mysite.com wiki.mysite.com root # rc-update add nginx default root # rc-update add php-fpm default root # rc * Starting PHP FastCGI Process Manager ... [ ok ] * Starting nginx ... [ ok ] root #
MediaWiki from portage
There are mediawiki ebuilds in portage, if you like your site breaking upon emerge --sync && emerge -avuND world:
root # emerge mediawiki
With out the vhost flag the files will be dropped into /var/www/localhost/htdocs/mediawiki.
Download MediaWiki
We're getting close. Now, head to http://www.mediawiki.org/wiki/Download and copy the link address for the latest version of MediaWiki, currently 1.19.1 at the time this was written. Let's download the archive to /var/tmp
:
root # cd /var/tmp root # wget http://download.wikimedia.org/mediawiki/1.19/mediawiki-1.19.1.tar.gz
Extract MediaWiki
We now have all the Web, database and email infrastructure enabled that we need. Heading to the IP address of your server should result in a 404 - Not Found error in your Web browser. Time to extract and configure MediaWiki itself:
root # su docs user $ cd /var/tmp user $ tar xvf ./mediawiki-1.19.1.tar.gz user $ mv mediawiki-1.19.1 ~/public_html
MediaWiki from GIT
Alternatively, we can download the code from the git repository:
root # su docs user $ cd ~ user $ git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git public_html
Specific stable versions of MediaWiki are tracked using 'tags'. These are analogous to the tarball releases. We can see the versions available with:
user $ cd public_html user $ git tag -l | sort -V
To use a specific tag (1.19.1):
user $ git checkout 1.19.1
Initial Web Config
You will now be able to load the URL of your server in your Web browser and configure MediaWiki through the Web user interface. Complete the full installation process and be sure to specify that you are using XCache for caching. Once you go through this process, the Web installation process will provide you with a LocalSettings.php
file, which you should place in /home/docs/public_html
. The LocalSettings.php
file can also be manually edited and used to enable MediaWiki features and extensions.
Tips and Tricks
Main Page
To define your default landing page for mediawiki. edit: localhost/wiki/MediaWiki:Mainpage
example: http://www.funtoo.org/MediaWiki:Mainpage
Sidebar
To define your own sidebar links, edit localhost/wiki/MediaWiki:Sidebar
links follow the page|text format. example: http://www.funtoo.org/MediaWiki:Sidebar
ArticlePath
By default, MediaWiki pages will have a URL of wiki.myserver.com/index.php?title=PageName
. With a few minor tweaks, you can tell MediaWiki to use wiki.myserver.com/PageName
instead. Here's how. Open up LocalSettings.php
and search for the $wgScriptPath
line. This part of the config will look like this:
$wgScriptPath = ""; $wgScriptExtension = ".php";
Change this part of the file to look like this:
$wgScriptPath = ""; $wgArticlePath = "/$1"; $wgUsePathInfo = true; $wgScriptExtension = ".php";
The old-style URLs will still work, but the shorter more intuitive URLs will now be used for all wiki links.
$wgSpamRegex
You may find that your wiki is the target of spammers. The easiest way to combat spam is to set $wgSpamRegex
in LocalSettings.php
, like so:
$wgSpamRegex = "/badword1|badword2|badword3/i"
This will perform a case-insensitive match against the bad words and block anyone from saving edits that contain these words.
DNS Blacklist
MediaWiki also has the ability to consult a DNS blacklist to prevent known forum and wiki spam sites from performing any edits on your wiki. To enable this capability, add the following to LocalSettings.php
:
$wgEnableDnsBlacklist = true; $wgDnsBlacklistUrls = array( 'xbl.spamhaus.org', 'opm.tornevall.org' );
You may notice a significant decrease in spam posts.
$wgRawHtml
Enabling arbitrary html on a wiki can be dangerous so use this with care. To allow any raw html inserted into your wiki:
/var/www/localhost/htdocs/mediawiki/LocalSettings.php
(php source code) - enabling arbitrary html...
$wgRawHtml = "true";
$wgServer
Here is an important tip -- the $wgServer
variable in LocalSettings.php
defines the URL of your MediaWiki installation. MediaWiki will encode this within its HTML replies, which means that the Web browser from which you are accessing MediaWiki must be able to reach your server using this address, or pages will not display. This is not a security feature in any way, but a configuration issue. For example, if $wgServer
is set to 10.0.1.128
, then the only systems that will be able to access your MediaWiki installation are those for which 10.0.1.128
resolves to your MediaWiki installation. The same is true of non-IP $wgServer
entries like wiki.mysite.com
. If you are setting up a test wiki, you may need a temporary entry in a desktop's /etc/hosts
file so that it can interact with the wiki properly before DNS is set up.
$wgLogo
If you want to change the wiki logo, edit LocalSettings.php
and replace $wgLogo with the location of the image you want to use:
$wgLogo = "image.png"
The above references the fileimage.png
in the directory/home/docs/public_html
MySQL wildcard searches
Recent versions of mediawiki have broken search results.
/var/www/localhost/htdocs/mediawiki/includes/search/SearchMySQL.php
(php source code) - line 175 modification to repair mysql searchesif ( trim( $term ) === '' ) {
return null;
} else {
$term = $term . '*';
}
License Badges
You can have licenses displayed with your pages.
/var/www/localhost/htdocs/mediawiki/LocalSettings.php
(php source code) - add license badge to articles$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright
$wgRightsUrl = "http://creativecommons.org/licenses/by-sa/3.0/"; //external source explaining license
$wgRightsText = "Creative Commons Attribution Share Alike"; //alternate text on the image
$wgRightsIcon = "{$wgStylePath}/common/images/cc-by-sa.png";
There are 6 possible badge images
- {$wgStylePath}/common/images/cc-0.png
- {$wgStylePath}/common/images/cc-by-nc-sa.png
- {$wgStylePath}/common/images/cc-by-sa.png
- {$wgStylePath}/common/images/cc-by.png
- {$wgStylePath}/common/images/gnu-fdl.png
- {$wgStylePath}/common/images/public-domain.png
External Resources
- http://www.mediawiki.org/wiki/Manual:System_administration
- http://www.mediawiki.org/wiki/Manual:Performance_tuning
- http://www.mediawiki.org/wiki/Help:Templates
- http://www.mediawiki.org/wiki/Transclusion