LNMP应用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
全局流量管理 GTM,标准版 1个月
简介:
LNMP 工作流程;
    用户通过浏览器请求nginx web服务,如果是静态资源,nginx直接解析返回给用户。
    如果是动态请求(.php),nginx 通过FastCGI接口发送给PHP引擎服务(FastCGI进程php-fpm)解析,
    请求要求读取数据库,PHP会请求mysql据库库,以读取需求的数据,并最终通过nginx把获取的数据
    返回给用户。
1.安装配置mysql:
        1.创建mysql用户。 #useradd -s /sbin/nologin -M
        2.采用二进制方式安装mysql
        (mysql-5.5.53-linux2.6-x86_64.tar.gz二进制名称比源码包多了内核和CPU架构)
        (1)解压到指定路径,建立软链接
        # tar zxvf mysql-5.5.53-linux2.6-x86_64.tar.gz
        # mv mysql-5.5.53-linux2.6-x86_64 /application/mysql-5.5.53
        # ln -s /application/mysql-5.5.53/ /application/mysql
    3.初始化mysql配置文件my.cnf
        # mv /etc/my.cnf /etc/my.cnf.bak
        # /bin/cp support-files/my-small.cnf /etc/my.cnf
        # diff /etc/my.cnf support-files/my-small.cnf 
    4.初始化mysql数据库文件:
        # mkdir -p /application/mysql/data
        # chown -R /application/mysql/
        # /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data/ --user=mysql
    一般出现:
        OK
        Filling help tables...
        170201 16:47:32 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
        170201 16:47:32 [Note] /application/mysql/bin/mysqld (mysqld 5.5.53) starting as process 19530 ...
        OK
        2个OK字段代表初始化成功。
    5.配置并启动mysql数据库。
    # cp ./support-files/mysql.server /etc/init.d/mysqld
    # sed -i "s#/usr/local/mysql#/application/mysql#g" /etc/init.d/mysqld /application/mysql/bin/mysqld_safe
    6.启动数据库并检查启动情况:
    # service mysql start
    查看; # netstat -lnutp | grep msyqld
           # lsof -i:3306
           # ps -ef | grep mysqld
    以上三种方法均可。(原理就是通过端口号或路径查看mysql的启动状态)
    如果出现问题可以查看  mysql/data/主机名.err (mysql相对应的日志)
    7.开机自动启动mysql 并将mysql写入系统变量方便应用
    # chkconfig mysqld on
    # echo ' export PATH=/application/mysql/bin:$PATH' >> /etc/profile
    # source /etc/profile
    # which mysqld
    /application/mysql/bin/mysqld
    8.正式进入数据库:
    # mysql
    mysql> 
    如果出现:Access denied for user 这样的字样。
    因为是第一次登录数据库,默认就是root用户无密码状态。排除了mysql启动问题。
    最有可能的原因是数据库初始化出现问题:一般清空data 目录内容。重新初始化。
    检查mysql目录权限,或者是主机名对应ip解析是否正确。
    9.加固mysql
     1.为mysql设置密码
        # mysqladmin -uroot password 'swallow'
     2.清空无用的mysql用户和库。
        mysql> drop database test;
        mysql> select user,host from mysql.user;
        +------+-----------+
        | user | host      |
        +------+-----------+
        | root | 127.0.0.1 |
        | root | ::1       |
        |      | localhost |
        | root | localhost |
        |      | swallow   |
        | root | swallow   |
        +------+-----------+
        mysql> drop user 'root'@'::1'; 
        (使用drop命令  格式是  drop   tablesname  'uservalue'@'对应的hostvalue')
        如果遇到大写字符,有时候drop不太好用可以使用 delete
        mysql> delete from mysql.user where user='root' and host='swallow';
        (delete  from  databasename.tablesname  where user='uservalue' and host='hostname')
        一般优化后:
        mysql> select user,host from user;
        +------+-----------+
        | user | host      |
        +------+-----------+
        | root | 127.0.0.1 |
        | root | localhost |
        +------+-----------+
    FastCGI简介;
        CGI(common gateway interface 通用网关接口)是http服务器与其它机器上的程序服务通信交流的一种工具。
    缺点是:性能差。每次连接时都需要重新启动解析器。
        FastCGI是一个可伸缩地,高速地在http服务器和动态脚本语言间通信的接口(linux下,FastCGI接口就是一个socket,
    这个socket可以是socket文件也可以是IPsocket)优点:就是把动态语言和http服务器分离开来。
    FastCGI主要特点:
        1.给http服务器和动态语言(PHP)间通信提供接口
        2.把动态语言解析和web服务器分离
        3.FastCGI接口方式采用C/S结构,分为客户端(web服务器)和服务器端(动态语言解析服务器)
    nginx下FastCGI运行的原理:
    nginx(fastcgi_pass接口)<=FastCGI=> php-fpm <=wrapper=> php解析器 <=Access database=>mysql
    简诉为:nginx遇到动态程序。通过fastcgi_past 和FastCGI相连,PHP端通过 php-fpm 生成的wrapper 连接到PHP的解析器。(
    如果有必要PHP连接mysql)解析完毕后返回给nginx。这样操作:把动态语言的解析和nginx分离,nginx专门处理静态请求和
    向后转发动态请求。PHP/PHP-FPM解析PHP动态请求。
