原料:
- Ubuntu Server 12.04.1 LTS:http://www.ubuntu.com/download/server
- Nginx
- MediaWiki 1.19:http://www.mediawiki.org/wiki/Download
- Trac 1.12.3:http://trac.edgewall.org/wiki/TracDownload
- git:
安装和配置Nginx
安装:
apt-get install nginx-full
文件系统 布局和 url规划:
- /home/services -- 服务存放目录
- /home/sites -- 各个站点的名空间
- /home/media -- 存放静态资源
- /home/helpers -- 帮助程序
# vi /etc/nginx/sites-enabled/defaultserver { server_name www.example.com; index index.php index.html index.htm; root /home/sites/default; access_log off; client_max_body_size 5m; client_body_timeout 60; }
部署Mediawiki
Mediawiki部署,Mysql数据库支撑,nginx收到请求后,以fast-cgi协议扔给php-fpm的socket,后者来从线程/进程池中调出线程/进程来执行index.php。
整个部署过程需要:
- 安装mediawiki及其依赖包
- 配置nginx以导出web界面
- 创建供mediawiki使用的数据库账号
- 在线配置mediawiki
- 配置php mail()函数后端,以启用通知功能
安装:
mkdir -p /home/services/wiki/web tar xf mediawiki-1.19.tar.gz --strip 1 -C /home/services/wiki/web # 变更权限,程序文件所有者为root,其他用户不可更改 chown -R root.root /home/services/wiki/web
安装依赖:
apt-get install mysql-server php-apc php5-gd php5-intl imagemagick php5-fpm
配置url:
在原有nginx基础上,把www.example.com/wiki分给 mediawiki:
# export to web mkdir -p /home/sites/default ln -ds /home/services/wiki/web /home/sites/default/wiki
配置nginx:vi /etc/nginx/sites-enabled/default
location ~ \.php$ { if (!-e $request_filename) { return 404; } fastcgi_pass unix:/tmp/phpfpm.sock; fastcgi_index index.php; fastcgi_intercept_errors on; include fastcgi_params; } # wiki location /wiki { try_files $uri $uri/ @wiki_rewrite; } location @wiki_rewrite { rewrite ^/wiki/(.*)$ /wiki/index.php?title=$1&$args; } location ^~ /wiki/maintenance/ { return 403; } location = /wiki/_.gif { expires max; empty_gif; } location ^~ /wiki/cache/ { deny all; } location /wiki/dumps { root /home/sites/default/wiki/local; autoindex on; } ... # Bottom (for mediawiki) # 这段要放在配置文件的最后,后面新加入的配置要在其上!! location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { try_files $uri /index.php; expires max; log_not_found off; }
创建数据库账号:
- 为mysql的root用户设置密码:mysqladmin -u root
- 以mysql root用户登陆并创建数据库(<wikiuser>: <password>):
mysql -u root -p create database wikidb; grant index, create, select, insert, update, delete, alter, lock tables on wikidb.* to 'wikiuser'@'localhost' identified by 'password';
配置wiki:
- 在浏览器中访问:http://www.example.com/wiki,回答完一系列问题后,下载了一个LocalSettings.php
- 修改LocalSettings.php:
- $wgFileExtensions = array('bmp', 'png', 'jpg', 'jpeg', 'gif', 'svg', 'pdf', 'doc', 'xls', 'ppt', 'odt', 'ods', 'odp', 'odg', 'tar', 'gz', 'c', 'cpp', 'py', 'sh', 'log', 'txt');
- $wgAllowExternalImages = true;
- 移除该行,允许注册账号:$wgGroupPermissions['*']['createaccount'] = false;
- $wgFileExtensions = array('bmp', 'png', 'jpg', 'jpeg', 'gif', 'svg', 'pdf', 'doc', 'xls', 'ppt', 'odt', 'ods', 'odp', 'odg', 'tar', 'gz', 'c', 'cpp', 'py', 'sh', 'log', 'txt');
- LocalSettings.php放到/home/services/wiki/web下,并所有者改为root
配置php mail():
后端基本上是配置成sendmail的命令调用,不过sendmail这货挺复杂的。这里召唤了一个发邮件的帮助脚本:
mailSender.py
用法如下:
- 安装mailSender.py:
# 安装依赖的python模块 apt-get install python-pyinotify mkdir -p /home/helpers/sendmail cd /home/helpers/sendmail cp /path/to/mailSender.py . chmod 755 mailSender.py chown root.root mailSender.py mkdir MAILCACHE # Assume: All clients run as www-data chown www-data.www-data MAILCACHE
- 配置mailSender.py:SMTP服务器的地址和用户账号
vi /home/helpers/sendmail/mailSender.pyWorkingDir = '/home/helpers/sendmail/MAILCACHE' SelfID = 'mailSender' smtp_server = 'smtp.example.com' smtp_port = 25 smtp_user = '<user>' smtp_password = '<password>' smtp_use_tls = False default_from_addr = 'user@smtp.example.com'
- 配置php-fpm:
vi /etc/php5/fpm/php.ini... [mail function] ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path sendmail_path = /home/helpers/sendmail/mailSender.py -t -i