详解MYSQL的备份还原(PHP实现)

手把手教你实现MYSQL的备份还原

示例代码用我比较熟悉的PHP,当然你看完并理解了其中的思路,相信你也可以快速地用你熟悉的语言自己写出来。

一、新建dbBackup类,设置默认参数。

class dbBackup {
    public $host='localhost';    //数据库地址
    public $user='root';    //登录名
    public $pwd='';    //密码
    public $database;    //数据库名
    public $charset='utf8';    //数据库连接编码:mysql_set_charset
}

二、添加数据库连接function。

/**
     * 连接数据库 ...
     */
    function db() {        
        $con = mysql_connect($this->host,$this->user,$this->pwd);
        if (!$con){
            die('Could not connect');
        }

        $db_selected = mysql_select_db($this->database, $con);
        if (!$db_selected) {
            die('Can't use select db');
        }

        mysql_set_charset($this->charset);  //设置编码

        return $con;
    }

三、查询数据库表集合

/**
     * 表集合 ...
     */
    function tblist() {
        $list=array();

        $rs=mysql_query("SHOW TABLES FROM $this->database");
        while ($temp=mysql_fetch_row($rs)) {
            $list[]=$temp[0];
        }

        return $list;
    }

四、查询表结构

/**
     * 表结构SQL ...
     */
    function sqlcreate() {
        $sql='';

        $tb=$this->tblist();        
        foreach ($tb as $v) {
            $rs=mysql_query("SHOW CREATE TABLE $v");
            $temp=mysql_fetch_row($rs);
            $sql.="-- 表的结构:{$temp[0]} --rn";
            $sql.="{$temp[1]}";
            $sql.=";-- <xjx> --rnrn";
        }
        return $sql;
    }

注:$sql.=”;– –rnrn”;每句SQL后面必须加上分号(;)分割,MYSQL导入才能识别。– — 是程序对SQL语句分割的标识,可以自定义但必须是注释语句,否则影响SQL语句。rn无实际意义用于文本美观

五、INSERT INTO语句

/**
     * 数据插入SQL ...
     */
    function sqlinsert() {
        $sql='';

        $tb=$this->tblist();        
        foreach ($tb as $v) {
            $rs=mysql_query("SELECT * FROM $v");
            if (!mysql_num_rows($rs)) {//无数据返回
                continue;
            }        
            $sql.="-- 表的数据:$v --rn";
            $sql.="INSERT INTO `$v` VALUESrn";        
            while ($temp=mysql_fetch_row($rs)) {
                $sql.='(';
                foreach ($temp as $v2) {
                    if ($v2===null) {
                        $sql.="NULL,";
                    }
                    else {
                        $v2=mysql_real_escape_string($v2);
                        $sql.="'$v2',";
                    }                    
                }
                $sql=mb_substr($sql, 0, -1);
                $sql.="),rn";
            }
            $sql=mb_substr($sql, 0, -3);
            $sql.=";-- <xjx> --rnrn";    
        }

        return $sql;
    }

注:

  1. 无数据返回时必须跳出本次循环,避免生成多余代码

  2. 当字段值为(NULL)时,插入字符为(NULL)而不是(‘NULL’),没有单引号。3.$v2=mysql_real_escape_string($v2),这是必要的转义

  3. mb_substr($sql, 0, -1)、mb_substr($sql, 0, -3),必须去除最后一个逗号(,) 否则SQL语句出错5.$sql.=”;– –rnrn”,详见第四步注

六、备份操作

/**
     * 备份 ...
     * @param $filename 文件路径
     */
    function beifen($filename) {
        $this->db();    //连接数据库

        $sql=$this->sqlcreate();
        $sql2=$this->sqlinsert();        
        $data=$sql.$sql2;

        return file_put_contents($filename, $data);
    }

七、还原操作

/**
     * 还原 ...
     * @param $filename 文件路径
     */
    function huanyuan($filename) {
        $this->db();    //连接数据库

        //删除数据表
        $list=$this->tblist();
        $tb='';
        foreach ($list as $v) {
            $tb.="`$v`,";
        }
        $tb=mb_substr($tb, 0, -1);
        if ($tb) {
            $rs=mysql_query("DROP TABLE $tb");
            if ($rs===false) {
                return false;
            }
        }

        //执行SQL
        $str=file_get_contents($filename);
        $arr=explode('-- <xjx> --', $str);
        array_pop($arr);

        foreach ($arr as $v) {
            $rs=mysql_query($v);
            if ($rs===false) {
                return false;
            }
        }

        return true;
    }

备份示例:

$x=new dbBackup();
$x->database='test';
$rs=$x->beifen('db.sql');
var_dump($rs);

还原示例:

$x=new dbBackup();
$x->database='test';
$rs=$x->huanyuan('db.sql');
var_dump($rs);

完整代码:

class dbBackup {
    public $host='localhost';    //数据库地址
    public $user='root';    //登录名
    public $pwd='';    //密码
    public $database;    //数据库名
    public $charset='utf8';    //数据库连接编码:mysql_set_charset

    /**
     * 备份 ...
     * @param $filename 文件路径
     */
    function beifen($filename) {
        $this->db();    //连接数据库

        $sql=$this->sqlcreate();
        $sql2=$this->sqlinsert();        
        $data=$sql.$sql2;

        return file_put_contents($filename, $data);
    }

    /**
     * 还原 ...
     * @param $filename 文件路径
     */
    function huanyuan($filename) {
        $this->db();    //连接数据库

        //删除数据表
        $list=$this->tblist();
        $tb='';
        foreach ($list as $v) {
            $tb.="`$v`,";
        }
        $tb=mb_substr($tb, 0, -1);
        if ($tb) {
            $rs=mysql_query("DROP TABLE $tb");
            if ($rs===false) {
                return false;
            }
        }

        //执行SQL
        $str=file_get_contents($filename);
        $arr=explode('-- <xjx> --', $str);
        array_pop($arr);

        foreach ($arr as $v) {
            $rs=mysql_query($v);
            if ($rs===false) {
                return false;
            }
        }

        return true;
    }

    /**
     * 连接数据库 ...
     */
    function db() {        
        $con = mysql_connect($this->host,$this->user,$this->pwd);
        if (!$con){
            die('Could not connect');
        }

        $db_selected = mysql_select_db($this->database, $con);
        if (!$db_selected) {
            die('Can't use select db');
        }

        mysql_set_charset($this->charset);    //设置编码

        return $con;
    }

    /**
     * 表集合 ...
     */
    function tblist() {
        $list=array();

        $rs=mysql_query("SHOW TABLES FROM $this->database");
        while ($temp=mysql_fetch_row($rs)) {
            $list[]=$temp[0];
        }

        return $list;
    }

    /**
     * 表结构SQL ...
     */
    function sqlcreate() {
        $sql='';

        $tb=$this->tblist();        
        foreach ($tb as $v) {
            $rs=mysql_query("SHOW CREATE TABLE $v");
            $temp=mysql_fetch_row($rs);
            $sql.="-- 表的结构:{$temp[0]} --rn";
            $sql.="{$temp[1]}";
            $sql.=";-- <xjx> --rnrn";
        }
        return $sql;
    }

    /**
     * 数据插入SQL ...
     */
    function sqlinsert() {
        $sql='';

        $tb=$this->tblist();        
        foreach ($tb as $v) {
            $rs=mysql_query("SELECT * FROM $v");
            if (!mysql_num_rows($rs)) {//无数据返回
                continue;
            }        
            $sql.="-- 表的数据:$v --rn";
            $sql.="INSERT INTO `$v` VALUESrn";        
            while ($temp=mysql_fetch_row($rs)) {
                $sql.='(';
                foreach ($temp as $v2) {
                    if ($v2===null) {
                        $sql.="NULL,";
                    }
                    else {
                        $v2=mysql_real_escape_string($v2);
                        $sql.="'$v2',";
                    }                    
                }
                $sql=mb_substr($sql, 0, -1);
                $sql.="),rn";
            }
            $sql=mb_substr($sql, 0, -3);
            $sql.=";-- <xjx> --rnrn";    
        }

        return $sql;
    }
}
//备份
//$x=new dbBackup();
//$x->database='test';
//$rs=$x->beifen('db.sql');
//var_dump($rs);
//还原
//$x=new dbBackup();
//$x->database='test';
//$rs=$x->huanyuan('db.sql');
//var_dump($rs);

基于Php mysql存储过程的详解

实例一:无参的存储过程

$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
$sql = "
create procedure myproce()
begin
INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0');
end;
";
mysql_query($sql);//创建一个myproce的存储过程

$sql = "call test.myproce();";
mysql_query($sql);//调用myproce的存储过程,则数据库中将增加一条新记录。

实例二:传入参数的存储过程

$sql = "
create procedure myproce2(in score int)
begin
if score >= 60 then
select 'pass';
else
select 'no';
end if;
end;
";
mysql_query($sql);//创建一个myproce2的存储过程
$sql = "call test.myproce2(70);";
mysql_query($sql);//调用myproce2的存储过程,看不到效果,可以在cmd下看到结果。

实例三:传出参数的存储过程

$sql = "
create procedure myproce3(out score int)
begin
set score=100;
end;
";
mysql_query($sql);//创建一个myproce3的存储过程
$sql = "call test.myproce3(@score);";
mysql_query($sql);//调用myproce3的存储过程
$result = mysql_query('select @score;');
$array = mysql_fetch_array($result);
echo '<pre>';print_r($array);

实例四:传出参数的inout存储过程

$sql = "
create procedure myproce4(inout sexflag int)
begin
SELECT * FROM user WHERE sex = sexflag;
end;
";
mysql_query($sql);//创建一个myproce4的存储过程
$sql = "set @sexflag = 1";
mysql_query($sql);//设置性别参数为1
$sql = "call test.myproce4(@sexflag);";
mysql_query($sql);//调用myproce4的存储过程,在cmd下面看效果

实例五:使用变量的存储过程

$sql = "
create procedure myproce5(in a int,in b int)
begin
declare s int default 0;
set s=a+b;
select s;
end;
";
mysql_query($sql);//创建一个myproce5的存储过程
$sql = "call test.myproce5(4,6);";
mysql_query($sql);//调用myproce5的存储过程,在cmd下面看效果

实例六:case语法

$sql = "
create procedure myproce6(in score int)
begin
case score
when 60 then select '及格';
when 80 then select '及良好';
when 100 then select '优秀';
else select '未知分数';
end case;
end;
";
mysql_query($sql);//创建一个myproce6的存储过程
$sql = "call test.myproce6(100);";
mysql_query($sql);//调用myproce6的存储过程,在cmd下面看效果

实例七:循环语句

$sql = "
create procedure myproce7()
begin
declare i int default 0;
declare j int default 0;
while i<10 do
set j=j+i;
set i=i+1;
end while;
select j;
end;
";
mysql_query($sql);//创建一个myproce7的存储过程
$sql = "call test.myproce7();";
mysql_query($sql);//调用myproce7的存储过程,在cmd下面看效果

实例八:repeat语句

$sql = "
create procedure myproce8()
begin
declare i int default 0;
declare j int default 0;
repeat
set j=j+i;
set i=i+1;
until j>=10
end repeat;
select j;
end;
";
mysql_query($sql);//创建一个myproce8的存储过程
$sql = "call test.myproce8();";
mysql_query($sql);//调用myproce8的存储过程,在cmd下面看效果

实例九:loop语句

$sql = "
create procedure myproce9()
begin
declare i int default 0;
declare s int default 0;

loop_label:loop
set s=s+i;
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop;
select s;
end;
";
mysql_query($sql);//创建一个myproce9的存储过程
$sql = "call test.myproce9();";
mysql_query($sql);//调用myproce9的存储过程,在cmd下面看效果

实例十:删除存储过程

mysql_query(“drop procedure if exists myproce”);//删除test的存储过程

实例十一:存储过程中的游标

总结:

  1. 存储过程可用于InnoDB或MyISAM类型的表

  2. show procedure status显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等<br>

  3. SHOW CREATE PROCEDURE myproce显示某一个存储过程的详细信息<br>

git commit 时自动对所有 php 文件执行语法错误检查

使用 Shell 编写 hooks 下的 pre-commit 钩子,实现在 git commit 时检查所有的 .php 文件(忽略所有删除状态的文件)是否存在语法错误,如果存在错误,则终止提交,并输出相关错误信息。

#!/bin/bash

# @auth 后三排
# @site https://housanpai.com

# 错误消息内容
IS_ERROR_MESSAGE=()

while read st file
do

    # 文件状态为 D 时跳出本次循环
    if [ 'D' == "$st" ]
    then
        echo $file
        continue
    fi

    # 文件末为不是 .php 时输出文件,并跳出本次循环
    if [[ ! "$file"  =~ (.php$) ]]
    then
        echo $file
        continue
    fi

    PHP_LINT=`php -l $file`

    # 本文件不存在语法错误,输出结果,并跳出本次循环
    if [ 0 -eq $? ]
    then
        echo $PHP_LINT
        continue
    fi

    # 统计错误消息内容的数据个数
    ERROR_COUNT=${#IS_ERROR_MESSAGE[@]}

    # 将错误的存放到数组里面
    IS_ERROR_MESSAGE[${ERROR_COUNT}]=$PHP_LINT

done <<EOF
`git diff --cached --name-status`
EOF

if [ -n "${IS_ERROR_MESSAGE}" ]
then

    # 循环输出错误消息,并且指定文字颜色为红色
    for ((i=0;i<${#IS_ERROR_MESSAGE[@]};i++))
    do
        echo -e "33[31m ${IS_ERROR_MESSAGE[$i]} 33[0m"
    done

    exit 1

fi

exit 0

Docker在PHP中的实践过程

最近微服务很火,很多人都在尝试,我们公司也在这段时间尝试着来时间微服务化,其中就涉及到Docker。
在实践docker中踩了很多坑,也对Docker有了更多的认识,下面记录一下。

Docker在打包Spring boot项目时候,因为Spring boot内部集成了tomcat并且提供了直接打包成jar包的方式,Spring boot如何打包: https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html

Dockerfile文件如下:

FROM java:8

COPY target/your-project-name.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

因为公司中还有一个之前的PHP项目,所以也需要对PHP进行打包,查了很多资料,最后在实践中发现,PHP项目需要一个nginx来管理网络,用如何的Dockerfile文件打包的话就会有问题。

FROM php:7.0-cli
RUN apt-get update && apt-get install -y 
        libfreetype6-dev 
        libjpeg62-turbo-dev 
        libmcrypt-dev 
        libpng12-dev 
    && docker-php-ext-install -j$(nproc) iconv mcrypt 
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 
    && docker-php-ext-install -j$(nproc) gd
FROM php:7.1-fpm
RUN pecl install -o -f redis 
    &&  rm -rf /tmp/pear 
    &&  docker-php-ext-enable redis
RUN docker-php-ext-install  mysqli pdo pdo_mysql

EXPOSE 80

COPY . /php
WORKDIR /php

经过再三查找资料,发现这么一篇文章:

Dockerise your PHP application with Nginx and PHP7-FPM

在里面找到了解决办法,使用docker-compose就好了,docker-compose.yml文件如下:

version: '2'

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./:/php
            - ./site.conf:/etc/nginx/conf.d/default.conf
        networks:
            - code-network
    php:
        image: php:fpm
        volumes:
            - ./:/php
        networks:
            - code-network

networks:
    code-network:
        driver: bridge

上面提到的site.conf文件如下:

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /php;

    location ~ .php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

直接在命令行执行:

$sudo docker-compose up

就可以看看到运行的结果了,可是因为我们是直接部署到阿里云容器服务上面的,docker-compose这种方式就有了缺陷,因为阿里云容器服务不支持server这种方式,不得已最终经过查询,找到了:
https://hub.docker.com/r/richarvey/nginx-php-fpm/

直接使用如下Dockerfile就可以了:

FROM richarvey/nginx-php-fpm:latest

MAINTAINER Ric Harvey <[email protected]>

ENV PHPREDIS_VERSION 3.0.0
RUN mkdir -p /usr/src/php/ext/redis 
    && curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 
    && echo 'redis' >> /usr/src/php-available-exts 
    && docker-php-ext-install redis

EXPOSE 80

ADD ./ /var/www/html/

既然当初选择了Docker这种方式,就要想办法吃透这门技术,否则在生产环境中的话出了问题就麻烦了。以上对与PHP的Docker化的实践过程,盯着一行行的日志信息查找原因,因为对PHP不是特别熟,还向PHP的同事请教了很多问题。

记录下来面的日后再遇到,虽然以上内容没有针对每个Docker的技术点进行介绍,找时间把每个技术点都记录下来。简单来说就是,PHP必须要搭配nginx使用。

CentOS 7系统上部署Apache+PHP+MariaDB+xcache使用rpm,php module

在进行部署之前需要确保当前的CentOS系统可以连接到任意一个repo软件仓库——如果网络通畅,直接使用默认repo仓库(最好使用本地yum仓库,速度快),如果无法连接网络使用本地repo仓库通过修改/etc/yum.repo.d/中的配置文件进行配置。

在配置好后使用以下命令安装Apache+PHP+MariaDB:

~]# yum install httpd php php-mysql mariadb* -y

在安装完成之后可以将其设为开机启动:

~]# systemctl start mariadb
~]# systemctl start httpd

使用下面这条命令可以检查一个服务是否设为开机启动:

~]# systemctl is-enabled SERVICE.service

到这里,基本的安装文件已经安装完成,但是从windows中使用浏览器访问此主机IP时还是不能访问,因为被防火墙阻止了,我们可以先将防火墙关闭和selinux,使用以下命令:

~]# iptables -F
~]# setenforce 0

