lamp部署及编译安装

lamp

资源类型:

静态资源:原始形式与响应给客户端的结果一致;

动态资源:原始形式通常为程序文件(为某种编程语言开发),需要运行后将生成的结果展示给客户端;如果请求的资源不存在那么结果就会重定向至指定的文件中

客户端技术:javascript
服务端技术:php, jsp, ...

CGI:Common Gateway Interface

CGI是一种协议,定义了客户端(web服务器程序)与服务端(特定的应用程序服务进程)进行数据交换的一种规范;

程序:指令+数据
    指令:代码
    数据:存储
        文件系统:单机文件,分布式文件系统;
    DBMS:
        SQL:Oracle, SQL Server, DB2, MySQL, PostgreSQL(PGSQL), MariaDB, Percona-Server, ...
        NoSQL:
            KV:redis, ...
            Document:MongoDB, ...
            Column:HBase, ...
            Graph:

开源领域:

httpd+php/perl/python+mysql/mongodb: amp

httpd+tomcat+mysql/mongodb: amt
    jsp:tomcat, jetty, resin, jboss, websphere, weblogic

php:编程语言,嵌入式编程语言,高度模块化(extensions),配置文件(/etc/php.ini, /etc/php.d/*.ini);
        <html>
            ...
            <?php
                code
            ?>
            ...
        </html>


httpd+php:
        CGI 
        Module
            prefork:libphp
            worker, event:libphp-zts
        FastCGI
            php以fpm机制独立地监听在一个套接字上;工作模式类似于httpd的prefork;

amp:资源请求的过程

静态资源:Client --> http --> httpd (IO操作)
php动态资源:Client --> http --> httpd --> libphp5.so (IO操作)

php动态资源:Client --> http --> httpd --> libphp5.so (IO操作, php-mysql)--> mysql --> mysqld

php:嵌入式web应用编程语言

作者:Rasmus Lerdorf, Personal Home Page tool, C语言(CGI,Web Forms), PHP/FI
        zeev, andi重写php的解析器, zend engine 1.0, php 4.0; zend engine 2.0 php 5.0(增强的面向对象,PDO)

zend engine:编译 --> opcode, 执行
        Scanning(Lexing), Parsing, Compilation, Excution

        hhvm

php加速器:
        APC,eAccelerator
        XCache

        XCache: XCache is a fast, stable  PHP opcode and data cacher that has been tested and is now running on production servers under high load.

Xcache这个能使php这种动态请求快3倍最为常用的加速器
lamp部署及编译安装

安装php的扩展

yum install php-mbstring (这个表示使php支持中文) php-mcrypt -y

快速部署lamp环境  1:

1、下载

  • CentOS 7:

# yum install mariadb-server httpd php php-mysql
# systemctl start httpd.service mariadb.service
  • CentOS 6:

    yum install httpd php php-mysql mysql-server

    service httpd start

    service mysqld start

    2、改mysql配置文件

  • vim /etc/my.cnf

    • skip_name_resolve=ON
      innodb_file_per_table=ON

  • 注意6的话为

      skip_name_resolve

3、改mysql的root管理密码及各种配置

 mysql_secure_installation

(1)给管理员加密码
(2)删除匿名用户
(3)是否禁用管理员远程登录(一般禁用)    
(4)删除测试文件
(5)重载授权表

收拾好了以后可以用下面的命令进入看看

mysql -u root -p 

>(这里是密码)

添加一条记录试试

GRANT ALL ON wpdb.* TO wpuser@'172.0.0.1' IDENTIFIED BY 'wppass';
这条记录表示添加一个数据库名为 wpdb 用户名为 wpuser 密码为 wppass

php应用程序:

开源代表:wordpress, discuzX, phpwind, drupal...


客户端—(http协议)—http服务器–(fcgi协议)–php动态资源服务器端—(php-mysql)–数据库服务器 》》》》》    模型

php-fpm:就是说把本来是模块化装载的php模块改成独立的程序文件

FastCGI Process Manager, an alternative PHP FastCGI implementation with some additional features useful for sites of any size, 
especially busier sites.

客户端---(http协议)---服务端----(fcgi协议)---后端服务器

fpgi是一个简装版的http协议当用户动态请求到达时,直接将 url 从前端web服务器转到fpgi server

安装方式:

# yum install php-fpm

注意这个和 php模块不能一块安装

  • 主程序:/usr/sbin/php-fpm

  • Unit File:/usr/lib/systemd/system/php-fpm.service

  • 配置文件:

php的通用公共组件的包为 php-common 包来提供通用的公共组件

配置文件(配置PHP的解释器的配置):/etc/php.ini, /etc/php.d/*.ini

ini:配置php解释器工作环境;
    /etc/php.ini, /etc/php.d/*.ini
conf:配置fpm守护进程的工作模式;
    /etc/php-fpm.conf, /etc/php-fpm.d/*.conf
        默认有一个www.conf 里面定义了一个可用的www连接池的配置        

ini:风格格式
    [section_id]
    directive = value

注释符 ’#‘  、 ‘;’

#表示纯属的是注释信息    

’;‘号注释符 后面跟一个空格的行表示可启用的选项 
’;‘跟两个空格的行表示多此选项的说明
  • php.ini的核心配置选项参考:

      http://php.net/manual/zh/ini.core.php
  • php.ini配置选项列表参考:

      http://php.net/manual/zh/ini.list.php

一般需改动 /etc/php.ini 中的时区要不会报错

一般改为 州/市

date.timezone = Asia/Shanghai

lamp部署及编译安装

1、反代主机的基本配置:

    fpm配置虚拟主机反代配置示例1:
        <VirtualHost *:80>
            ServerName www.magedu.com
            DocumentRoot "/vhosts/www"
            <Directory "/vhosts/www">
                Options None
                AllowOverride None
                Require all granted
            </Directory>
            ProxyRequests Off
            ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/vhosts/www/$1
            DirectoryIndex index.php index.html
        </VirtualHost>
fpm配置虚拟主机反代配置示例2:
<VirtualHost *:80>
    ServerName www.magedu.com
    DocumentRoot "/vhosts/www"
    <Directory "/vhosts/www">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/vhosts/www/$1
    ProxyPassMatch ^/(pm-status|ping)$ fcgi://127.0.0.1:9000/$1
    DirectoryIndex index.php index.html
</VirtualHost>

2、连接池的配置

lamp部署及编译安装

    [pool-id] //定义的连接池名称
    listen = 127.0.0.1:9000 #(允许本机当客户端访问fpm,在同一个主机,如果不一致要写入 web主机的地址)
    listen.backlog = -1 (超出请求时队列的长度 -1表示没有上线)
    listen.allowed_clients = 127.0.0.1 (允许那些客户端主机访问)
    user = apache  (运行work进程的用户和组)
    group = apache
    pm = dynamic 
        定义process管理机制:static, dynamic
            static: 服务启动时创建出所有子进程;
            dynamic: 根据用户请求量的变化来维护子进程数量;
    pm.max_children = 50   最大子进程数量
    pm.start_servers = 5    启动时启动多少进程
    pm.min_spare_servers = 5    最小空闲子进程
    pm.max_spare_servers = 35    最大空闲子进程
    pm.max_requests = 500    每一个进程相应多少请求后就杀死重新创建

    pm.status_path = /fpm-status    监控的status页面
    ping.path = /ping
    ping.response = pong     这两个是为了探测服务是否正常

    rlimit_files = 1024        
    rlimit_core = 0

连接池的status参数

http://WEB_SERVER:PORT/pm-status

    pool:                 www    # 连接池名称
    process manager:      dynamic    # 进程管理器类型
    start time:           26/Sep/2016:15:10:26 +0800    # 启动时间
    start since:          7437    # 运行时长
    accepted conn:        6    # 连接池已经处理过的总请求数
    listen queue:         0    # 队列的长度
    max listen queue:     0     # 请求队列的最大长度
    listen queue len:     128     # 监听socket等待队列的最大长度;
    idle processes:       4    # 空闲的进程数;
    active processes:     1    # 活跃的进程数量;
    total processes:      5     # 总进程数;
    max active processes: 1     # 连接池当中过去最大活跃进程度;
    max children reached: 0     # 进程数量达到连接池上限的次数;
    slow requests:        0    # 慢请求的数量;

status 其它格式的输出:

    /pm-status?json
    /pm-status?xml
    /pm-status?html
    /pm-status?full

full格式的输出:(单个进程的相关信息)

    pid:                  33095
    state:                Idle    # 当前进程的状态,idle, running, ...
    start time:           26/Sep/2016:15:10:26 +0800    # 进程启动的日期时间 
    start since:          7968  # 运行时长
    requests:             2    # 处理过的请求数量
    request duration:     112     # 请求处理过程的时长
    request method:       GET    # 请求方法
    request URI:          /pm-status?html     # 请求的URL
    content length:       0    # 请求内容的长度,POST方法才有意义
    user:                 -     # 用户
    script:               -     # php脚本;
    last request cpu:     0.00    # 最近一次请求消耗CPU
    last request memory:  262144    # 最近一次请求消耗的内存量

注意:

    httpd-2.2默认没有自带fcgi模块;php-5.3.3-默认不支持fpm,需要打补丁方可;

CentOS 6.X:要使用fpm 需要安装额外的模块 mod_proxy_fcgi

# yum install httpd mod_proxy_fcgi php-fpm php-mysql mysqld-server

Xcache这个能使php这种动态请求快3倍最为常用的加速器
lamp部署及编译安装

lamp 部署 2

两种部署方式
centos 7

  • Modules:程序包,httpd,php,php-mysql,mariadb-server
    -FastCGI:程序包,httpd,php-fpm,php-mysql,mariadb-server

centos 6

  • Modules:程序包,httpd,php,php-mysql,mysql-server
    -FastCGI:需要先打补丁,httpd、mod_proxy_fcgi php-fpm、 php-mysql、  mysqld-server

步骤

保证 iptables selinux 都没启用

1、安装 httpd  php-fpm

2、去除注释 /etc/http/conf/http.conf 中的 ServerName
   注释 DocumentRoot "/var/www/html"
3、在conf.d/新建 虚拟主机

    fpm配置虚拟主机反代配置示例1:
        <VirtualHost *:80>
            ServerName www.magedu.com
            DocumentRoot "/vhosts/www"
            <Directory "/vhosts/www">
                Options None
                AllowOverride None
                Require all granted
            </Directory>
            ProxyRequests Off
            ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/vhosts/www/$1
            DirectoryIndex index.php index.html
        </VirtualHost>

    fpm配置虚拟主机反代配置示例2:
        <VirtualHost *:80>
            ServerName www.magedu.com
            DocumentRoot "/vhosts/www"
            <Directory "/vhosts/www">
                Options None
                AllowOverride None
                Require all granted
            </Directory>
            ProxyRequests Off
            ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/vhosts/www/$1
            ProxyPassMatch ^/(pm-status|ping)$ fcgi://127.0.0.1:9000/$1
            DirectoryIndex index.php index.html
        </VirtualHost>

4、创建目录和文件重启服务并访问就行了

编译安装amp:

(1) 系统环境:CentOS 6, 7
    CentOS 6:apr, apr-util的版本为1.3.9,不适用于httpd-2.4的编译;
    CentOS 7:apr, apr-util的版本为1.4+,

(2) 开发环境:
    Development Tools, Server Platform Development

(3) 各程序版本
    httpd: 2.2, 2.4
    php:5.3.x 5.4.x, 5.6.x
    mysql:5.1, 5.5, 5.6, 5.7, 5.8, 8.0
    mariadb:5.x, 10.x

(4) httpd+php
php的编译选项:
    Modules:--with-apxs
        httpd MPM:
            prefork:
        worker, event:专用选项--enable-maintainer-zts
        ftm:--enable-fpm 

CentOS 7:httpd-2.4, mariadb, php-5.4
    安装次序:httpd, mariadb, php 

    安装MariaDB:
    预制的包管理器格式的程序包:
    rpm包:
    os vendor:mariadb-devel 
MariaDB官方
    通用二进制格式的程序包:
    源码包编译:项目构建工具为cmake, 而非流行的make;

通用二进制格式包的安装配置步骤:

    # useradd -r mysql
    # tar xf mariadb-VERSION-linux-x86_64.tar.gz -C /usr/local/
    # cd /usr/local/
    # ln -sv mariadb-VERSION-linux-x86_64 mysql
    # cd mysql
    # chown -R root:mysql ./*

    # mkdir -pv /mydata/data 
    # chown -R mysql.mysql /mydata/data

    # scripts/mysql_install_db  --user=mysql  --datadir=/mydata/data --skip_name_resolve

    # cp support-files/my-large.cnf  /etc/my.cnf 

        [mysqld]
        .......
        datadir = /mydata/data
        skip_name_resolve = ON
        innodb_file_per_table = ON

    # cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
    # chkconfig --add mysqld


httpd-2.4:

    ~]# yum install pcre-devel openssl-devel libevent-devel apr-devel apr-util-devel -y

    # ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-pcre --with-zlib --with-apr=/usr --with-apr-util=/usr
    # make -j #
    # make install 

    # echo 'export PATH=/usr/local/apache2/bin:$PATH' > /etc/profile.d/httpd.sh
    # . /etc/profile.d/httpd.sh
    # apachectl start

    安装php5:

安装:
    (1) 作为httpd的模块安装:
    # ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-openssl --enable-mbstring --enable-xml --enable-sockets --with-freetype-dir --with-gd --with-libxml-dir=/usr --with-zlib --with-jpeg-dir --with-png-dir --with-mcrypt --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/etc/php.ini --with-config-file-scan-dir=/etc/php.d/
                    # make -j # && make install

    注意:如果mpm为线程模型,则需要额外使用--enable-maintainer-zts

    (2) 安装为fpm:
    # ./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-openssl --enable-mbstring --enable-xml --enable-sockets --with-freetype-dir --with-gd --with-libxml-dir=/usr --with-zlib --with-jpeg-dir --with-png-dir --with-mcrypt --enable-fpm --with-config-file-path=/etc/php.ini --with-config-file-scan-dir=/etc/php.d/
        # make -j # && make install

复制配置文件:
    cp php.ini-production  /etc/php.ini 

编译php为httpd的模块后,整合php至httpd:
编译httpd.conf,添加:
    DirectoryIndex index.php index.html
    AddType application/x-httpd-php .php

原创文章,作者:qzx,如若转载,请注明出处:http://www.178linux.com/52838

(0)
qzxqzx
上一篇 2016-10-19
下一篇 2016-10-19

相关推荐

  • Centos6.5上搭建openvpn

    前言     为了方便远程办公时访问公司的内部系统,如:svn、OA、wiki、禅道等等;通通在防火墙上做了端口映射。发现有时也不好用,所有开始弄OPENVPN。 openvpn简介     官方网站:https://openvpn.net 打不开请爬墙   &nbsp…

    Linux干货 2016-02-14
  • systemd

    systemd 启动流程:POST -> BIOS -> MBR bootloader -> kernel 临时根 -> 根文件系统 -> init init 能够管理、控制init进程的模块,就是init系统 能够让系统在用户预定义的级别下运行 设备管理器: sysvinit : CentOS 5 第一个广泛应用的init系统…

    Linux干货 2017-05-21
  • 编程命名中的7+1个提示

    前几天Neo写过《编程中的命名设计那点事》,这里也有另外一篇和程序命名的文章,可以从另一个角度看看。 1.- 变量应该是尽可能的望文知意。千万不要使用教材中的命名方式。 好的变量: daysDateRange, flightNumber, carColor. 坏的变量: days, dRange, temp, data, aux… 在我们…

    Linux干货 2015-04-03
  • linux echo命令用法实例

           对于初学者来说,掌握一些基本命令的常用用法是必须的。本文列举了echo命令的几个常用用法并加以实例说明,以作回顾、参考。       echo命令常用作打印输出字符串,根据echo帮助文件可以获得以下信息:        语法 echo…

    2017-05-20
  • DNS快速入门、正反向解析……

    DNS服务原理详解 因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析。 我们在访问一个网站的时候,只要输入该网站的网址就会跳转到该网站页面,而实现这一过程就需要DNS服务器将域名解析为IP地址,进而实现数据通信。 DNS:…

    2017-06-03
  • 用户 组

    用户 组    在linux系统中,用户管理是基于用户名和密码的方式进行资源的分配,linux上用户Username/UID分为以下类别:    管理员: root,0    普通用户: 1-65535 普通用户分为:系统用户和登录用户两种 系统用户:1-499(cen…

    系统运维 2016-08-04