2.nginx下PHP的安装:
    首先确定:nginx和mysql正常使用。
    #lsof  -i:80 ;lsof -i:3306
    1.检查PHP所需要的lib库(PHP脚本语言的的强大也是需要大量库的支持)
    企业应用需要 zlib-devel libxml2-devel libjpeg-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
        freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel 这些库的支持
        其中  libjpeg-turbo-devel 是libjpeg-devel 的早期名称
    这里启用yum安装:
    # yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y
    # yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel -y
    其中 libiconv ,需要手动编译。(yum没有这个包)
    # wget https://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz --no-check-certificate
        ./configure --prefix=/usr/local/libiconv
        make 
        make install
    才外还需要几个涉及算法和加密的库文件:libmcrypt mhash mcrypt
    这3个库需要epel的第三方yum源。下面构建这个yum 源:(利用阿里的镜像)
    # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    # yum install libmcrypt mhash mcrypt -y
源码安装一般包括3个部分:./configure  分析系统环境(根据开启的支持模块功能去测试库文件是否齐全)
    make (编译) make install (安装)
    2.php 源码包下载地址:
    http://cn2.php.net/get/php-5.5.38.tar.gz/from/this/mirror
    解压,配置安装:
        # ./configure \
--prefix=/application/php5.5.38 \
--with-mysql=/application/mysql \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/usr/local/libiconv/ \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr/ \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-ftp \
--enable-opcache=no
    3.编译安装:
    /data/php-5.5.38/sapi/cli/php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
    出现报错。库文件缺少支持。
    # ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
    chmod: cannot access `ext/phar/phar.phar': No such file or directory
    make: [ext/phar/phar.phar] Error 1 (ignored)
    还有一个可以忽略的错误;找不到 这个文件:  # touch ext/phar/phar.phar
    # make
    Build complete.
    Don't forget to run 'make test'.
    至此,编译通过  执行  # make install
    4.配置PHP的引擎文件php.ini 和PHP服务(FastCGI方式)的配置文件 php-fpm.conf
        # ln -s /application/php-5.5.38 /application/php
        # cp php.ini-production /application/php/lib/php.ini
        # cd /application/php/etc/; cp php-fpm.conf.default php-fpm.conf
    最后启动PHP(FastCGI模式)
    # /application/php/sbin/php-fpm 
    [root@swallow etc]# lsof -i:9000
    COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    php-fpm 22274  root    7u  IPv4 316220      0t0  TCP localhost:cslistener (LISTEN)
    php-fpm 22275 nginx    0u  IPv4 316220      0t0  TCP localhost:cslistener (LISTEN)
    php-fpm 22276 nginx    0u  IPv4 316220      0t0  TCP localhost:cslistener (LISTEN)
3.配置nginx支持PHP程序访问请求:
    这里以blog配置为例:在 extra/blog.conf中添加
    location ~ .*\.(php|php5)?$ {
             root html/blog;
             fastcgi_pass 127.0.0.1:9000;
             fastcgi_index index.php;
             include fastcgi.conf;
         }
    重启nginx服务
    新建测试文件测试:
    # cd html/blog/ ; echo "<?php phpinfo() ?>" >test_info.php
    测试与mysql的连通性:
    # vim test_mysql.php 
    <?php
        $link_id=mysql_connect('localhost','root','swallow') or mysql_error();
            if ($link_id){
                    echo "mysql successful by swallow\n";
            }else{
                    echo mysql_error();
            }
    ?>
    # curl blog.swallow.com/test_mysql.php
    mysql successful by swallow
php.ini 几个重要参数:(前面数字为行号)
    363 expose_php = On      #开启表示显示PHP版本信息
    466 display_errors = Off   #错误信息控制,测试地时候开启
    487 log_errors = On     #开启日志
    803 allow_url_fopen = On  #开启远程打开(禁止)
    相关业务场景:
    372 max_execution_time = 30  # 单个脚本运行最大时间。单位为秒
     382 max_input_time = 60    # 单个脚本等待输入的最长时间
     393 memory_limit = 128M    #单个脚本最大使用内存
     792 upload_max_filesize = 2M  #上传文件最大许可
     795 max_file_uploads = 20    #可以通过请求的最大文件数









本文转自 swallow_zys  51CTO博客,原文链接:http://blog.51cto.com/12042068/1894561,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
关系型数据库 MySQL 应用服务中间件
LNMP平台服务简介、部署及应用
LNMP平台服务简介、部署及应用
181 0
LNMP平台服务简介、部署及应用
|
存储 关系型数据库 MySQL
LNMP平台搭建与应用
LNMP平台搭建与应用 1.LNMP架构概述 LNMP就是Linux+Nginx+MySQL+PHP,Linux作为服务器的操作系统、Nginx作为web服务器、PHP作为解析动态脚本语言、MySQL即为数据库 Linux作为服务器的操作系统 Nginx作为WebServer服务器 PHP作为动态解析服务,也不只是php还有python、perl MySQL作为后端存储数据库服务 Nginx服务本身不能处理PHP请求,那么当用户发起PHP动态请求,PHP是这样处理的 用户—>http协议—>nginx—>fastcgi协议—>php-fpm
322 0
LNMP平台搭建与应用
|
Web App开发 关系型数据库 测试技术
|
Web App开发 测试技术 应用服务中间件
|
Web App开发 算法 关系型数据库
|
关系型数据库 MySQL 应用服务中间件
|
关系型数据库 MySQL 应用服务中间件
手动部署LNMP环境(Alibaba Cloud Linux 2)
本场景带您体验如何在Alibaba Cloud Linux 2.1903 LTS 64位操作系统的云服务器上搭建LNMP环境。
|
6月前
|
关系型数据库 应用服务中间件 nginx
基于Docker的LNMP环境微服务搭建
基于Docker的LNMP环境微服务搭建
基于Docker的LNMP环境微服务搭建
|
关系型数据库 MySQL 应用服务中间件
快速搭建LNMP环境
Nginx是一款小巧而高效的Web服务器软件,可帮您在Linux系统下快速方便地搭建出LNMP Web服务环境。本教程介绍如何搭建LNMP环境,其中LNMP分别代表Linux、Nginx、MySQL和PHP。