部署LNMP应用平台
一、lnmp应用平台概述
1.概述:lnmp代表的就是:linux系统下nginx+mysql+php这种网站服务器架构。nginx是一个高性能的http和反向代理服务器,也是一个imap/pop3/smtp代理服务器。mysql是一个小型关系型数据库管理系统。php是一种在服务器端执行的嵌入html文档的脚本语言。这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
2.优势:稳定、高效、功能丰富、维护简易;
二、内部实现原理
1.处理http请求流程:
第一步:浏览器发送http request请求到服务器(nginx),服务器响应并处理web请求,将一些静态资源(css,图片,视频等)保存服务器上。
第二步:将php脚本通过接口传输协议(网关协议)php-fcgi(fast-cgi)传输给php-fpm(进程管理程序),php-fpm不做处理,然后php-fpm调用php解析器进程,php解析器解析php脚本信息。php解析器进程可以启动多个,进行并发执行。
第三步:将解析后的脚本返回到php-fpm,php-fpm再通过fast-cgi的形式将脚本信息传送给nginx。
第四步:服务器再通过http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。
2.nginx + fastcgi实现:
nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括php)必须通过fast-cgi接口来调用;
wrapper:为了调用cgi程序,还需要一个fast-cgi的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当nginx将cgi请求发送给这个socket的时候,通过fast-cgi接口,wrapper接收到请求,然后fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过fast-cgi接口,沿着固定的socket传递给nginx;最后,nginx将返回的数据(html页面或者图片)发送给客户端。这就是nginx+fast-cgi的整个运作过程。
3.lamp与lnmp的区别:
lamp:apache一般是把php当做自己的一个模块来启动;
lnmp:ngnix则是把http请求变量转发给php进程,即php独立进程,与nginx相独立;
三、案例:搭建lnmp并测试项目
案例环境:
系统类型 |
ip地址 |
主机名 |
所需软件 |
centos 6.5 |
192.168.100.150 |
www.linuxfan.cn |
nginx-1.6.2.tar.gz、 cmake-2.8.6.tar.gz、 mysql-5.5.22.tar.gz、 libmcrypt-2.5.8.tar.gz、 mhash-0.9.9.9.tar.gz、 mcrypt-2.6.8.tar.gz、 php-5.3.28.tar.gz、 skyuc.v3.4.2.source.zip |
案例步骤:
- 安装并配置nginx服务;
- 安装mysql数据库服务;
- 配置初始化mysql及其优化;
- 安装php服务程序;
- 优化调整php服务;
- 配置nginx服务使用php的fpm模块来调用php环境来处理php的页面请求:
- 配置nginx支持php解析,编写服务控制脚本:
- 编辑测试页面;
- 客户端访问测试;
- 发布php项目:电影系统;
- 客户端访问测试;
安装并配置nginx服务
[root@www ~]# yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl [root@www ~]# useradd -m -s /sbin/nologin nginx [root@www ~]# tar zxvf nginx-1.6.2.tar.gz -c /usr/src/ [root@www ~]# cd /usr/src/nginx-1.6.2/ [root@www nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make && make install [root@www nginx-1.6.2]# cd [root@www ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ [root@www ~]# nginx [root@www ~]# netstat -utlpn |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* listen 5618/nginx
安装mysql数据库服务
[root@www ~]# rpm -e mysql mysql-server --nodeps [root@www ~]# yum -y install ncurses ncurses-devel [root@www ~]# tar zxvf cmake-2.8.6.tar.gz -c /usr/src/ [root@www ~]# cd /usr/src/cmake-2.8.6/ [root@www ~]# ./configure [root@www ~]# make &&make install [root@www ~]# cd [root@www ~]# tar zxvf mysql-5.5.22.tar.gz -c /usr/src/ [root@www ~]# cd /usr/src/mysql-5.5.22/ [root@www mysql-5.5.22]# cmake -dcmake_install_prefix=/usr/local/mysql -ddefault_charset=utf8 -ddefault_collation=utf8_general_ci -dwith_extra_charsets=all -dsysconfdir=/etc/ [root@www mysql-5.5.22]# make &&make install
配置初始化mysql及其优化
[root@www mysql-5.5.22]# groupadd mysql [root@www mysql-5.5.22]# useradd -m -s /sbin/nologin -g mysql mysql [root@www mysql-5.5.22]# chown mysql:mysql /usr/local/mysql/ -r [root@www mysql-5.5.22]# cp support-files/my-medium.cnf /etc/my.cnf cp:是否覆盖"/etc/my.cnf"? y [root@www mysql-5.5.22]# cp support-files/mysql.server /etc/init.d/mysqld [root@www mysql-5.5.22]# chmod +x /etc/init.d/mysqld [root@www mysql-5.5.22]# chkconfig --add mysqld [root@www mysql-5.5.22]# echo "path=$path:/usr/local/mysql/bin" >>/etc/profile [root@www mysql-5.5.22]# source /etc/profile [root@www mysql-5.5.22]# cd /usr/local/mysql/scripts/ [root@www scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql ok filling help tables... ok [root@www scripts]# cd [root@www ~]# /etc/init.d/mysqld start starting mysql... [确定] [root@www ~]# mysqladmin -uroot password 123123 [root@www ~]# mysql -uroot -p123123 mysql> quit;
安装php服务程序
[root@www ~]# rpm -e php --nodeps [root@www ~]# tar zxvf /root/libmcrypt-2.5.8.tar.gz -c /usr/src/ [root@www ~]# cd /usr/src/libmcrypt-2.5.8/ [root@www ~]# ./configure &&make &&make install [root@www ~]# ln -s /usr/local/lib/libmcrypt.* /usr/lib64/ [root@www ~]# tar zxvf /root/mhash-0.9.9.9.tar.gz -c /usr/src/ [root@www ~]# cd /usr/src/mhash-0.9.9.9/ [root@www ~]# ./configure &&make &&make install [root@www ~]# ln -s /usr/local/lib/libmhash* /usr/lib64/ [root@www ~]# tar zxvf /root/mcrypt-2.6.8.tar.gz -c /usr/src/ [root@www ~]# cd /usr/src/mcrypt-2.6.8/ [root@www ~]# ./configure &&make &&make install [root@www ~]# yum -y install libxml2-devel gd zlib-devel libpng-devel libjpeg-devel [root@www ~]# tar zxvf php-5.3.28.tar.gz -c /usr/src/ [root@www ~]# cd /usr/src/php-5.3.28/ [root@www php-5.3.28]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib 注解: --prefix=/usr/local/php5 ##指定安装位置 --with-gd ##加载gd扩展库工具 --with-zlib ##加载压缩工具 --with-mysql=/usr/local/mysql ##加载mysql数据库的安装位置 --with-config-file-path=/usr/local/php5 ##加载php的配置文件存放位置 --enable-mbstring ##加载多字符的支持 --enable-fpm ##加载fpm管理程序 --with-jpeg-dir=/usr/lib ##加载识别图片格式 [root@www php-5. 3.28]# make &&make install [root@www php-5. 3.28]# ls /usr/local/php5/ bin etc include lib php sbin var
优化调整php服务
[root@www php-5. 3.28]# cp php.ini-development /usr/local/php5/php.ini [root@www php-5. 3.28]# cd [root@www ~]# ln -s /usr/local/php5/bin/* /usr/local/bin/ [root@www ~]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/ [root@www ~]# tar zxvf zendguardloader-php-5.3-linux-glibc23-x86_64.tar.gz ##安装zendguardloader模块 [root@www ~]# cp zendguardloader-php-5.3-linux-glibc23-x86_64/php-5.3.x/zendguardloader.so /usr/local/php5/ [root@www ~]# vi /usr/local/php5/php.ini ##在最后位置添加以下内容: [zend guard] zend_extension=/usr/local/php5/zendguardloader.so zend_loader.enable=1 zend_loader.disable_licensing=0 zend_loader.obfuscation_level_support=3 注释: zend_extension=/usr/local/php5/zendguardloader.so ##加载模块位置 zend_loader.enable=1 ##开启该模块 zend_loader.disable_licensing=0 ##禁用许可证检查(提高性能) zend_loader.obfuscation_level_support=3 ##让 zend guard loader 支持混淆级别
配置nginx服务使用php的fpm模块来调用php环境来处理php的页面请求
[root@www ~]# cd /usr/local/php5/etc/ [root@www etc]# cp php-fpm.conf.default php-fpm.conf [root@www etc]# vi php-fpm.conf ##新建管理cgi接口的fpm模块的配置文件 [global] pid = run/php-fpm.pid [www] listen = 127.0.0.1:9000 user = nginx group = nginx pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 :wq 解释: [global] ##全局配置区域 pid = run/php-fpm.pid ##指定程序运行时的pid文件 [www] ##www网站区域 listen = 127.0.0.1:9000 ##fpm管理程序监听的地址和端口 user = nginx ##运行的用户和组 group = nginx pm = dynamic ##指定fpm进程池的模式,动态模式 pm.max_children = 50 ##静态方式下开启的进程 pm.start_servers = 20 ##动态方式下启动时开始的进程数 pm.min_spare_servers = 5 ##动态最小进程数 pm.max_spare_servers = 35 ##动态最大进程数 [root@www ~]# /usr/local/sbin/php-fpm ##启动php-fpm [root@www ~]# netstat -utpln |grep php tcp 0 0 127.0.0.1:9000 0.0.0.0:* listen 5587/php-fpm
配置nginx支持php解析,编写服务控制脚本
[root@www ~]# vi /etc/init.d/lnmp #!/bin/bash # chkconfig: 35 95 30 # description: this script is for lnmp management! ngf=/usr/local/nginx/sbin/nginx ngp=/usr/local/nginx/logs/nginx.pid fpmf=/usr/local/php5/sbin/php-fpm fpmp=/usr/local/php5/var/run/php-fpm.pid case $1 in start) $ngf &&echo "nginx is starting! " $fpmf && echo "php-fpm is starting! " ;; stop) kill -quit $(cat $ngp) &&echo "nginx is stoped! " kill -quit $(cat $fpmp) &&echo "php-fpm is stoped! " ;; restart) $0 stop $0 start ;; reload) kill -hup $(cat $ngp) kill -hup $(cat $fpmp) ;; status) netstat -utpln |grep nginx &>/dev/null if [ $? -eq 0 ] then echo "nginx is running! " else echo "nginx is not running! " fi netstat -upltn |grep php-fpm &>/dev/null if [ $? -eq 0 ] then echo "php-fpm is runing! " else echo "php-fpm is not running! " fi ;; *) echo "usage $0 {start|stop|status|restart}" exit 1 ;; esac [root@www ~]# chmod +x /etc/init.d/lnmp [root@www ~]# chkconfig --add lnmp [root@www ~]# /etc/init.d/lnmp status nginx is running! php-fpm is runing! [root@www conf]# vi /usr/local/nginx/conf/nginx.conf ##主配置文件如下 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.linuxfan.cn; charset utf-8; location / { root /var/www/linuxfan/; index index.html index.htm index.php; } location ~\.php { ##访问.php页面的配置段 root /var/www/linuxfan/; ##php网页文档根目录,html代表安装nginx的目录下的html目录 fastcgi_pass 127.0.0.1:9000; ##php-fpm的监听地址和端口号 fastcgi_index index.php; ##指定php首页文件 include fastcgi.conf; ##包括fastcgi.conf样本配置 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } [root@www conf]# /etc/init.d/lnmp restart
编辑测试页面
[root@www ~]# mkdir -p /var/www/linuxfan [root@www ~]# vi /var/www/linuxfan/index.html www.linuxfan.cn [root@www ~]# vi /var/www/linuxfan/testa.php <?php phpinfo(); ?> [root@www ~]# vi /var/www/linuxfan/testm.php <?php $link=mysql_connect('localhost','root','123123'); if($link) echo "mysql ok!"; mysql_close(); ?>
客户端访问测试:
http://www.linuxfan.cn
http://www.linuxfan.cn/testa.php
http://www.linuxfan.cn/testa.php
发布php项目:电影系统
[root@www ~]# yum -y install unzip [root@www ~]# unzip skyuc.v3.4.2.source.zip [root@www ~]# cd skyuc.v3.4.2.source/ [root@www ~]# cp -rf wwwroot /var/www/linuxfan/skyuc [root@www ~]# cd /var/www/linuxfan/skyuc [root@www ~]# chown -r nginx:nginx admincp/ data/ templates/ upload/ [root@www ~]#mysql -uroot -p123123 > create database skyucdb; > grant all on skyucdb.* to 'runskyuc'@'localhost' identified by '123123'; > quit;
客户端访问测试:
http://www.linuxfan.cn/skyuc/install/index.php ##安装该系统
http://www.linuxfan.cn/skyuc ##普通用户访问该系统
http://www.linuxfan.cn/skyuc/admincp ##后台管理界面,用户密码为安装时指定
推荐阅读
-
java-使用war将spring-boot和angular 7应用程序部署到tomcat 8.5中
-
使用WebSharper在Azure云中可基于Git部署的F#Web应用程序
-
将Quarkus应用程序部署到AWS Elastic Beanstalk
-
Spring Boot应用程序创建可部署的war文件到tomcat
-
将ASP.NET Web应用程序部署到Windows Azure Web Site和SQL 数据库
-
Maven –将Web应用程序部署到WildFly
-
将WildFly Swarm应用程序部署到Heroku
-
docker部署LNMP&phpMyAdmin的方法步骤
-
golang跨平台打包部署
-
让NetBeans的Web应用热部署可用