centos+apache安装wordpress

上一篇《折腾记录:将wordpress搬家到腾讯云》讲到wordpress服务器搬家的坑,但是没有细说怎么安装,这一篇就记录一下怎么在centos上面安装使用wordpresss吧。以下的过程是基于centos6.7的,如软件安装有版本出入(ubuntu里面的apache是apache2,不是httpd),需要自行调整。

1.安装apache

在centos下,一般都使用yum来管理安装包,很方便。安装apache非常简单,输入以下命令即可:

yum install httpd
yum install httpd-devel

开启apache服务:

service httpd start

默认会显示如下提示:

Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

此时需要去更改配置:

vim /etc/httpd/conf/httpd.conf

#ServerName www.example.com:80改为ServerName localhost:80

保存,退出,重启apache服务
service httpd restart

最后再设置一个开机自动启动:
chkconfig httpd on

ok,在浏览器输入服务器的ip,显示如下页面即为安装成功:

apache安装成功

2.安装mysql

输入命令安装mysql-server、mysql和mysql-devel:

yum install -y mysql-server mysql mysql-devel

安装成功,如下图:

mysql安装完成

查看一下mysql的版本:

rpm -qi mysql-server

mysql版本-1

启动mysql服务:

service mysqld start

设置mysql的超级管理员root的密码,引号不要删,引号内为你的密码:
/usr/bin/mysqladmin -u root password 'new-password'

或者在mysql登陆状态下,输入:
use mysql;
update user set password=password('密码') where user='root';
flush privileges;

设置mysql开机启动:
chkconfig mysqld on

如果你还需要在远程的软件操作mysql,那就要开启远程操作权限,在mysql命令行下,输入:
grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;
flush privileges;

3.安装php

输入命令:

yum install php

安装php

安装php-mysql:
yum install php-mysql

安装常用的php组件:
yum install php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc

安装常用的php组件

重启apache:
service httpd restart

搞定。

4.安装配置wordpress

4.1创建wordpress数据库

先创建一个数据库,用来存放wordpress的数据。可以在navicat-for-mysql里面创建,也可以在登陆mysql之后,用命令行创建(指定utf-8字符集):
CREATE DATABASE `wordpress` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

创建个专门的用户管理这个数据库(username和password改为你要的用户名和密码):
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

将wordpress数据库的所有管理权限交给这个用户:
GRANT ALL ON wordpress.* TO ‘username’@’localhost’;

ok

4.2下载、安装、配置wordpress以及数据库

