• LAMP 搭建,wordpress.xcache,powerdns及poweradmin


    一,概念

    CGI:

    CGI全称是通用网关接口(Common Gateway Interface),是外部应用程序与与服务器之间的接口标准,是在CGI程序和web服务器之间传递信息的规程

    CGI是一段程序,运行在服务器上。

    CGI可以用任意语言编写,主要这种语言具有标准输入、输出和环境变量

    原理:

    每当客户请求CGI的时候,WEB服务器就请求操作系统读取配置文件,生成一个新的解释器进程(如php-cgi.exe),当CGI进程完成当前任务结束后,web服务器就会杀死这个进程

    FastCGI:

    一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口,

    接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

    原理:

    1. Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)

    2. FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

    3. 当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

    4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

    PHP-CGI(cgi的php实现):

    PHP-CGI是php自带的Fast-CGI管理器

    不足:

    1. php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。

    2. 直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)

    PHP-FPM(FastCgi的php实现):

    特点:

    1. PHP-FPM是一个PHP FastCGI的管理器,他是能够调度php-cgi进程的程序。

    2. 修改php.ini之后,php-cgi进程的确没办法平滑重启,但php-fpm对此的应对方法是新的进程用新的配置,已经存在的进程让按照之前的配置执行到结束。用这种方式进行平滑过渡。

    3. PHP-fpm就是针对于PHP的,Fastcgi的一种实现,他负责管理一个进程池,来处理来自Web服务器的请求。目前,PHP-fpm是内置于PHP的

    PHP-FPM 进程管理器有两种进程组成,一个 Master 进程和多个 Worker 进程。Master 进程负责监听端口,接收来自 Web 服务器的请求,然后指派具体的 Worker 进程处理请求;worker 进程则一般有多个 (依据配置决定进程数),每个进程内部都嵌入了一个 PHP 解释器,用来执行 PHP 代码

    二,基础知识

    1,http与php结合方式

    http与php结合的方式:modules 和FastCGI

    centos7:

    modules: httpd, php, php-mysql, mariadb-server

    FastCGI: httpd, php-fpm, php-mysql, mariadb-server

    centos6:

    modules: :httpd, php, php-mysql, mysql-server

    FastCGI:默认不支持

    php与数据库连接的三种方式:

    rpm -ql php-mysql

    /usr/lib64/php/modules/mysql.so

    <?php
    $conn = mysql_connect('mysqlserver','username','password');
    if ($conn)
    echo "OK";
    else
    echo "Failure";
    #echo mysql_error();
    mysql_close();
    ?>

    /usr/lib64/php/modules/mysqli.so

    <?php
    $mysqli=new mysqli("mysqlserver","username","password");
    if(mysqli_connect_errno()){
    echo "Failure";
    $mysqli=null;
    exit;
    }
    echo "OK";
    $mysqli->close();
    ?>

    /usr/lib64/php/modules/pdo_mysql.so

    <?php
    $dsn='mysql:host=mysqlhost;dbname=test';
    $username=‘root';
    $passwd=‘cnedu';
    $dbh=new PDO($dsn,$username,$passwd);
    var_dump($dbh);
    ?>
    2,phpmyadmin

    yum -y install httpd mariadb-server php php-mysql 启动程序

    创建登陆数据库的用户

    grant all on . to 'test'@'127.0.0.1' identified by "redhat";

    yum -y install php-mbstring

    tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz cd /var/www/html

    cd phpadmin/

    cp config.sample.inc.php config.inc.php并修改:

    $cfg['blowfish_secret'] = 'wwwww'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

    systemctl reload httpd

    访问首页 ip/phpadmin/index.php

    2,安装wordpress

    创建数据库用户

    解压软件至网站根目录的文件夹,访问ip/wordpress/

    填写数据库连接信息,根据提示修改配置文件 vim wp-config.php ,填写站点信息并登陆使用。

    3,DIscuz!

    解压软件 unzip Discuz_X3.3_SC_UTF8.zip 转移upload下的文件到指定根目录

    为目录加写权限 setfacl -R -m u:apache:rwx upload/ 安装成功后去除权限

    访问ip/upload/install/

    4,加速器 XCache

    机制:

    基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode 缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译 阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过 分析opcode后并将它们重新排列以达到快速执行的目的

    yum -y install php-xcache 或

    源码 解压

    yum -y install php-devel

    $ phpize --clean && phpize ​ ./configure --enable-xcache --enable... ​ $ make # make install

    拷贝模块至php模块目录中

    cp /data/xcache-3.2.0/modules/xcache.so /usr/lib64/php/modules/

    引用模块

    cp /data/xcache-3.2.0/xcache.ini   /etc/php.d/

    将动态页面缓存为静态

    三,安装

    1,yum 安装

    yum -y install php-fpm php-mysql mariadb-server httpd

    在主配置文件后添加(/etc/httpd/conf/httpd.conf)

    proxyrequests off proxypassmatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

    修改:DirectoryIndex index.php

    在根目录下创建测试文件:

    <?php $conn = mysql_connect('192.168.36.72','yon','redhat'); if ( $conn ) echo "OK"; else echo "faiiooal"; mysql_close();

    ?>

    <?php

    phpinfo();

    ?>

    注意:需关闭firewalld 及selinux

    2,源码编译

    1)源码准备 带有apr apr-util,否则报错

    configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/

    apr-1.7.0.tar.gz

    apr-util-1.6.1.tar.gz

    httpd-2.4.39.tar.bz2

    mariadb-10.2.23-linux-x86_64.tar.gz

    php-7.3.2.tar.xz

    wordpress-5.0.3-zh_CN.tar.gz

    2)安装相关包组

    yum install gcc glibc pcre-devel openssl-devel expat-devel libxml2-devel bzip2-devel libmcrypt-devel

    编译httpd 过程:

    编译httpd

    tar xf apr-1.7.0.tar.gz

    tar xf apr-util-1.6.1.tar.gz

    tar xf httpd-2.4.39.tar.bz2

    mv apr-1.7.0    httpd-2.4.39/srclib/apr

    mv apr-util-1.6.1   httpd-2.4.39/srclib/apr-util

    cd httpd-2.4.39/

    # ./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-included-apr

    make && make install

    useradd -r -s /sbin/nologin apache

    echo 'PATH=/app/httpd24/bin:$PATH' > /etc/profile.d/lamp.sh

    vim /app/httpd24/conf/httpd.conf

    user apache

    group apache

    编译php7.x

    ./configure --prefix=/app/php --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-mbstring --enable-xml --enable-sockets --enable-fpm --enable-maintainer-zts --disable-fileinfo make -j 4 && make install

    cd /app/php

    cp php-fpm.conf.default php-fpm.conf

    cp php-fpm.d/www.conf.default php-fpm.d/www.conf

    service php-fpm start

    修改httpd配置文件支持fpm

    vim /app/httpd24/conf/httpd.conf 取消下面两行的注释 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 修改下面行

    <IfModuledir_module>

    DirectoryIndex index.php index.html

    </ifModule>

    加下面四行

    AddType application/x-httpd-php.php

    AddType application/x-httpd-php-source .phps

    ProxyRequestsOff ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1

     

    安装二进制数据库:

    tar -xf mariadb-10.2.23-linux-x86_64.tar.gz -C /usr/local/

    cd /usr/local

    ln -s mariadb-10.2.23-linux-x86_64/ mysql

    chown -R root.root /usr/local/mysql/

    useradd -r -s /sbin/nologin mysql

    mkdir -pv /data/mysql chown mysql.mysql /data/mysql

    scripts/mysql_install_db --datadir=/data/mysql --user=mysql

    mkdir /etc/mysql/

    cp support-files/my-huge.cnf /etc/mysql/my.cnf

    vim /etc/mysql/my.cnf

    datadir=/data/mysql

    cp support-files/mysql.server /etc/init.d/mysqld

    chkconfig --add mysqld

    service mysqld start

    echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

    . /etc/profile.d/mysql.sh

    # 创建wordpress 数据库

    CREATE DATABASE wpdb

    创建用户

    mysql>create database wpdb;

    mysql>grant all on wpdb.* to wpuser@'192.168.36.%' identified by 'centos';

    mysql>grant all on wpdb.* to wpuser@'localhost' identified by 'centos';

    安装wordpress

    tar -xvf wordpress-5.0.3-zh_CN.tar.gz -C /app/httpd24/htdocs/

    chown -R root.root wordpress/

    cp wp-config-sample.php wp-config.php

    修改wp-config .php, 填写数据库连接信息

    在浏览器访问 http://ip/wordpress/wp-admin/install.php 进行安装

    参考:codex.wordpress.org

     

    四,安装 Powerdns+mysql

    1,安装powerdns,需要EPEL源

    yum install -y pdns pdns-backend-mysql

    准备数据库表及用户:

    准备mariadb中的数据库,表和用户 CREATE DATABASE powerdns; GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'centos';

    创建表:参考官网资料

    或导入SQL语句:

    cat pdns.sql

    CREATE DATABASE powerdns; GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'centos';

    use powerdns CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT DEFAULT NULL, account VARCHAR(40) DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB;

    CREATE UNIQUE INDEX name_index ON domains(name);

    CREATE TABLE records ( id BIGINT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, change_date INT DEFAULT NULL, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id) ) Engine=InnoDB;

    CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); CREATE INDEX recordorder ON records (domain_id, ordername);

    CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) NOT NULL, PRIMARY KEY (ip, nameserver) ) Engine=InnoDB;

    CREATE TABLE comments ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(10) NOT NULL, modified_at INT NOT NULL, account VARCHAR(40) NOT NULL, comment VARCHAR(64000) NOT NULL, PRIMARY KEY (id) ) Engine=InnoDB;

    CREATE INDEX comments_domain_id_idx ON comments (domain_id); CREATE INDEX comments_name_type_idx ON comments (name, type); CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);

    CREATE TABLE domainmetadata ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, kind VARCHAR(32), content TEXT, PRIMARY KEY (id) ) Engine=InnoDB;

    CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);

    CREATE TABLE cryptokeys ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, flags INT NOT NULL, active BOOL, content TEXT, PRIMARY KEY(id) ) Engine=InnoDB;

    CREATE INDEX domainidindex ON cryptokeys(domain_id);

    CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id) ) Engine=InnoDB;

    CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

     

    配置PowerDNS使用mariadb作为后台数据库

    vim /etc/pdns/pdns.conf,查找到包含launch= 的行,修改并添加下面的内容

    launch=gmysql

    gmysql-host=localhost

    gmysql-port=3306

    gmysql-dbname=powerdns

    gmysql-user=powerdns

    gmysql-password=centos

    systemctl start pdns

    systemctl enable pdns

    2,安装httpd和php相关包

    搭建poweradmin环境

    以之前编译安装的环境进行安装,无法识别安装首页,查看日志报 “ Primary script unknown”

    原因未知:网上解决资料

    I changed this old .htaccess:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    RewriteBase /fc2/

    To this new variation:
    RewriteBase /fc2/
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /fc2/index.php [L]

    重新安装(模块化php安装)

    yum -y install httpd php php-devel php-gd php-mcrypt php-imap phpldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring phpmcrypt php-mhash gettext

    systemctl start httpd

    3,下载安装poweradmin

    http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz

    解压 tar xf poweradmin-2.1.7.tgz -C /var/www/html

    访问 http://192.168.36.73/poweradmin/install/

     

     

     

    复制执行授权命令到数据库执行

    按图所示修改配置文件

     

     

    结束。

    ps:

    报错:

    1,Distributor caught fatal exception: Unable to launch gmysql connection: Unable to connect to database: Access denied for user 'powerdns'@'localhost' (using password: YES)

    解决:密码错误 修改 vim /etc/pdns/pdns.conf

    2,不能连接至 /tmp/mysql.sock

    解决:

    1,修改数据库的sock文件位置

    2,修改/etc/pdns/pdns.conf ,使用端口及IP地址连接

    重点:看日志进行排错

    操作记录要存档查看。

    4,小实验

    1,实现基于UDS的fastcgi的LAMP

    高版本编译httpd + php-fpm (Apache/2.4.39

    yum install gcc glibc pcre-devel openssl-devel expat-devel libxml2-devel bzip2-devel libmcrypt-devel

    tar  xf  apr-1.7.0.tar.gz 
    tar xf apr-util-1.6.1.tar.gz
    cp -r apr-1.7.0 httpd-2.4.39/srclib/apr
    cp -r apr-util-1.6.1 httpd-2.4.39/srclib/apr-util
    cd httpd-2.4.39/
      ./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
    make -j 4 && make install

    vim /etc/profile.d/httpd24.sh
    PATH=/app/httpd24/bin:$PATH

    useradd -r -s /sbin/nologin apache
    vim /app/httpd24/conf/httpd.conf
    User apache
    Group apache
    vim /etc/rc.d/rc.local
    /app/httpd24/bin/apachectl start
    chmod +x /etc/rc.d/rc.local

    配置php-fpm

    yum  -y install   php-fpm  
    vim /app/httpd24/conf/httpd.conf
    取消下面两行的注释
    LoadModule proxy_module modules/mod_proxy.so          
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    修改此行
    DirectoryIndex index.php index.html

    添加下面四行
    AddType application/x-httpd-php.php
    AddType application/x-httpd-php-source .phps
    ProxyRequestsOff
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
    参看:http://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html

    走UNIX 套接字:

     addType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    ProxyRequests Off
    #ProxyPassMatch ^/(.*.php)$ unix:/var/run/php.sock|fcgi://localhost/app/httpd24/htdocs/$1
    <FilesMatch ".php$">
      # Note: The only part that varies is /path/to/app.sock
    SetHandler "proxy:unix:/var/run/php.sock|fcgi://localhost/"                                        
    </FilesMatch>

    ​## 使用如下没有成功,参考官网文档修改为上面所示成功了

    ProxyPassMatch    ^/(.*.php)$     unix:/var/run/php.sock|fcgi://localhost/app/httpd24/htdocs/$1

     

     

  • 相关阅读:
    mongodb 报错问题
    Android中Is library配置的作用
    Ubuntu 12.04 中安装和配置 Java JDK
    (转)Android开发把项目打包成apk
    (转)Android--使用Canvas绘图
    Android_Gallery(画廊)
    android组件
    Android中px dpi dip density densityDpi 的相关说明
    (转)Android中px与dip,sp与dip等的转换工具类
    (转)谈谈Android中的Rect类——奇葩的思维
  • 原文地址:https://www.cnblogs.com/g2thend/p/10884579.html
Copyright © 2020-2023  润新知