就可以看到以下画面(172.16.7.100是这台主机的IP):

未分类

接下来开始配置两个虚拟主机,目的是当使用不同的网址访问此主机的时候能够返回不同的页面。首先添加一个配置文件到/etc/httpd/conf.d/中,文件中写入以下内容:

~]# vim /etc/httpd/conf.d/vhost-myweb
<VirtualHost *:80>
        ServerName myweb.wordpress.com
        DocumentRoot /myweb/wordpress
        ErrorLog logs/wordpress-error_log
        CustomLog logs/wordpress-access_log combiend
        <Directory "/myweb/wordpress">
                Options None
                AllowOverride   None
                Require all granted
        </Directory>
</VirtualHost>
<VirtualHost *:80>
        ServerName myweb.phpmyadmin.com
        DocumentRoot /myweb/phpmyadmin
        ErrorLog logs/phpmyadmin-error_log
        CustomLog logs/phpmyadmin-access_log combiend
        <Directory "/myweb/phpmyadmin">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
</VirtualHost>

然后创建两个虚拟主机对应的家目录,并重新加载服务:

~]# mkdir -pv /myweb/{wordpress,phpmyadmin}
~]# systemctl reload httpd
~]# echo "<h1>wordpress</h1>"> /myweb/wordpress/index.html
~]# echo "<h1>phpmyadmin</h1>"> /myweb/phpmyadmin/index.html