下载wordpress,可以去官网下载,然后上传到服务器,也可以直接用命令下载,我这里用命令下载(以下是英文版,中文版的话将url改成https://cn.wordpress.org/latest-zh_CN.tar.gz):
wget http://wordpress.org/latest.tar.gz --no-check-certificate

解压到指定的目录下:
tar -zvxf latest.tar.gz -C /website/wp-test

cd进入解压后的文件目录,将wp-config-sample.php复制、重命名为wp-config.php:
cp wp-config-sample.php wp-config.php

修改wp-config.php:
vim wp-config.php

更改数据库的相关设置,更改红色字体处为你自己的数据库设置:

/** 数据库名 */
define(‘DB_NAME’, ‘wordpress‘);

/** mysql用户名 */
define(‘DB_USER’, ‘username‘);

/** 该用户对应的密码 */
define(‘DB_PASSWORD’, ‘password‘);

/** 主机名,默认无需修改 */
define(‘DB_HOST’, ‘localhost’);

/** 字符集 */
define(‘DB_CHARSET’, ‘utf8‘);

/** The Database Collate type. Don’t change this if in doubt. */
define(‘DB_COLLATE’, ”);

4.3apache虚拟主机设置

新建一个虚拟主机配置:
vim /etc/httpd/conf.d/virtual.conf

输入以下配置,记得要先将域名解析到主机的ip地址来:

##wordpress目录
DocumentRoot /website/wp-test/wordpress

ServerName lookfor404.com #你的域名

ServerAlias www.lookfor404.com #域名别名

#开启rewrite功能
<Directory “/website/wp-test/wordpress”>

AllowOverride ALL

Order allow,deny

Allow from all

 

以上配置完成,访问域名,即可开始安装过程。
wordpress安装过程

设置一下账号密码,就可以开启wordpress了。

 

 

折腾记录:将wordpress搬家到腾讯云

由于腾讯云有学生计划,每个月可以有50块的代金券,于是我就愉快地用上了腾讯云的服务器。本来迁移一个wordpress应该是很简单的事情,居然被我折腾了一天!!!整整一天!!所以,还是记录一下吧。

想象中的迁移其实相当简单啊,由于先前已经把apache、php模块、mysql都装好了,只要把数据库和网站文件复制过来,然后改一下wp-config.php就行啦。但没想到的是,由于版本的不一致和权限的问题,我踩了不少坑。

第一坑:mysql版本不一致

在腾讯云,我的系统是centos6.7,mysql是通过yum安装的,看看版本:

rpm -qa | grep mysql

mysql版本

5.1版本的,而我在另外在另外一台服务器上面的mysql是5.6版本的,所以,当我想愉快的用navicat-for-mysql来进行数据传输的时候,出现了编码错误,无法传输。高版本的mysql有这样的排序规则:utf8mb4_unicode_ci,低版本的没有。

所以,我只能去踩第二个坑了。

第二坑:不能直接把数据库搬过来

踩完第一坑,想着说,既然不能这么传输数据库,那我就直接导出sql,然后在新的数据库执行就好了。

导出、导入完毕,然后上传wordpress文件到服务器,更改wp-config.php中的数据库配置。然后配置虚拟主机,重启apache,一切正常。

浏览器输入ip来访问。居然重定向到apache的默认页面去了。很明显,数据库根本连接不了。。

最后的解决方法是,老老实实的,先不导入数据库,让wordpress自己完成安装,把默认的表都建齐了,然后把默认的数据给删掉,最后把之前导出的sql文件里的insert语句重新执行一遍,相当于重新写数据了。

第三坑:固定链接与.htaccess文件

网站的url设计用的是域名+文章名,这个可以在wordpress后台的“固定链接”里面设置。但是我设置了之后,发现居然只有“朴素”模式可以用,采用别的固定链接,都会404。

搜索引擎和wordpress都告诉我,是.htaccess文件的问题。

wordpress的.htaccess文件

于是我在网站根目录下新建了一个.htaccess文件,把它告诉我要填写的内容写进去了,保存。

vim .htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

然后,在apache的virtual host配置里,加了以下设置,使.htaccess生效:

<Directory “/mypath/wordpress”>
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>

其中,AllowOverride ALL是一定要加的,这个代表使用.htaccess的策略。

但是,问题出现了,加了这个配置之后,图片、css、js等静态文件访问不了了。

经过好久好久的测试,千言万语可以通过以下一行命令解决:

将路径先切换到wordpress网站根目录,然后

chown -R apache:apache ./*

把所有文件的拥有者改成apache,把所属的组改成apache,这样apache就有权限了。这也直接能解决第四个坑

第四坑:在线更新wordpress出错

无论是升级wordpress还是升级插件,总是会出现权限错误,都不成功。

都是权限不足!如果你够暴力,直接全部777权限,解决,但不建议这么做。我最终还是选择了把网站的owner和group都改成了apache,正如坑三所提到的那样。

总结

权限问题!权限问题!权限问题!

这个问题在我配置网站的时候经常有,次次有,所以一定要把系统的各种权限搞懂,不要每次都用root去倒腾一些东西,得不偿失!要建立起良好的权限管理的习惯。

这篇写的思路比较混乱,之后再把之前配置整个服务器的过程记录一下。

wordpress吃内存?大多是插件的问题

昨天折腾了一天,自己的一个用wordpress搭的站点竟然提示内存不够用,不能正常访问了。

网站访问出错

百度了一下,都说是wordpress太占内存,众说纷纭,有不少人说是要把分配内存的最大值改大。没办法,我照着改了一下,确实能打开了。

问题是,网站变得无比的卡,我观察了一下服务器的CPU和内存的占用,几乎每一次的访问都爆掉了,CPU100%,内存快占满了。显然,问题不在分配内存上。

重新看之前问题的截图,说是wp-db.php的问题,我去看了一下源代码,并没有什么稀奇。是这么一个函数

function _real_escape( $string ) {
    if ( $this->dbh ) {
        if ( $this->use_mysqli ) {
	    return mysqli_real_escape_string( $this->dbh, $string );
	} else {
	    return mysql_real_escape_string( $string, $this->dbh );
	 }
    }

    $class = get_class( $this );

        if ( function_exists( '__' ) ) {
	    _doing_it_wrong( $class, sprintf( __( '%s must set a database connection for use with escaping.' ), $class ), E_USER_NOTICE );
	} else {
	    _doing_it_wrong( $class, sprintf( '%s must set a database connection for use with escaping.', $class ), E_USER_NOTICE );
	  }

    return addslashes( $string );
}

就是一个和数据库有关的函数,问题可能就出在数据库了。

再结合一下访问日志,我发现有很多本服务器ip访问自己的记录。而且访问的都是wp-cron.php,百度了一下,这个是wp的定时功能,用于定时发布文章,定时备份数据库等功能。可是之前用都基本没有问题的啊。

再用PHPmyadmin查看一下数据库表,问题出现在这里!原来,wp_options表的 cron写入大量无用的数据,果然是它。更深度的原因,竟然是百度sitemap插件!

相信很多站长都有用这款插件,自动生成网站地图,是国人柳城开发的,但这款插件许久没有更新了,而wordpress最近自动更新到最新版本,导致插件不兼容。这款插件用到了定时的功能,来更新站点地图,于是在不兼容的情况下,往数据库里面写入了大量无用的数据。

于是,出现了以上的所有情况。

真相大白,把数据库wp_options表清理了一下,停用了这款插件。网站终于正常。现在回头看,这款插件真的是新手才会用的,用代码完全可以直接实现,而且不用多余的写入数据库、定时更新。教程请移步–>wordpress代码实现网站地图sitemap的html和xml的方法

总结一下,看了网上其它人的情况,还有自己的情况,基本上可以看出来,当你的wordpress内存不足,或者很占CPU的时候,要么是你网站的访问量突然很大,要么,就是插件的问题了。而现在的wordpress有自动更新机制,建议停掉,然后在手动更新之前,看看自己的插件能不能兼容新版本,插件的更新也要及时。

另外,网站访问日志、错误日志也要好好看!问题大多能在里面找到!

 

使用wordpress代码高亮插件

考虑到这是一个半技术性的博客,代码不可少,那么代码高亮就更必不可少了。好在wordpress是个强大的博客系统,很多问题都可以通过插件方便的解决。而之前看到关于代码高亮的一款JavaScript 库SyntaxHighlighter,搜了一下,果然有相关的wordpress插件,叫做SyntaxHighlighter Evolved。

插件安装过程就不再赘述了,去搜索SyntaxHighlighter Evolved安装即可,支持最新版的wordpress。

怎么使用呢?来个例子。比如我要显示一段html的代码,那么我们可以直接编辑代码:

SyntaxHighlighter代码用法

我们看一下具体的效果:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>PHP Code Example</title>
</head>
<body>
    <h1>PHP Code Example</h1>

    <p><?php echo 'Hello World!'; ?></p>

    <p>This line is highlighted.</p>

    <div class="foobar">
        This    is  an
        example of  smart
        tabs.
    </div>

    <p><a href="http://wordpress.org/">WordPress</a></p>
</body>
</html>

效果似乎还不错,在手机上测试了一下,同样可以正常显示。需要提到的一点是,多行代码高亮显示,只需要在行号之间用英文逗号隔开即可,像上面的例子,我就是加了highlight=”3,5″这一个参数。

同时,插件还支持各种风格的代码显示,几乎所有主流编程语言都能显示,详细设置的话直接在“wordpress后台–设置–SyntaxHighlighter”中进行更改即可。更高级的功能,一般都很少用上,这里就不多说了。有时间的朋友,还可以自定义css,把代码的显示弄的有个人特色一点。

另,找到一篇很详细介绍这个插件使用的文章,供大家参考:http://www.diguage.com/archives/59.html