• 生产环境LAMP搭建


    生产环境LAMP搭建 - 基于 fastcgi

    由于在module模式,php只是已http的模块形式存在,无形中加重了http的服务负载,通常在企业架构中,使用fastcgi的模式,将所有的服务都设置为不同的独立服务,独立进程的形式存在,并部署在不同的设备上。是用的比较多的。

    php 进程 默认使用9000端口

    默认 php-fpm 只监听127.0.0.1 的 9000 端口

    配置php的连接方式,有静态和动态两种模式
    pm = static|dynamic

    static:固定数量的子进程;pm.max_children
    dynamic:子进程数量以动态模式管理

    最大连接进程数,生产中可以加大
    pm.max_children = 500

    服务开启第时候开启多少个进程
    pm.start_servers = 50

    最小空闲进程
    pm.min_spare_servers = 5

    最大空闲进程
    pm.max_spare_servers = 35

    假设来了100个人访问,那么服务器一开始会开启50个进程,现在会再开启50个,这时候走了10个,还剩90个,他就会关闭5个进程,因为最小空间被设置为5个,至少还要保留5 个空闲进程

    每个进程的最大用户请求数
    pm.max_requests = 500

    apache 需要在配置文件中,定义php的位置,否则不会把php的请求转发到php服务上

    DirectoryIndex index.php
    ProxyRequests Off
    # fcgi后跟php服务绑定的IP和端口 ,和请求要转发的路径
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 
    

    centos7 搭建 (同一台设备)

    #安装环境
    yum install httpd php-fpm php-mysql mariadb-server
    
    #配置 apache 转发 php
    vim /etc/httpd/conf.d/fastcgi.conf
    DirectoryIndex index.php
    ProxyRequests Off
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 
    
    #配置php 连接 mysql
    vim index.php
    <?php
        $dsn='mysql:host=localhost;dbname=mysql';
        $username='root';
        $passwd='centos';
        $dbh=new PDO($dsn,$username,$passwd);
        var_dump($dbh);
    ?>
    
    systemctl restart httpd
    systemctl start mariadb
    
    

    centos7 搭建 (每个服务独立在不同的设备)

    web 服务器 192.168.30.17

    yum install httpd
    
    vim /etc/httpd/conf.d/fastcgi.conf
    DirectoryIndex index.php
    ProxyRequests Off
    ProxyPassMatch ^/(.*.php)$ fcgi://192.168.30.27:9000/data/www/$1 
    
    注意:在HTTPD服务器上必须启用proxy_fcgi_module模块,充当PHP客户端
    httpd –M |grep fcgi
    cat /etc/httpd/conf.modules.d/00-proxy.conf
    
    systemctl start httpd
    

    php 服务器 192.168.30.27

    yum install php-fpm php-mysql
    
    #修改绑定端口,让他绑定所有IP
    vim /etc/php.fpm.d/www.conf
    listen = 9000
    
    #修改允许IP访问的选项
    listen.allowed_clients
    
    mkdir -pv /data/www/
    
    vim /data/www/index.php
    填充php连接数据库语句
    
    systemctl start php
    
    

    mysql 服务器 192.168.30.37

    yum install mariadb mariadb-server
    
    systemctl start mariadb
    
    #执行初始化脚本
    mysql_ser_install
    
    #创建php使用的账户
    grant all on *.* to phpuser@'192.168.30.%' identified by 'phppassword';
    flush privileges;
    
    

    在LAMP的基础上搭建 DiscuzX

    # 解压到php服务器上
    unzip Discuz_X3.2_SC_UTF8.zip
    
    cd upload 
    cp -r * /data/www/
    
    setfacl -R -m  u:apache:rwx /data/www/*
    
    #修改http的默认路径
    vim /etc/http/conf/http.conf
    
    DocumentRoot "/data/www/"
    
    <Directory "/data/www">
        Require all granted
    </Directory>
    
    
    #修改php服务器的设置 ,搭建discuzX的话,把apache 和 php 放在同一台设备上 (待测试)
    vim /etc/httpd/conf.d/fastcgi.conf
    DirectoryIndex index.php
    ProxyRequests Off
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/www/$1 
    
    第一次老王执行的时候,发现网页显示错误,只能显示文字,其他的东西显示不出来,他认为是传输问题 ,php无法处理静态页面,就改了这句话
    ProxyPassMatch ^/(.*.*)$ fcgi://127.0.0.1:9000/data/www/$1 
    
    后来发现是默认网站路径的问题,要修改默认网站的路径
    vim /etc/httpd/conf/http.conf
    #这边的路径要改成新的路径 
    DocumentRoot "/var/www/html/
    
    自己的真实解决方案!!!如果配置多个虚拟主机的话,直接注释到主配置文件中的
    DocumentRoot "/var/www/html/!!!!!!
    自己的真实解决方案!!!如果配置多个虚拟主机的话,直接注释到主配置文件中的
    DocumentRoot "/var/www/html/!!!!!!
    自己的真实解决方案!!!如果配置多个虚拟主机的话,直接注释到主配置文件中的
    DocumentRoot "/var/www/html/!!!!!!
    
    
    执行install/index.php 初始化
    
    初始化完成后,回收acl权限
    setfacl -R -b /data/www/*
    
    
    
    

    实现虚拟主机,在同一台设备上搭建wordpress 和 DiscuzX

    #虚拟主机设置
    <virtualhost *:80>
    servername www.bbs.com
    documentroot /data/www
    DirectoryIndex index.php
    ProxyRequests Off
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/www/$1
    <directory /data/www>
    require all granted
    </directory>
    </virtualhost>
    
    
    <virtualhost *:80>
    servername www.blog.com
    documentroot /data/www2
    DirectoryIndex index.php
    ProxyRequests Off
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/www2/$1
    <directory /data/www2>
    require all granted
    </directory>
    </virtualhost>
    
    

    源码编译实现LAMP 并且基于Fastcgi模型

    准备3台设备:
    apache : 192.168.30.7
    php: 192.168.30.17
    mysql / mariadb : 192.168.30.27

    编译顺序:通常是 apache > mysql > php

    准备安装包

    http
    httpd-2.4.33.tar.bz2
    apr-1.6.3.tar.gz
    apr-util-1.6.1.tar.gz
    
    mysql
    mariadb-10.2.15-linux-x86_64.tar.gz
    
    php
    php-7.1.18.tar.bz2
    
    blog
    wordpress-4.9.4-zh_cn.tar.gz
    
    #安装编译包组
    yum groupinstall Development
    
    #创建账户,用于未来apache和php使用
    groupadd -r -g 80 apache
    useradd -r -s /sbin/nologin -g 80 -u 80 apache
    
    

    编译apache

    
    #安装apache依赖包
    yum install pcre-devel openssl-devel expat-devel
    
    tar xvf httpd-2.4.33.tar.bz2
    tar xvf apr-1.6.3.tar.gz
    tar xvf apr-util-1.6.1.tar.gz
    
    mv apr-1.6.3 httpd-2.4.33/srclib/apr
    mv apr-util-1.6.1 httpd-2.4.33/srclib/apr-util
    
    cd httpd-2.4.33
    
    ./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
    
    echo PATH=/app/httpd24/bin:$PATH > /etc/profile.d/lamp.sh
    . /etc/profile.d/lamp.sh
    
    #设置服务使用apache账户密码
    vim /app/http.conf
    
    
    #启动服务
    apachectl 
    
    

    二进制安装mysql

    tar xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local
    
    cd /usr/local
    ln -s mariadb-10.2.15-linux-x86_64/ mysql
    
    useradd -r mysql -s /sbin/nologin 
    
    chown -R mysql.mysql mysql
    
    mkdir /data/mysqldb -pv
    
    chown mysql.mysql /data/mysql/
    
    vim /etc/profile.d/lamp.sh
    PATH=/usr/local/mysql/bin:/app/httpd24/bin:$PATH > /etc/profile.d/lamp.sh
    
    .  /etc/profile.d/lamp.sh
    
    cd /usr/local/mysql/
    ./scripts/mysql_install_db --datadir=/data/mysqldb --user=mysql
    
    cp support-files/my-huge.cnf /etc/my.cnf
    cp support-files/mysql.server /etc/init.d/mysqld
    
    vim /etc/my.cnf
    datadir=/data/mysqldb
    innodb_file_per_table
    log_bin
    
    chkconfig --add mysqld
    service mysqld start
    
    create database wpdb;
    grant all on wpdb.* to wpuser@'192.168.30.%' identified by 'centos'; 
    flush privileges;
    

    编译php 7.1.7 基于 fastcgi 模式

    php编译后需要自己准备ini 配置文件

    #安装php依赖包
    yum install libxml2-devel bzip2-devel libmcrypt-devel (epel)
    
    tar xvf php-7.1.7.tar.bz2
    cd php-7.1.7/
    
    #设置编译项
    ./configure --prefix=/app/php 
    --enable-mysqlnd 
    --with-mysqli=mysqlnd 
    --with-openssl 
    --with-pdo-mysql=mysqlnd 
    --enable-mbstring 
    --with-freetype-dir 
    --with-jpeg-dir 
    --with-png-dir 
    --with-zlib 
    --with-libxml-dir=/usr 
    --enable-xml 
    --enable-sockets 
    --enable-fpm 
    --with-config-file-path=/etc 
    --with-config-file-scan-dir=/etc/php.d 
    --enable-maintainer-zts 
    --disable-fileinfo
    
    make -j 4 && make install
    
    --enable-fpm  表示以 fastcgi模式来编译安装
    
    vim /etc/profile.d/lamp.sh
    PATH=/app/php/bin:/usr/local/mysql/bin:/app/httpd24/bin:$PATH > /etc/profile.d/lamp.sh
    
    .  /etc/profile.d/lamp.sh
    
    
    #准备配置文件
    cd /root/srcs/php-7.1.18/
    cp php.ini-production /etc/php.ini
    
    #准备启动脚本
    cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    chmod +x /etc/init.d/php-fpm
    chkconfig --add php-fpm
    chkconfig php-fpm on
    
    cd /app/php/etc
    cp php-fpm.conf.default php-fpm.conf
    cp php-fpm.d/www.conf.default php-fpm.d/www.conf
    
    #设置服务使用apache账户密码
    vim /app/etc/php-fpm.d/www.conf
    
    service php-fpm start
    
    

    编辑apache 配置 使其支持 php

    
    vim /app/httpd24/conf/httpd.conf 
    取消下面两行的注释 激活fcgi模块
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    修改下面行
    <IfModule dir_module>
        DirectoryIndex index.php index.html
    </IfModule>
    
    addType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    ProxyRequests Off
    ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
    
    
  • 相关阅读:
    八数码
    狂神说笔记——多线程05
    狂神说笔记——Java SE基础03
    从零开始的卷积神经网络
    深度学习与机器学习的区别
    模型的评估与选择
    经验风险VS风险函数
    常见的损失函数
    Erlang聊天室
    uniapp APP端 清除缓存
  • 原文地址:https://www.cnblogs.com/ddz-linux/p/10699449.html
Copyright © 2020-2023  润新知