通过上面两条输出重定向命令创建测试文件分别到各自对应的目录,创建完成之后回到windows中修改hosts配置文件(此文件在C:WindowsSystem32driversetc目录中的hosts文件,这个文件保存了本地的DNS记录),在其中加入这两条(如果提示不能修改,那么鼠标右键此文件,属性→安全→编辑,在下方权限那里将修改权限的勾打上):

172.16.7.100 myweb.wordpress.com
172.16.7.100 myweb.phpmyadmin.com

配置保存之后在浏览器通过访问两个网址即可看到不同的网址:

未分类

未分类

接下来删除这两个测试文件(~]# rm -frv /myweb/*),开始配置wordpress和phpmyadmin,wordpress的配置请参考上一篇博客:http://11142243.blog.51cto.com/11132243/1964468 ,在这里只进行phpmyadmin的配置。

配置好的wordpress:

未分类

下面开始配置phpmyadmin,下载地址:https://files.phpmyadmin.net/phpMyAdmin/3.5.4/phpMyAdmin-3.5.4-all-languages.tar.gz

(在这里一定要注意版本,我因为没有注意版本,下载了一个高版本的,但是它所依赖的其他软件版本没跟上,调试了快一整天才发现这个问题 = =!)

调试的时候将下边的语句写到要调适的php文件开头,将错误输出打开:

    <?php
    ini_set('display_errors','on');
    error_reporting(E_ALL);
    ?>

