早就想搭建一个专属于自己的博客了,用来记录自己生活、学习的点点滴滴。之所以选WordPress,主要是因为它可以支持Latex,而且特别喜欢其简约的风格。
WordPress有个the famous 5 minutes installing,无奈我对LAMP(Linux,Apache,MySQL,PHP)几乎一无所知,用了将近两天才把整个博客搭建起来。安装 WordPres很容易,但是把相关的配置好就比较麻烦了。下面是我整个搭建过程的总结。
操作系统:Ubuntu 12.04LTS
首先列出需要的文件:
1.wordpress http://wordpress.org/download/
2.mysql http://www.mysql.com/downloads/mysql/
3.httpd2.4.6 http://httpd.apache.org/download.cgi
4.apr1.4.8 http://apr.apache.org/download.cgi
5.apr-util1.5.2 http://apr.apache.org/download.cgi
6.php5.5.1 http://php.net/downloads.php
7.libxml2.9.1 http://www.xmlsoft.org/downloads.html
8.prce8.33 http://www.pcre.org
ubuntu安装ftp服务器(一般配置)
1.安装vsftpd
~$ sudo apt-get install vsftpd
2.配置vsftpd
2.1修改/etc目录下的vsftpd的配置文件
$sudo gedit /etc/vsftpd.conf
源文件中不少命令被注释,根据每条命令的具体说明启用一部分即可,如下所示:
代码如下:
listen=YES # 服务器监听
local_enable=YES # 本地主机访问允许
write_enable=YES # 写允许
dirmessage_enable=YES # 进入文件夹允许
xferlog_enable=YES #激活ftp 上传和下载的日志
connect_from_port_20=YES #允许使用20号端口作为数据传送的端口
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
2.2设置ftp相关目录
安装完毕后,/srv下会增加一个ftp目录。我们在/srv/ftp目录下创建两个分别名为upload和download的目录,分别用于上传和下载。
~$ mkdir /srv/ftp/download
~$ mkdir /srv/ftp/upload
接下来我们为刚才创建的几个目录设置权限,执行如下命令: ~$ sudo chmod 755 /home/ftp ~$ sudo chmod 777 /home/ftp/upload ~$ sudo chmod 755 /home/ftp/download
3.vsftpd 设置用户目录
3.1增加组~$ sudo groupadd ftpgroup
增加用户ftpuser并设置其目录为/home/nation/ftp/upload ~$ sudo useradd -g ftpgroup -d /home/nation/ftp/upload -M ftpuser
(注:g:用户所在的组 d:表示指定创建用户的目录的位置,M:不建立默认的自家目录,也就是说在/home下没有自己的目录)
3.2设置用户口令~$ passwd ftpuser,然后连续两次输入口令。
3.3编辑chroot_list文件
~$ sudo gedit /etc/vsftpd.chroot_list 内容为ftp用户名,每个用户占一行,如:
ftpuser
4.启动vsftpd
~$ sudo service vsftpd start
查看当前所有进程: ~$ ps -e 至此服务器端vsftp的基本配置已完成,vsftpd已开启。(注意防火墙配置) 关闭vsftpd进程只需要执行~$ sudo service vsftpd stop,重启vsftpd进程执行~$sudo service vsftpd restart
参考:http://blog.csdn.net/nation_chen/article/details/7066277
安装MySQL
1.安装MySQL
$ sudo apt-get install mysql-server
2.配置MySQL
注意,在Ubuntu下MySQL缺省是只允许本地访问的,如果你要其他机器也能够访问的话,那么需要改变/etc/mysql/my.cnf配置文件了!下面我们一步步地来:
默认的MySQL安装之后根用户是没有密码的,所以首先用根用户进入:
$mysql -u root
进入mysql之后,最要紧的就是要设置Mysql中的root用户密码了。
mysql> GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY “123456″;
注意,我这儿用的是123456做为root用户的密码,请大家最好使用大小写字母与数字混合的密码,且不少于8位。这样的话,就设置好了MySQL中的root用户密码了.
3.用root权限创建数据库
mysql>CREATE DATABASE xoops;
mysql>GRANT ALL PRIVILEGES ON xoops.* TO [email protected] IDENTIFIED BY “654321″;
这样就建立了一个xoops_roots的用户,它对数据库xoops有着全部权限。以后就用xoops_root来对xoops数据库进行管理,而无需要再用root用户了,而该用户的权限也只被限定在xoops数据库中。
如果你想进行远程访问或控制,那么你要做两件事:
其一:
mysql>GRANT ALL PRIVILEGES ON xoops.* TO xoops_root@”%” IDENTIFIED BY “654321″;
允许xoops_root用户可以从任意机器上登入MySQL。
其二:
$sudo gedit /etc/mysql/my.cnf
>bind-address=127.0.0.1 => bind-address= 你机器的IP
这样就可以允许其他机器访问MySQL了。
参考:http://wiki.ubuntu.org.cn/MySQL%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97
安装PRCE(Perl Compatible Regular Expressions)
在http:www.pcre.org下载pcre8.33.tar.bz2解压,进入目录依次执行./configure;make;sudo make install完成安装,再执行ldconfig。libpcre在后面编译Apache2时会用到。
安装httpd2.4.6
编译httpd时必须保证已经安装了APR、APR-Util,如果没有就下载后分别解压到httpd2.4.6的srclib/apr和/srclib/apr-util下(如过解压后的目录带有版本号,记得将目录重命名)。在执行./configure命令时在后面添加 –with-included-apr选项。
1.解压缩后进入目录
$ bzip2 -d httpd-2.4.3.tar.gz $ tar -xvf httpd-2.4.3.tar $ cd httpd-2.4.3
2.进行配置
$ ./configure --with-included-apr --enable-module=so –prefix=/usr/local/apache2
(如果不指定prefix,会默认安装到/usr/local/apache2;–enable-module=so不能少了,这在后面安装PHP时是必须要的)
3.编译并执行安装
$ make
$ make install
4.测试(开启或终止)
$ /usr/local/apache2/bin/apachectl -k start/stop
安装libxml2
在安装libxml2之前,需要先安装python-dev,在终端执行:sudo apt-get install python-dev
1.解压libxml2后进入目录
$ tar zxvf libxml2-git-snapshot.tar.gz
$ cd libxml2-2.9.1
2.进行配置
$ ./configure –prefix=/usr/local/libxml2
3.编译并安装
$ make
$ make install
如果安装成功以后,在/usr/local/libxml2 /目录下将生成bin、include、lib、man和share五个目录。在后面安装PHP5源代码包的配置时,可通过在configure命令的选 项中加上“–with-libxml-dir=/usr/local/libxml2″选项,指定安装libxml2库文件的位置。
安装PHP
在安装PHP之前,我们必须安装libpng-dev,否则在执行./configure时会出现找不到png.h的错误。只要安装了libpng-dev后就可以顺利configure过去,我看到后面也找不到jpeg相关的东西,就顺带把libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libavcodec-dev, libavformat-dev, libswscale-dev都一起安装算了,这些在使用OpenCV的时候会用到。在终端执行命令:sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev
1.解压缩后进入目录
$ bzip2 -d php-5.5.1.tar.bz2
$ tar -xvf php-5.5.1.tar
$ cd php-5.5.1
2.进行配置
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-libxml-dir=/usr/local/libxml2 --with-gd --with-zlib --enable-mbstring --enable-zip –with-libxml-dir=/usr/local/libxml2
(注意:不要少了—with-zlib,不然后面在WordPress中安装插件或升级时会出现”Missing zlib extensions”的问题)。
3.编译并安装
$ make
$ make install
4.设置PHP的配置文件php.ini
$ cp php.ini-development /usr/local/lib/php.ini
5.配置Apache的httpd.conf使其能加载PHP模块
$ sudo gedit /usr/local/apache2/conf/httpd.conf
修改httpd.conf的内容,确保下面两条没被注释掉:
代码如下:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module modules/libphp5.so
因为WordPress用到了Apache的mod_rewrite模块,故这里的第一条也不能被注释掉。
6.配置Apache的httpd.conf使其支持PHP相关的扩展名文件
添加如下代码
代码如下:
SetHandler application/x-httpd-php
或者
代码如下:
SetHandler application/x-httpd-php
允许.php文件被php源码过滤器处理并以高亮模式显示源码,添加如下代码:
代码如下:
FilesMatch "\.phps$">
RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
7.重启Apache
/usr/local/apache2/bin/apachectl restart
在浏览器中输入本机IP地址,可以看到页面显示“It works!"。
安装WordPress
第一步:下载WordPress安装包并解压
从此处下载WordPress压缩包并解压缩 http://wordpress.org/download/
如果你想将WordPress上传至一个远程服务器,先下载WordPress压缩包至你的电脑,接着解压缩
如果你使用shell来访问你的服务器,而且你可以很轻松地使用console工具,你可以使用wget (或者 lynx再或者其他的console命令)来直接下载WordPress至你的web server,这样就可以避免使用FTPing(该方法适用于Linux系统):
$wget http://wordpress.org/latest.tar.gz
接着使用一下命令解压缩: $tar -xzvf latest.tar.gz
这样WordPress压缩包将会解压缩至文件夹wordpress,这个文件夹与你下载的latest.tar.gz压缩包处于同一个目录下.
如果你没有shell来访问你的服务器,或者你不方便使用 console工具,你可以使用ZipDeploy上传WordPress至你的web server
第二步:创建WordPress数据库和一个用户
你可以利用shell运行mysql语句,快速而方便地创建MySQL用户和数据库。下面给出创建语句,其中美元符号表示命令提示符:
代码如下:
$ mysql -u adminusername -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5340 to server version: 3.23.54
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE DATABASE databasename;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"hostname"
-> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> EXIT
Bye
$
从这个例子中可以看出:
根用户名(root)也是管理员用户名 (adminusername)。用看似“普通“的名称作为mysql管理员名称更加安全,这样就不会把“mysql”命令作为系统根用户输入了。(尽量 避免以根用户的身份工作,降低被发现的可能性)。数据库管理员使用mysqladmin时的用户名可以作为mysql用户名。
wordpress或blog都是数据库名称的理想选择。
可以用wordpress作为wordpress用户名,但需要注意,如果在这里使用wordpress,所有人都能猜出你的 wordpress用户名。
hostname通常是localhost。如果不知道将hostname设为什么并且自己不是WordPress虚拟主机的管理员,请查看系统管理员信息。系统管理员可以考虑使用非根用户账号来管理数据库。
应选择保密性较高的密码,最好是大小写字母、数字及符号的组合。避免使用字典中的某个单词,可以选择自己能够记住的一个词组中每个单词的首字母作为密码。
如果想把这些用户名和密码记下来,避免在用户名和密码保护范围内做记录。需要记住的包括数据库名称、wordpress用户名、hostname以及密码。当然,这些信息已经在(或者会暂时在)wp-config.php文件中,也没有必要在别的地方重复记录了。
第三步:设置wp-config.php文件
用户可以亲自创建并编辑wp-config.php文件,也可以在运行安装脚本(第五步)时让WordPress帮助用户编辑wp-config.php(不过仍然需要告诉WordPress我们的数据库信息)。
(更多细节以及创建wp-config.php配置文件和密码密钥的信息请点击编辑wp-config.php文件。)
返回第一步中解压WordPress压缩包的位置,将wp-config-sample.php重命名为wp-config.php,之后在文本编辑器中打开该文件。
在标有
// ** MySQL settings - You can get this info from your web host ** //
下输入你的数据库相关信息
DB_NAME
在第二步中为WordPress创建的数据库名称
DB_USER
在第二步中创建的WordPress用户名
DB_PASSWORD
第二步中为WordPress用户名设定的密码
DB_HOST
第二步中设定的hostname(通常是localhost,但总有例外;参见编辑wp-config.php文件中的“可能的DB_HOST值)。
DB_CHARSET
数据库字符串,通常不可更改(参见zh-cn:编辑wp-config.php)。
DB_COLLATE
留为空白的数据库排序(参见zh-cn:编辑wp-config.php)。
在标有
* Authentication Unique Keys.
的版块下输入密钥的值(在线密钥生产器https://api.wordpress.org/secret-key/1.1/salt/),保存wp-config.php文件。
第四步:上传文件
接下来需要决定将博客放在网站的什么位置上:
网站根目录下(如:http://example.com/)
网站子目录下(如:http://example.com/blog/)
Note: 我们的网页根目录在web服务器文件流中的位置会随虚拟主机商和操作系统而发生变化。具体情况请咨询虚拟主机商或系统管理员。
根目录
如果需要将文件上传到web服务器,可用FTP客户端将wordpress目录下所有内容(无需上传目录本身)上传至网站根目录
如果文件已经在web服务器中且希望通过shell访问来安装wordpress,可将wordpress目录下所有内容(无需转移目录本身)转移到网站根目录
子目录
如果需要将文件上传到web服务器,需将wordpress目录重命名,之后用FTP客户端将重命名后的目录上传到网站根目录下某一位置
如果文件已经在web服务器中且希望通过shell访问来安装wordpress,可将wordpress目录转移到网站根目录下某一位置,之后重命名 wordpress目录
第五步:运行安装脚本
在常用的web浏览器中运行安装脚本。
将WordPress文件放在根目录下的用户请访问:http://example.com/wp-admin/install.php
将WordPress文件放在子目录(假设子目录名为blog)下的用户请访问:http://example.com/blog/wp-admin/install.php
安装配置文件
WordPress无法查找到wp-config.php文件时会通知用户并试图自动创建并编辑wp-config.php文件。(用户可以在web浏览器中加载wp-admin/setup-config.php以新建wp-config.php文件。)WordPress询问用户数据库的具体情况并将之写入新的wp-config.php文件。如果新文件创建成功,用户可以继续安装;否则需返回第三步:设置wp-config.php文件。
第六步:修改Apache的httpd.conf
$ sudo gedit /usr/local/apache2/conf/httpd.conf
将Apache绑定到制定的IP和/或端口上
Listen 192.168.0.155:80
指定服务器出现的问题应该被发送到的邮箱地址
ServerAdmin [email protected]
指定服务器的域名和端口,如果没有注册域名,可以填IP地址
ServerName 192.168.0.155:80
指定wordpress所在的绝对路径
代码如下:
DocumentRoot "/srv/upload/wordpress"
指定Wordpress进行读写文件操作的user和group
代码如下:
group groupname
user username
[/code
切换语言/语言包(这步我没做,就用英文的算了)
下面步骤指导您将现有的英文 WordPress 站点切换为中文。
通过 FTP、SSH 等方式打开并编辑站点根目录下的 wp-config.php文件。
查找 define('WPLANG', '');一行,在第二个参数处填入 zh_CN,变成 define('WPLANG', 'zh_CN');并保存文件。
进入站点控制板(dashboard),看到更新提示后进行升级即可。WordPress 会自动从官方网站下载中文语言包并安装。
若 您当前正在使用非官方的中文语言包,请您注意:非官方语言包通常会替换 WordPress 程序本身的升级部分,使 WordPress 通过第三方服务器升级,这可能有一定风险。若您不愿使用官方版本的语言包,请务必选择您信任的语言包。至于使用何种中文支持,完全由您自主选择。 WordPress 并不会禁止您使用非官方语言包。当然,我们会认真处理您的批评和建议,欢迎联系我们。
如下是卸载非官方语言包、安装官方中文版本的通用步骤。请注意,如果您没有使用非官方版本的语言包,请不要进行下列操作。我们在这里假设您使用的非官方中文版本没有改动您的数据库:
备份数据库。
备份所有文件,并删除博客根目录下除 wp-config.php之外的所有文件。请注意保留 wp-config.php。
从 cn.wordpress.org 下载最新官方中文版本。解压缩并上传至站点根目录。
(选做)比对 wp-config-sample.php和留下的 wp-config.php:若 wp-config-sample.php有新增的内容,请复制并按照说明填写;若留下的 wp-config.php比 wp-config-sample.php中的设置项还要多,请删除那些多余的项目。
参考:http://codex.wordpress.org/zh-cn:%E5%AE%89%E8%A3%85_WordPress
其他问题
1.安装插件Latex Everyting时出现了“Could not create directory”的问题,"Could not create directory./youdir/wp-content/upgrade:
解决方法如下: 1. 找到这个文件: /wp_admin/includes/class-wp-filesystem-direct.php 2. 查找 “function mkdir” 3. 修改这个函数至如下的代码,至插件 Fix “Cound not create directory” problem 这一段,即可
[code]
function mkdir($path, $chmod = false, $chown = false, $chgrp = false) {
// safe mode fails with a trailing slash under certain PHP versions.
$path = untrailingslashit($path);
if ( empty($path) )
return false;
if ( ! $chmod )
$chmod = FS_CHMOD_DIR;
if ( ! @mkdir($path) )
return false;
$this->chmod($path, $chmod);
if ( $chown )
$this->chown($path, $chown);
if ( $chgrp )
$this->chgrp($path, $chgrp);
return true;
}
结果还是不行。
猜测是权限的问题,执行$ chmod 777 wp-content,还是出现类似的错误,但是我们发现不能创建的目录变了,“Could not create directory./yourdir/wp-content/plugins/latex-everyting。
这时我们应该检查一下wp-content文件夹下的的权限问题,更改wp-content目录及其子目录的权限,执行$chmod -R 777 wp-content后问题解决。
2.激活Latex Everyting时出现问题
Fatal error:Call-time pass-by-reference has been removed in /yourdir/latex-single-posts.php on line 7
解决方法:这里出现问题的原因都是一样的,及参数的传递错误。我们可以根据提示的代码错误行数找到错误并修改。
激活插件
修改latex-single-posts.php第7行,
将latex_everything->add_controller(‘single_post’,&$latex_single_post_controller);
修改为latex_everything->add_controller(‘single_post’,$latex_single_post_controller);
继续激活,又出现了问题
Fatal error:Call-time pass-by-reference has been removed in /yourdir/latex-post-types.php on line 8
修改latex-post-types.php第8行,
将latex_everything->add_controller(‘post_type’,&$latex_post_type_controller);
修改为latex_everything->add_controller(‘post_type’,$latex_post_type_controller);
继续激活,还是出现了问题:
Fatal error:Call-time pass-by-reference has been removed in /yourdir/latex-terms.php on line 7
修改latex-terms.php第7行,
将latex_everything->add_controller(‘term’,&$latex_term_controller);
修改为latex_everything->add_controller(‘term’,$latex_term_controller);
3.WordPress提示:执行请求动作,连接信息必需提供
在 wordpress后台自动升级以及更新删除主题或者插件的时候,需要输入FTP账户信息。据说这个填写FTP信息界面,只会出现在PHP进程不是以用户 身份来运行的主机上,也就是网站服务器运行PHP的用户和 wordpress文件夹的所有者不一样,目的就是为了安全,wordpress在升级时会创建一个临时文件看看owner是不是和当前运行的php是否 一样,如果不一样,就会出现这个界面。
遇到这种情况的解决办法:
在wp-config.php中填写连接信息。
如果为了以后更新方便的话可以在 wp-config.php 中加入一下代码:
// ** FTP SETTINGS FOR AUTO-UPDATE ** // define(‘FTP_HOST’, ‘localhost’); define(‘FTP_USER’, ‘ftp帐号’); define(‘FTP_PASS’, ‘ftp密码’);
这样无论升级 wordpress 或者插件的时候就都不会有那个FTP提示了。
4.修改wordpress上传文件2M限制
编辑php.ini文件:
#vim /usr/local/lib/php.ini
大概在591行处有一个参数:upload_max_filesize = 10M,默认为2M,将其中的2M改为你想要限制的大小,如下所示。然后我顺手把每次可上传的最大文件数由20改为了30.
代码如下:
//===================
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 20M
; Maximum number of files that can be uploaded via a single request
max_file_uploads = 30
//================
重启apache服务器
#/usr/local/apache2/bin/apachectl restart
不知道为什么我修改了之后总是8M。继续找资料,后来发现原来这个大小是取post_max_size和upload_max_filesize中的最小值,继续修改如下:
代码如下:
//=====================================
; Maximum size of POST data that PHP will accept.
; http://php.net/post-max-size
post_max_size = 30M
//=======================================
重启apache服务器
#/usr/local/apache2/bin/apachectl restart
OK~
参考:http://naonao.blog.51cto.com/1135983/827973
http://ar.newsmth.net/thread-add920665842c4.html
5.当想使用个性化的Permalink时,出现.htaccess不能写的问题
在WordPress的根目录下新建一个名为.htaccess的文件,然后修改其权限
$touch .htaccess
$chmod 666 .htaccess
你可以用下面这些标签来定制“美观”或者“接近美观”的固定链接,这里有一些注意事项:
确保用 %post_id% 或%postname% 结束结固定链接结构(如/%year%/%monthnum%/%day%/%postname%/)),这样每个固定链接都会指向一篇独立的日志。
考虑到运行上的问题,最好不要以分类、标签、作者或是日志名字段作为固定链接结构的开始。这是因为这些都是文本字段,如果以文本字段作为固定链接结构的起始 部分,WordPress需要花更多时间来判断这是一个日志的URL还是页面的URL(页面URL总是使用“页面别名”作为URL),为了作为补 偿,WordPress在数据库中存储了大量额外信息(信息数量之庞大直接影响到了具有多个页面的网站的运行)。因此,最好以年份或日志ID等数值型字段 开始你的固定链接结构。参见WordPress测试者对这个问题的讨论。参考:http://www.cnblogs.com/lhb25/archive/2010/07/23/1783381.html
6.使用XML-Sitemap时出现文件不能写的问题
先打开博客页面的Settings下面XML-Sitemap选项,取消Basic Options下面的Sitemap files下的两个选项。
然后在博客的根目录下新建名为sitemap.xml和sitemap.xml.gz的文件
$touch sitemap.xml sitemap.xml.gz
修改这两个文件的权限
$chmod 755 sitemap.xml sitemap.xml.gz
参考:http://www.arnebrachhold.de/2006/04/07/google-sitemaps-faq-sitemap-issues-errors-and-problems/?utm_source=wp-wm&utm_medium=install&utm_cOntent=help-files#P28_gen_files
7. 403 forbidden you don’t have permission to access / on this server
这类问题只可能出现在Apache Server上面。如果出现这种问题,请打开Apache的配置文件httpd.conf,查看DocumentRoot指定的整个网站的文件夹是否正确,如果正确的话就检测改文件夹对应的读写权限。一般就是这两个方面的问题引起的。可以参加博文http://www.lost-in-code.com/server-management/403-forbidden-you-dont-have-permission-to-access-on-this-server/。这篇文章里面的DirectoryIndex不是这次引发403 forbidden问题的原因,而是DocumentRoot指定文件夹权限的问题。httpd.conf文件的DirectorIndex只有一项index.html,而我们的WordPress都是PHP的网页,如果不加上一项index.php的话,我们的网站只会显示一个目录的Index。
8.网页的标题出现乱码
因为我启用了All In One Seo Pack插件,导致网页的标题出现乱码。点击网页地址栏下的SEO字样进行插件设置,取消Rewrite titles,即可解决问题。
最后,经过第一次安装WordPress的经历,再加上第二次重装系统后再利用之前WordPress的数据备份还原我的整个WordPress的痛苦经历。我总结出了一个小经验:一定要注意WordPress文件夹和文件的属性!文件夹都设置成755或者更高的权限,文件都可以设置成644。如果文件夹的属性不是755,那么会出现各种意想不到的问题!