当软件下载完成之后(可以通过

wget -c https://files.phpmyadmin.net/phpMyAdmin/3.5.4/phpMyAdmin-3.5.4-all-languages.tar.gz

命令下载或者从windows中下载之后导入到linux系统中(使用xshell自带功能或者FileZilla软件))

未分类

 ~]# cd /myweb/phpmyadmin/
 phpmyadmin]# tar -zxvf ~/phpMyAdmin-3.5.4-all-languages.tar.gz -C ./

然后将phpMyAdmin-4.7.4-all-languages/目录中的文件复制到当前目录中:

phpmyadmin]# mv phpMyAdmin-3.5.4-all-languages/* ./

这样,phpMyAdmin远程管理软件即配置完成,我们可以通过远程来管理数据库中的内容:

未分类

但是因为我们只给wordpress账户赋予了远程登陆的权限,所以在这里只能登陆账号“wordpress”(如果想要登陆root账户,只需要按照在数据库中给wordpress账户分配权限的方法给root用户分配远程登陆的权限即可)

未分类

未分类

此时网站已经部署好了,我们接下来需要对其进行测试,可以在另外一台能够连接到这台主机的主机中使用以下命令(同样需要修改hosts文件——/etc/hosts):

echo '172.16.7.100    myweb.phpmyadmin.com myweb.wordpress.com' >> /etc/hosts
~]# ab -c 100 -n 1000 myweb.phpmyadmin.com/index.php

此时,我正好有一台IP为172.16.6.11的主机,ab压力测试结果如下:

未分类

未分类

为了进一步提升访问速度,我们可以安装php的xcache模块:

]# yum install php-xcache

未分类

安装之后使用以下命令就可以看到如下图所示的效果(没有安装的使用这个命令效果如上图)

~]# php -v

未分类

安装成功之后再进行测试,发现速度提升了将近一倍

未分类

未分类

Ubuntu14.04系统安装配置Nginx+PHP+MySQL+EduSoho

注意: 本教程基于Ubuntu系统 14.04版本并且需要以root用户操作机器,请在确保您的环境是否符合以上两个条件之后,再进行后续的操作。

切记:我们的edusoho访问目录是edusoho/web,只有在nginx或者Apache配
置里面把根目录定位到web目录下,才不会出现奇怪的问题,否则就会出现图片不能显示或者文件无法上传的问题。

本教程主要分为一下几个步骤:更新系统、安装并配置Nginx、安装MySQL、安装并配置PHP、 安装并配置EduSoho,测试Edusoho。

一、更新系统

sudo apt-get update
sudo apt-get upgrade

二、安装Nginx

1、安装nginx

sudo apt-get install nginx

2、配置Nginx

sudo vim /etc/nginx/nginx.conf 
然后 在http{} 字段里添加
client_max_body_size 1024M;

三、安装并配置MySQL

1、安装mysql

apt-get install mysql-server

在这个过程过程中会要求您输入MySQL数据库的root密码,请认真填写。

2、创建数据库

mysql -uroot -p 

然后你需要输入MySQL数据库的root密码。

进入数据库命令行模式后,创建edusoho数据库,执行:

CREATE DATABASE `edusoho` DEFAULT CHARACTER SET utf8 ; 
GRANT ALL PRIVILEGES ON `edusoho`.* TO 'esuser'@'localhost' IDENTIFIED BY 'edusoho';
quit;

注意:这里为edusoho数据库创建了一个用户名,用户名为:esuser,密码为edusoho,在后面安装的第三步需要用到,不建议直接填写root账户。

四、安装PHP

1、安装PHP

sudo apt-get install php5 php5-cli php5-curl php5-fpm php5-intl php5-mcrypt php5-mysqlnd php5-gd

2、修改PHP上传文件的大小限制

sudo vim /etc/php5/fpm/php.ini

添加一下三行配置文字

post_max_size = 1024M 
memory_limit = 1024M
upload_max_filesize = 1024M

3、配置PHP-FPM

编辑配置文件: vim /etc/php5/fpm/pool.d/www.conf,找到:

;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0660
去除最前面的分号。

然后重启PHP-FPM:
sudo /etc/init.d/php5-fpm restart

五、配置安装EduSoho

1、下载/解压程序

mkdir /var/www
cd /var/www
wget http://download.edusoho.com/edusoho-VERSION.tar.gz  (注:将VERSION替换为当前EduSoho最新版本号,可从官网www.edusoho.com查询获取)
tar -zxvf edusoho-VERSION.tar.gz
chown www-data:www-data edusoho/ -Rf
注:这里的下载地址可以在http://www.edusoho.com/中可以获取到,VERSION为下载来之后压缩包后面的版本号。

2、配置nginx的虚拟主机

sudo vim /etc/nginx/sites-enabled/edusoho

输入以下内容:

server {
    listen 80;

    # [改] 网站的域名
    server_name www.example.com example.com;

    #301跳转可以在nginx中配置

    # 程序的安装路径
    root /var/www/edusoho/web;

    # 日志路径
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        index app.php;
        try_files $uri @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }

    location ~ ^/udisk {
        internal;
        root /var/www/edusoho/app/data/;
    }

    location ~ ^/(app|app_dev).php(/|$) {
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  HTTPS              off;
        fastcgi_param HTTP_X-Sendfile-Type X-Accel-Redirect;
        fastcgi_param HTTP_X-Accel-Mapping /udisk=/var/www/edusoho/app/data/udisk;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 8 128k;
    }

    # 配置设置图片格式文件
    location ~* .(jpg|jpeg|gif|png|ico|swf)$ {
        # 过期时间为3年
        expires 3y;

        # 关闭日志记录
        access_log off;

        # 关闭gzip压缩,减少CPU消耗,因为图片的压缩率不高。
        gzip off;
    }

    # 配置css/js文件
    location ~* .(css|js)$ {
        access_log off;
        expires 3y;
    }

    # 禁止用户上传目录下所有.php文件的访问,提高安全性
    location ~ ^/files/.*.(php|php5)$ {
        deny all;
    }

    # 以下配置允许运行.php的程序,方便于其他第三方系统的集成。
    location ~ .php$ {
        # [改] 请根据实际php-fpm运行的方式修改
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  HTTPS              off;
        fastcgi_param  HTTP_PROXY         "";
    }
}

配置文件中的example.com 为您需要指定的域名,为了确保您的域名能被他人访问得到, 您需要将这个域名和您当前的机器IP地址做DNS解析工作。

3、重启nginx

sudo /etc/init.d/nginx restart

最后一步:

浏览器中打开:http://YOU_DOMAIN 安装,当然这里的YOU_DOMAIN是您的域名。

CentOS 7.2使用yum安装PHP 7

a使用webstatic源,官方文档 https://webtatic.com/packages/php70/ 

查看版本号

lsb_release -a

添加源

rpm  -Uvh  https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm  -Uvh  https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装

yum  install  php70w

问题

1、缺少gmp Processing Dependency: libgmp.so.3()(64bit)

解决方案

下载 compat-libgmp-4.3.1-1.sl7.x86_64.rpm (https://drive.google.com/file/d/0B7S255p3kFXNZFJDdWtkV3RyZTA/view)

安装rpm

rpm -ivh gmp-4.3.1-7.el6_2.2.x86_64.rpm

2、安装依赖缺失 Requires: httpd-mmn = 20051115

解决方案 清理yum

yum clean all

CentOS7.3搭建Apache+PHP7+web SVN+MariaDB Web服务器

注意:本教程使用干净的 CentOS 7进行安装,如果您已安装其他环境或软件,涉及到内核升级,请您妥善备份,可能导致您已安装的软件不兼容或出现其他问题。

免责声明:本教程仅以个人经验撰写,未必适合所有系统环境。如在使用本教程途中,出现无法挽救的损失(如数据丢失等),本人概不负责。

再次提醒:使用本教程前请妥善备份现有数据!使用本教程前请妥善备份现有数据!使用本教程前请妥善备份现有数据!

如果您使用本教程的方法过程中出现问题,您可留言,我将在能力范围内尽可能协助解决。

本文最终服务器环境配置:

Apache 2.7.27
subversion1.9.7
MariaDB10.2.28
php7.1.8

下面开始进入教程吧。

一. 升级内核和软件包

[root@instance-l79ltvo6 ~]# yum -y update
...    
Complete!

直到控制台输出Complete!说明升级完成,最好还是重启一下吧

[root@instance-l79ltvo6 ~]# reboot

二. 安装 apache 2.4.27

先安装一些基本依赖

[root@instance-l79ltvo6 ~]# yum install -y gcc gcc-c++ openssl-devel zlib-devel
//在root目录下创建一个soft文件夹,我们本次教程的软件将都放在该目录下
[root@instance-l79ltvo6 ~]# mkdir soft 
[root@instance-l79ltvo6 ~]# cd soft

然后开始安装apr、apr-util、pcre 3个依赖,最后再安装 apache

1、安装 apr

[root@instance-l79ltvo6 ~]# wget https://mirror.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.2.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf apr-1.6.2.tar.gz
[root@instance-l79ltvo6 ~]# cd apr-1.6.2/
[root@instance-l79ltvo6 ~]# ./configure --prefix=/usr/local/apr
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

因为我们使用了 apr 1.6.2 的依赖,所以下面我们必须要用 apr-util 1.6.0 版本,apr-util 1.6.0

不再捆绑安装 expat ,但又需要 expat 的支持,所以我们得手动先安装 expat。不然编译 apache 的时候会报错。

2、安装 expat

[root@instance-l79ltvo6 ~]# wget https://sourceforge.net/projects/expat/files/expat/2.2.3/expat-2.2.3.tar.bz2
[root@instance-l79ltvo6 ~]# tar jxf expat-2.2.3.tar.bz2
[root@instance-l79ltvo6 ~]# cd expat-2.2.3/
[root@instance-l79ltvo6 ~]# ./configure --prefix=/usr/local/expat
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

3、安装 apr-util

[root@instance-l79ltvo6 ~]# wget  https://mirror.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.0.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf apr-util-1.6.0.tar.gz
[root@instance-l79ltvo6 ~]# cd apr-util-1.6.0/
[root@instance-l79ltvo6 ~]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-expat=/usr/local/expat
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

4、安装 pcre

[root@instance-l79ltvo6 ~]# wget http://sourceforge.mirrorservice.org/p/pc/pcre/pcre/8.41/pcre-8.41.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf pcre-8.41.tar.gz
[root@instance-l79ltvo6 ~]# cd pcre-8.41/
[root@instance-l79ltvo6 ~]# ./configure --prefix=/usr/local/pcre
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

5、安装 apache

[root@instance-l79ltvo6 ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.27.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf httpd-2.4.27.tar.gz
[root@instance-l79ltvo6 ~]# cd httpd-2.4.27/
[root@instance-l79ltvo6 ~]# ./configure 
--prefix=/usr/local/apache 
--with-apr=/usr/local/apr 
--with-apr-util=/usr/local/apr-util 
--with-pcre=/usr/local/pcre 
--with-ssl 
--with-zlib 
--with-mpm=worker 
--enable-rewrite 
--enable-so 
--enable-ssl 
--enable-cache 
--enable-disk-cache 
--enable-file-cache 
--enable-mem-cache 
--enable-headers 
--enable-expires 
--enable-deflate 
--enable-dav 
--enable-dav-fs 
--enable-cgi 
--enable-proxy 
--enable-proxy-fcgi
//这里请根据自身实际情况开启相关模块
[root@instance-l79ltvo6 ~]# make && make install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

6、修改 apache 配置文件

编辑/usr/local/apache/conf/httpd.conf

#LoadModule ssl_module modules/mod_ssl.so //去掉#开启 SSL
#LoadModule rewrite_module modules/mod_rewrite.so  //去掉#开启 rewrite
#ServerName www.example.com:80    //去掉#并把 www.example.com:80 修改为你的IP:80或者域名
#Include conf/extra/httpd-vhosts.conf     //去掉#,开启虚拟主机配置
//如果你需要安装svn服务,你需要开启
#LoadModule dav_module modules/mod_dav.so//去掉#

找到以下代码并更换

<Directory />
    AllowOverride none
    Require all denied
</Directory>
//修改为
<Directory />
    Options Indexes FollowSymLinks    //如不需要显示目录,把 Indexes 去掉
    AllowOverride ALL    //开启rewrite
    Require all granted
</Directory>

编辑/usr/local/apache/conf/extra/httpd-vhosts.conf,删除全部,
并添加下列代码

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs"
    ServerName your IP    //你的IP地址
    ErrorLog "logs/你的IP-error_log"
    CustomLog "logs/你的IP-access_log" common
</VirtualHost>

7、添加启动服务

[root@instance-l79ltvo6 ~]# cp /usr/local/apache/bin/apachectl  /etc/rc.d/init.d/
[root@instance-l79ltvo6 ~]# mv /etc/rc.d/init.d/apachectl /etc/rc.d/init.d/httpd
[root@instance-l79ltvo6 ~]# cd /etc/rc.d/init.d/

编辑 httpd ,在 #!/bin/sh 下面添加下面代码

# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 90 90
# description:http server

注册服务

[root@instance-l79ltvo6 ~]# chkconfig --add httpd
[root@instance-l79ltvo6 ~]# chkconfig httpd on

把 apache 加入系统环境变量

[root@instance-l79ltvo6 ~]# vim /etc/profile.d/httpd.sh
//写入
export PATH=$PATH:/usr/local/apache/bin
//保存后赋予执行权限
[root@instance-l79ltvo6 ~]# chmod 0777 /etc/profile.d/httpd.sh
[root@instance-l79ltvo6 ~]# source /etc/profile.d/httpd.sh

8、启动 apache

首先检查配置文件是否出错

[root@instance-l79ltvo6 ~]# /usr/local/apache/bin/apachectl -t
Syntax OK    //说明没问题,可以直接启动

启动 apache

[root@instance-l79ltvo6 ~]# systemctl start httpd.service

然后打开浏览器,输入你的IP地址,看到It works!,说明apache成功启动了

It works!

三. 安装 subversion 1.9.7

(如不需要svn服务请跳过)

1、安装 scons

[root@instance-l79ltvo6 ~]# cd /root/soft
[root@instance-l79ltvo6 ~]# wget http://sourceforge.mirrorservice.org/s/sc/scons/scons/2.5.1/scons-2.5.1.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf scons-2.5.1.tar.gz
[root@instance-l79ltvo6 ~]# cd scons-2.5.1/
[root@instance-l79ltvo6 ~]# python setup.py install --prefix=/usr/local/scons
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

2、安装 serf

[root@instance-l79ltvo6 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/serf/serf-1.3.9.tar.bz2
[root@instance-l79ltvo6 ~]# tar xf serf-1.3.9.tar.bz2
[root@instance-l79ltvo6 ~]# cd serf-1.3.9/
[root@instance-l79ltvo6 ~]# /usr/local/scons/bin/scons prefix=/usr/local/serf APR=/usr/local/apr APU=/usr/local/apr-util
[root@instance-l79ltvo6 ~]# /usr/local/scons/bin/scons install
[root@instance-l79ltvo6 ~]# cd ..    //返回上级目录

3、编译 subverion

[root@instance-l79ltvo6 ~]# wget http://www.sqlite.org/2017/sqlite-amalgamation-3190300.zip
[root@instance-l79ltvo6 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.9.7.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf subversion-1.9.7.tar.gz
[root@instance-l79ltvo6 ~]# unzip sqlite-amalgamation-3190300.zip
[root@instance-l79ltvo6 ~]# mv /root/soft/sqlite-amalgamation-3190300 /root/soft/subversion-1.9.7/sqlite-amalgamation
[root@instance-l79ltvo6 ~]# cd subversion-1.9.7/
[root@instance-l79ltvo6 ~]# ./configure 
--prefix=/usr/local/svn 
--with-apr=/usr/local/apr 
--with-apr-util=/usr/local/apr-util 
--with-serf=/usr/local 
--enable-mod-activation 
--with-apache-libexecdir=/usr/local/apache/modules 
--with-apxs=/usr/local/apache/bin/apxs  
--without-berkeley-db
[root@instance-l79ltvo6 ~]# make && make install

给SVN创建一个名为svn的非登录用户

[root@instance-l79ltvo6 ~]# useradd svn -s /sbin/nologin

把svn加入到系统环境变量

[root@instance-l79ltvo6 ~]# vim /etc/profile.d/svn.sh
//添加
export PATH=$PATH:/usr/local/svn/bin
保存后赋予执行权限
[root@instance-l79ltvo6 ~]# chmod 0777 /etc/profile.d/svn.sh
[root@instance-l79ltvo6 ~]# source /etc/profile.d/svn.sh

在/etc/ld.so.conf.d/创建一个serf-1.3.9.conf,指定lib目录,不然svn启动会报错

[root@instance-l79ltvo6 ~]# vim /etc/ld.so.conf.d/serf-1.3.9.conf
//添加
/usr/local/lib
保存后刷新
[root@instance-l79ltvo6 ~]# /sbin/ldconfig -v

4、配置 subverion

下面我们先创建一个 test 项目

[root@instance-l79ltvo6 ~]# mkdir -p /data/svn
[root@instance-l79ltvo6 ~]# cd /data/svn
[root@instance-l79ltvo6 ~]# svnadmin create test

然后我们打开 /data/svn/test /就会发现里面自动创建了一些目录

conf
db
format
hooks
locks
README.txt

在conf里面的文件就是配置该项目的人员和权限,但如果多个项目,开发人员一样,那就要配置很多次了,这样很麻烦,所以我们要弄成配置一次权限就能直接应用到所有项目里面。

[root@instance-l79ltvo6 ~]# cp /data/svn/test/conf/authz  /data/svn/authz
[root@instance-l79ltvo6 ~]# cp /data/svn/test/conf/passwd  /data/svn/passwd
[root@instance-l79ltvo6 ~]# cp /data/svn/test/conf/svnserve.conf  /data/svn/svnserve.conf
//然后设置一个用户密码,这里以创建root用户为例,这里的演示是将密码加密而非明文存储
[root@instance-l79ltvo6 ~]# htpasswd -c /data/svn/passwd root
New password:       //输入密码
Re-type new password:    //再次输入密码

这样 root 用户就创建完成了,创建其他用户同理。 接下来我们需要修改配置文件

[root@instance-l79ltvo6 ~]# vim /data/svn/svnserve.conf
//删除所有内容,增加下面的代码
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
[sasl]
//保存
[root@instance-l79ltvo6 ~]# vim /data/svn/authz
//删除所有内容,增加下面的代码
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
administrators = root

[/]
@administrators=rw

[test:/]
* = r
//保存

我们尝试启动下svn服务

[root@instance-l79ltvo6 ~]# svnserve --config-file /data/svn/svnserve.conf -d -r /data/svn

没有报错,说明启动成功了
把/data/svn/目录的拥有者更改为svn

[root@instance-l79ltvo6 ~]# chown -R svn:svn /data/svn

最后我们需要修改 apache 的相关配置文件
编辑/usr/local/apche/conf/httpd.conf

//找到
User daemon
Group daemon
//修改为
User svn
Group svn

编辑/usr/local/apache/conf/extra/httpd-vhost.conf,把刚刚那次编辑的内容更换为

<VirtualHost *:80>
    ServerName 你的IP
    ErrorLog "logs/你的IP-error_log"
    CustomLog "logs/你的IP-access_log" common
    <Location /svn>
      DAV svn
      #support more repositories
      SVNParentPath /data/svn

      #list all repositories
      #SVNListParentPath on
      AuthType Basic
      AuthName "Please input Username and Password"
      AuthUserFile /data/svn/passwd
      AuthzSVNAccessFile /data/svn/authz
      Require valid-user
    </Location>
</VirtualHost>

然后停止 apache 服务

[root@instance-l79ltvo6 ~]# systemctl stop httpd.service

检查 apache 配置文件是否出错

[root@instance-l79ltvo6 ~]# /usr/local/apache/bin/apachectl -t
Syntax OK    //说明没问题,可以直接启动

重新启动 apache

[root@instance-l79ltvo6 ~]# systemctl start httpd.service

打开浏览器访问http://你的ip/svn/test,提示输入账号密码 也可以使用TortoiseSVN进行操作
输入刚刚设置的账号密码后显示

test - Revision 0: /

说明配置成功,apache+svn服务启动成功

四. 安装 MariaDB 10.2.8

参考https://segmentfault.com/a/11…,把相关版本号更换为10.2.8即可

五. 安装 PHP 7.1.8

先安装基本依赖

[root@instance-l79ltvo6 ~]# yum -y install gcc gcc-c++ autoconf automake libtool re2c flex bison php-mcrypt libmcrypt libmcrypt-devel openssl-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel zlib-devel mcrypt bzip2-devel libicu-devel systemd-devel mhash postgresql-devel libxslt libxslt-devel

编译 PHP

[root@instance-l79ltvo6 ~]# cd /root/soft
[root@instance-l79ltvo6 ~]# wget http://cn.php.net/distributions/php-7.1.8.tar.gz
[root@instance-l79ltvo6 ~]# tar zxf php-7.1.8.tar.gz
[root@instance-l79ltvo6 ~]# cd php-7.1.8/
[root@instance-l79ltvo6 ~]# ./configure 
--prefix=/usr/local/php 
--with-apxs2=/usr/local/apache/bin/apxs 
--with-curl 
--with-freetype-dir 
--with-gd 
--with-gettext 
--with-iconv-dir 
--with-kerberos 
--with-libdir=lib64 
--with-libxml-dir 
--with-mysqli 
--with-openssl 
--with-pcre-regex 
--with-pdo-mysql 
--with-pdo-sqlite 
--with-pear 
--with-png-dir 
--with-xmlrpc 
--with-xsl 
--with-zlib 
--with-mhash 
--enable-fpm 
--enable-bcmath 
--enable-libxml 
--enable-inline-optimization 
--enable-gd-native-ttf 
--enable-mbregex 
--enable-mbstring 
--enable-opcache 
--enable-pcntl 
--enable-shmop 
--enable-soap 
--enable-sockets 
--enable-sysvsem 
--enable-xml 
--enable-zip 
--enable-mysqlnd
[root@instance-l79ltvo6 ~]# make && make install
...    //漫长的等待

编译成功

[PEAR] Archive_Tar    - installed: 1.4.3
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.4.2
[PEAR] PEAR           - installed: 1.10.5
Wrote PEAR system config file at: /usr/local/php/etc/pear.conf
You may want to add: /usr/local/php/lib/php to your php.ini include_path
/root/soft/php-7.1.8/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers:           /usr/local/php/include/php/ext/pdo/

这里提示让我们从源码包复制一份 php.ini 到 /usr/local/php/lib/

[root@instance-l79ltvo6 ~]# cp php.ini-development /usr/local/php/lib/php.ini

修改 apache ,让 apache 支持 php
编辑/usr/local/apache/conf/httpd.conf

LoadModule php7_module        modules/libphp7.so    //默认是开启php7.so
//找到 <IfModule mime_module>,在</IfModule>前面增加
    AddType application/x-httpd-php .php .php3 .phtml .inc
    AddType application/x-httpd-php-source .phps
//找到 DirectoryIndex index.html,增加index.php
DirectoryIndex index.html index.shtml index.cgi index.php index.phtml index.php3

保存后看看httpd.conf有没有出错

[root@instance-l79ltvo6 ~]# /usr/local/apache/bin/apachectl -t
Syntax OK    //说明没问题,可以直接启动

把PHP加入环境变量

[root@instance-l79ltvo6 ~]# vim /etc/profile.d/php.sh
//加入
export PATH=$PATH:/usr/local/php/bin
//保存后赋予执行权限
[root@instance-l79ltvo6 ~]# chmod 0777 /etc/profile.d/php.sh
[root@instance-l79ltvo6 ~]# source /etc/profile.d/php.sh

停止 apache,然后重新启动 apache

[root@instance-l79ltvo6 ~]# systemctl stop httpd.service
[root@instance-l79ltvo6 ~]# systemctl start httpd.service

测试PHP

[root@instance-l79ltvo6 ~]# vim /usr/local/apache/htdocs/phpinfo.php
//加入
<?php
  phpinfo();
?>

保存后访问http://你的IP/phpinfo.php
如果成功访问到PHP的相关信息,那么PHP环境配置成功。

教程结束

本次教程本人在 CentOS 7.3 下搭建成功。

如果出现编译失败也不要灰心,一般都是缺少相关依赖,善于利用搜索引擎。如果实在不知道怎么解决,给我留言,我会在能力范围尽可能的协助解决。

CentOS 7.2安装LAMP(apache mariadb php)搭建WordPress

导语

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。

一.LAMP环境搭建

LAMP即Linux+Apache+MySQL(MariaDB)+PHP,由于其开源免费,所以是目前非常受欢迎的一组网站解决方案,本文也将采用此方案。

1. Linux选择

笔者选用的是CentOS 7.2这个版本,CentOS实质为无支持版的RHEl,稳定性还是比较高的,当然也可以选择其它发行版,只是后续的操作略有不同,本文将只介绍在CentOS下的操作(系统的安装和本文关系不大,故不再赘述)。

2. 安装Apache

直接yum安装

# yum -y install httpd

安装完成后,启动服务

# systemctl start httpd.service

设置为开机启动

# systemctl enable httpd.service

之后可以在浏览器输入localhost进行测试,由于笔者没有安装GUI,只能在客户端浏览器进行测试,在这之前需要打开80和443端口

首先开启防火墙并设置为开机启动

# systemctl start firewalld.service
# systemctl enable firewalld.service

开启端口(80和443)

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https

重启防火墙

# firewall-cmd --reload

查询已开启端口

# irewall-cmd --list-ports

未分类

客户端测试
未分类

3. 安装并配置数据库(Mariadb)

由于甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,所以在CentOS 7中弃用了MySQL,改为支持Mariadb(MySQL的一个分支,与之完全兼容),所以本文也将使用该数据库。

同样还是利用yum命令进行安装,并且配置开机启动

# yum -y install mariadb-server mariadb
# systemctl start mariadb.service
# systemctl enable mariadb.service

配置root密码

# mysql_secure_installation

配置过程中会有几个选项,大家根据自己的需要进行配置就好了

未分类

使用root用户登录mysql

# mysql -u root -p

为WordPress创建数据库

# CREATE DATABASE wordpress;

查看创建结果

未分类

为该数据库创建用户

# CREATE USER username@localhost IDENTIFIED BY 'password';

说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

更改用户权限,保存并退出

# GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost;
# FLUSH PRIVILEGES;
# exit

重启服务

# systemctl restart mariadb.service

4. 安装PHP及相关组件

首先安装PHP

# yum -y install php

安装相关组件

# yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

安装完成之后我们可以新建一个php页面进行测试

# vim /var/www/html/info.php

编辑为以下内容

未分类

重启httpd服务

# systemctl restart httpd.service

打开网址 http://x.x.x.x/info.php 进行查看(x.x.x.x为vps的ip地址)

未分类
php测试页

二. WordPress安装与配置

安装wget(下载) unzip(解压) net-tools(网络管理)

# yum -y install wget unzip net-tools

下载WordPress

# wget http://wordpress.org/latest.zip

未分类

解压文件,并将其复制到/var/www/html/目录下

# unzip -q latest.zip
# cp -rf wordpress/* /var/www/html/

未分类

编辑配置文件

# cd /var/www/html
# cp wp-config-sample.php wp-config.php
# vim wp-config.php

将其修改为以下格式(其中wordpress为数据库名称,wordpressuser为数据库用户名,10293847为数据库密码)

未分类

保存后退出,重启相关服务

# systemctl restart httpd.service
# systemctl restart mariadb.service

三. WordPress的个人设置

完成以上配置之后,便可以输入http://yourserverip/来访问你的博客了。

  • 选择语言

未分类

  • 填写个人信息

未分类

  • 安装完成

未分类

  • 登录到仪表盘

未分类

至此WordPress已经搭建完成,之后可根据自己的需要进行其它配置。

CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)

未分类

准备篇

CentOS 7.0系统安装配置图解教程

http://www.osyunwei.com/archives/7829.html

1、配置防火墙,开启80端口、3306端口

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。

  • 关闭firewall:
systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动
  • 安装iptables防火墙
yum install iptables-services #安装

vi /etc/sysconfig/iptables #编辑防火墙配置文件

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

:wq! #保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效

systemctl enable iptables.service #设置防火墙开机启动

2、关闭SELINUX

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

setenforce 0 #使配置立即生效

安装篇

1、安装Apache

未分类

yum install httpd #根据提示,输入Y安装即可成功安装

systemctl start httpd.service #启动apache

systemctl stop httpd.service #停止apache

systemctl restart httpd.service #重启apache

systemctl enable httpd.service #设置apache开机启动

在客户端浏览器中打开服务器IP地址,会出现下面的界面,说明apache安装成功

未分类

2、安装MariaDB

CentOS 7.0中,已经使用MariaDB替代了MySQL数据库

  • 安装MariaDB

未分类

yum install mariadb mariadb-server #询问是否要安装,输入Y即可自动安装,直到安装完成

systemctl start mariadb.service #启动MariaDB

systemctl stop mariadb.service #停止MariaDB

systemctl restart mariadb.service #重启MariaDB

systemctl enable mariadb.service #设置开机启动

cp /usr/share/mysql/my-huge.cnf /etc/my.cnf #拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可)
  • 为root账户设置密码

未分类

mysql_secure_installation

回车,根据提示输入Y

输入2次密码,回车

根据提示一路输入Y

最后出现:Thanks for using MySQL!

MariaDB密码设置完成,重新启动 MariaDB:

systemctl restart mariadb.service #重启MariaDB

3、安装PHP

  • 安装PHP

未分类

yum install php #根据提示输入Y直到安装完成
  • 安装PHP组件,使PHP支持 MariaDB
yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash

#这里选择以上安装包进行安装,根据提示输入Y回车

systemctl restart mariadb.service #重启MariaDB

systemctl restart httpd.service #重启apache

配置篇

1、Apache配置

vi /etc/httpd/conf/httpd.conf #编辑文件

ServerSignature On  #添加,在错误页中显示Apache的版本,Off为不显示

Options Indexes FollowSymLinks  #修改为:Options Includes ExecCGI FollowSymLinks(允许服务器执行CGI及SSI,禁止列出目录)

#AddHandler cgi-script .cgi #修改为:AddHandler cgi-script .cgi .pl (允许扩展名为.pl的CGI脚本运行)

AllowOverride None  #修改为:AllowOverride All (允许.htaccess)

AddDefaultCharset UTF-8 #修改为:AddDefaultCharset GB2312 (添加GB2312为默认编码)

#Options Indexes FollowSymLinks   #修改为 Options FollowSymLinks(不在浏览器上显示树状目录结构)

DirectoryIndex index.html   #修改为:DirectoryIndex index.html index.htm Default.html Default.htm index.php(设置默认首页文件,增加index.php)

MaxKeepAliveRequests 500  #添加MaxKeepAliveRequests 500 (增加同时连接数)

:wq! #保存退出

systemctl restart httpd.service #重启apache

rm -f /etc/httpd/conf.d/welcome.conf /var/www/error/noindex.html #删除默认测试页

2、php配置

vi /etc/php.ini #编辑

date.timezone = PRC #把前面的分号去掉,改为date.timezone = PRC

disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname

#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

expose_php = Off #禁止显示php版本的信息

short_open_tag = ON #支持php短标签

open_basedir = .:/tmp/  #设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果改了之后安装程序有问题(例如:织梦内容管理系统),可以注销此行,或者直接写上程序的目录/data/www.osyunwei.com/:/tmp/

:wq! #保存退出

systemctl restart mariadb.service #重启MariaDB

systemctl restart httpd.service #重启apache

测试篇

cd /var/www/html

vi index.php #输入下面内容

<?php

phpinfo();

?>

:wq! #保存退出

在客户端浏览器输入服务器IP地址,可以看到如下图所示相关的配置信息!

未分类

注意:apache默认的程序目录是/var/www/html

权限设置:chown apache.apache -R /var/www/html

至此,CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)教程完成!