理论
什么是LAMP
- LAMP = Linux + Apache + MySQL +PHP
为什么使用LAMP
- 涵盖了整个web的开发流程
- 流行、免费、开源、轻量(新版的Apache只有7M)
Linux
- 开源的类Unix操作系统,可以免费使用和自由传播
- Centos、Ubuntu、Redhat、红旗都是其他发行版本
Linux与Windows
- Linux与Windows有质的不同
- 用户假设(面向的群体,Linux的用户明白自己做什么 想要什么 并会为此行为负责,Windows则恰恰相反,通俗来说就是高端与小白用户)、软件哲学
- Linux的优势是完全免费、稳定高效(windows不能长时间不关机使用、软件卸载不干净等...)
PHP
- 不概述
MySQL
- 开源、免费、高性能的关系型数据库
Apache
- apache是web服务器软件
- 运行大致流程:首先客户端通过浏览器访问一个IP 》 这个IP上肯定启动了服务器软件,且(apache)监听了某一个端口 》数据顺着端口进入了apache 》 apache拿到数据通过http/https协议等进行解析 整理数据,转发给PHP进行业务的处理 》 PHP业务处理完成之后再返回给apache 》 apache最后再返回给客户端 》客户端从浏览器展示给了用户
Nginx
- Nginx与Apache一样,都是web服务器软件
- 目前最受欢迎的服务器软件
- nginx与apache相比:Nginx拥有更好的前景、配置轻松、性能优越(对于性能的优越下面大致阐述)
编译安装 及 如何进行编译安装(主要有两种方式)
- 编译安装是在Linux中安装软件的主要方式之一 (将下载的软件源代码进行编译 安装。方式二 源安装 (centos中使用的yum、debian系列中的apt-get等)
- 一、编译前的准备工作 ./configure
- 二、编译:make (将源码编译成二进制文件)
- 三、安装:make install
实战
本节是阐述在云服务器安装la/nmp环境 并没有从底层搭建开始,如果是虚拟机用户 后期会出相应教程
安装PHP
- 第一步:访问 php 官网 ,并且点击导航栏下载(download),在众多PHP版本中选择版本(我选择了 php-7.1.16)
- 第二步:点击 php-7.1.16 找到镜像下载站点(我选择了香港 'hk1.php.net'),右键 复制该下载链接
- 第三步:在远程命令窗口中输入以下命令 (其中http://hk1.php.net/get/php-7.1.16.tar.gz/from/this/mirror就是我们官网复制的链接
- [root@iZ2zeeq04koeqssc98d0okZ /]# wget http://jp2.php.net/get/php-7.2.5.tar.gz/from/this/mirror
- 以上命令行如果 显示未找到 wget 命令,说明没有这个小工具,需要安装,输入命令 sudo yum install wget 安装
|
- 第五步:这一步只是一个小常识 单纯的安装PHP是不能与Nginx一起工作的,它只能与Apache一起工作,如果想安装Nginx来作为web server的话,需要安装一个软件 叫做phpfpm,phpfpm是以补丁的形势存在的,点击这里是对phpfpm安装的简介,其中有一句“编译 PHP 时需要 --enable-fpm 配置选项来激活 FPM 支持。”
- 第六步:因为是编译安装 所以我们要下载编译的软件工具 gcc 和其他一些组件,输入以下命令安装
|
用了root权限安装 (sudo) |
- 第七步:cd /php-7.1.16 后 使用 ./configure 进行编译安装的第一步 (安装成功会在最后看到 Thank you for using PHP. )
|
命令解释 :./configure 安装前的配置 --prefix= 安装的目录 --enable-fpm 编译 PHP 时需要 --enable-fpm 配置选项来激活 FPM 支持。 |
- 第八步:在php-7.1.16目录中输入命令
|
由于此刻编译时间较久 先大致叙述一下什么是 phpfpm phpfpm是fast CGI的管理器,只能适用于PHP。 什么是fastCGI 与 CGI? fast CGI是与语言无关的CGI开放扩展,主要将CGI进程保持在内存当中,借此获得较高的性能,fastCGI每次都会执行着,不会每一次都去fork一个子进程。相对于CGI来说,每次fork一个子进程是CGI固定的模式。 CGI的全称是 公共网关接口 它是一个协议,约定web server与动态程序之间的数据传输 白话翻译什么是fastCGI与CGI fastCGI:CGI在处理请求的时候会fork一个子进程,处理完成之后会释放,下一次请求的时候再fork再释放,这种方式比较没有效率。因此fastCGI诞生了,fastCGI是程序主动启用一个进程,这个进程下有多个子进程并且这些子进程都会常驻在内存当中,就避免了fork 与 释放。当然了,fastCGI在忙的时候也会启用新的进程来帮忙,在闲暇时又会将闲暇的进程结束保证了资源不被浪费。 CGI:是保证web server传输过来的数据是标准格式方便CGI程序的编写者(打个比方 在Nginx下访问 index.php,这时Nginx会启动CGI来处理,而我们的PHP解释器它就是一个CGI程序) 什么是phpfpm? phpfpm就是实现了fastCGI这个协议的程序,是第三方的,后来被PHP官方购买了。所以现在我们就可以在官网下载并使用了。 |
- 第九步:编译完成后最后显示make test 表示编译成功,继续执行以下命令
|
- 第十步:执行安装之后我们可以创建一个测试用例 执行以下测试文件 看看是否安装成功了。
|
以上 如果执行结果是PHPINFO的信息 说明PHP安装成功!
-- complate!
安装Nginx
- 第一步:与上面的安装大致一样,点击进入Nginx官网 并选择'stable version'(稳定版本),这里我下载了稳定版本的nginx-1.14.0 ,右键复制该链接,然后wget下载 命令如下,下载完成之后并解压
# 此时我们可以运用以下命令来查看以下nginx的大小 ls -alh | grep nginx # 我们可以看到nginx的大小只有 rw-r--r-- 1 root root 993K 4月 17 23:35 nginx-1.14.0.tar.gz 993K# 可见nginx做的优秀 |
- 第二步:进入解压完成的nginx并配置编译
|
路径释义 --prefix=/usr/local/nginx 安装目录 --with-pcre=../pcre-8.38/ 依赖正则 URL重写的功能 |
- 第三步:编译、安装
|
- 第四步:编译安装成功之后,进入nginx的安装目录 启动nginx(由于之前启动了apache,所以要kill之后再启动nginx)
# 运行如下 root 17172 0.0 0.2 70620 2220 ? Ss 01:52 0:01 /usr/local/apache/binhttpd -k start daemon 17173 0.0 0.4 490656 4588 ? Sl 01:52 0:00 /usr/local/apache/binhttpd -k start daemon 17174 0.0 0.4 556192 4620 ? Sl 01:52 0:00 /usr/local/apache/binhttpd -k start daemon 17175 0.0 0.4 556192 4784 ? Sl 01:52 0:00 /usr/local/apache/binhttpd -k start daemon 17275 0.0 0.4 818336 4968 ? Sl 01:56 0:00 /usr/local/apache/binhttpd -k start root 32513 0.0 0.0 110228 908 pts/0 R+ 23:51 0:00 grep --color=auto httpd
#kill之后的httpd root 32546 0.0 0.0 110228 908 pts/0 R+ 23:54 0:00 grep --color=auto httpd |
- 第五步:启动nginx
sbin]# sudo ./nginx |
- 第六步:浏览器访问公网IP
Welcome to nginx!
则安装成功!
- 第七步:配置一下nginx与php的协同工作
|
运行启动命令后会显示找不到php-fpm的配置文件 所以要运行如下命令
- [root@iZ2zeeq04koeqssc98d0okZ sbin]# cd /usr/local/php/etc/
- [root@iZ2zeeq04koeqssc98d0okZ etc]# ll
- 总用量 88
- -rw-r--r-- 1 root root 1228 5月 14 15:15 pear.conf
- -rw-r--r-- 1 root root 4463 5月 14 15:15 php-fpm.conf.default
- drwxr-xr-x 2 root root 4096 5月 14 15:15 php-fpm.d
- -rw-r--r-- 1 root root 70449 5月 14 15:16 php.ini
- [root@iZ2zeeq04koeqssc98d0okZ etc]# sudo mv php-fpm.conf.default php-fpm.conf
- [root@iZ2zeeq04koeqssc98d0okZ etc]# ll
- 总用量 88
- -rw-r--r-- 1 root root 1228 5月 14 15:15 pear.conf
- -rw-r--r-- 1 root root 4463 5月 14 15:15 php-fpm.conf
- drwxr-xr-x 2 root root 4096 5月 14 15:15 php-fpm.d
- -rw-r--r-- 1 root root 70449 5月 14 15:16 php.ini
- [root@iZ2zeeq04koeqssc98d0okZ etc]# ../sbin/php-fpm
- [14-May-2018 19:30:52] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/*.conf' from /usr/local/php/etc/php-fpm.conf at line 125.
- [14-May-2018 19:30:52] ERROR: No pool defined. at least one pool section must be specified in config file
- [14-May-2018 19:30:52] ERROR: failed to post process the configuration
- [14-May-2018 19:30:52] ERROR: FPM initialization failede
# 以上报错php-fpm.conf at line 125.
- [root@iZ2zeeq04koeqssc98d0okZ etc]# sudo vim /usr/local/php/etc/php-fpm.conf
- shift + : 输入 125
- # 此时光标定到 include=/usr/local/php7/etc/php-fpm.d/*.conf
- 将125行修改为 include=/usr/local/php/etc/php-fpm.d/www.conf
- [root@iZ2zeeq04koeqssc98d0okZ etc]# cd php-fpm.d/
- [root@iZ2zeeq04koeqssc98d0okZ php-fpm.d]# ll
- 总用量 20
- -rw-r--r-- 1 root root 18869 5月 14 15:15 www.conf.default
- [root@iZ2zeeq04koeqssc98d0okZ php-fpm.d]# sudo cp www.conf.default www.conf
- [root@iZ2zeeq04koeqssc98d0okZ php-fpm.d]# ll
- 总用量 40
- -rw-r--r-- 1 root root 18869 5月 14 19:39 www.conf
- -rw-r--r-- 1 root root 18869 5月 14 15:15 www.conf.default
- [root@iZ2zeeq04koeqssc98d0okZ /]# cd /usr/local/php/sbin/
- [root@iZ2zeeq04koeqssc98d0okZ /]# ./php-fpm
- [root@iZ2zeeq04koeqssc98d0okZ /]# ps -aux | grep php-fpm
- root 9274 0.0 0.4 148420 4596 ? Ss 11:50 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
- nobody 9275 0.0 0.5 148484 5548 ? S 11:50 0:00 php-fpm: pool www
- nobody 9276 0.0 0.5 148484 5656 ? S 11:50 0:00 php-fpm: pool www
- root 9355 0.0 0.0 112660 976 pts/0 R+ 12:04 0:00 grep --color=auto php-fpm
解答疑问:为什么要启动php-fpm ?
首先描述一下php与nginx的工作方式
当一个请求从浏览器进入以后就会进入到服务端 服务端会进入apache 或者 nginx的web server,在以上步骤 我们的数据进入的是nginx,nginx会对数据进行一个处理, 使用http协议对这些数据进行解析,解析完成以后,如果是以.php结尾的文件,他就会交给php的解释器,那么php的fpm就是解释器,phpfpm监听了9000端口,nginx通过9000端口将数据传给了php-fpm,这样php-fpm就会处理,处理完成之后就会返回给nginx,nginx再返回给浏览器,浏览器呈现给用户。
- 第八步:配置完php-fpm之后,我们就要配置一下nginx nginx配置目录全部在cd /usr/local/nginx/conf中
加入以下配置参数
之后 保存并退出 重启
|
- 第九步:创建文件 公网测试
|
输入以下测试的php代码
- <?php
- phpinfo();
浏览器访问公网 正常显示则安装成功!完毕!
- 此处的访问URL格式(因为没有配置 所以要输入全访问路径)
- http://你的地址/test.php
安装Apache
- 第一步:和安装php与mysql一样 都是访问官网的下载地址 然后wget。apache的正确下载地址在 httpd.apache.org 中
|
- 第二步:解压 并进入 使用configure
|
执行完成之后会 error: APR not found. Please read the documentation. |
提示我们安装 APR
- 第三步:安装APR依赖 apr 访问地址http://archive.apache.org/dist/apr
|
- 第四步:下载解压之后 要对这两个文件进行重命名 去掉各自的版本号
|
- 第五步:移动这两个依赖文件到 httpd的一个文件下
|
- 第六步:下载最后一个依赖(一个正则pcre) 然后使用configure进行编译前的安装准备
注:如果出现configure: error: You need a C++ compiler for C++ support. 错误 请安装gcc yum -y install gcc-c++
|
- 第七步:在安装了apache安装所需的 apr、apr-util、pcre 三个依赖之后 进入apache目录 进行apache安装
|
# 以上步骤可能会报错 错误信息如下 error: Bundled APR-Util requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/. # 解决办法 cd /usr/local/src/ wget http://apache.fayea.com/apr/apr-1.6.3.tar.bz2 wget http://apache.fayea.com/apr/apr-util-1.6.1.tar.bz2 tar -jxvf apr-util-1.6.1.tar.bz2 tar -jxvf apr-1.6.3.tar.bz2 cp -rf apr-1.6.3 /httpd-2.4.33/srclib/apr cp -rf apr-util-1.6.1 /httpd-2.4.33/srclib/apr-util # 然后再回到根目录 重复第七步 |
- 第八步:编译 安装
|
- 第九步:验证是否安装成功!
# 此时会有一或两个错误 # 错误 AH00558: # 或 错误 AH00559:# 上面的错误先不用管,那是配置虚拟主机的问题 |
- 第十步:依旧验证是否安装成功
因为是阿里云 所以在安全策略组的配置中已经开启了80端口,所以我们直接在本地浏览器访问云服务器公网的ip 如果显示 It works!表示安装成功 请忽略以下步骤 如果显示拒绝访问或没有开启防火墙的80端口 可以输入以下命令, sudo firewall-cmd --zone=public --add-port=80/tcp --permanent sudo systemctl restart firewalld.service 再次浏览器访问显示 it works! 正常 |
安装MySQL
源码安装MySQL比较费劲,追求效率 点击这里 去yum安装吧,但是还是建议没有试验过的试试源码安装的过程,感受一下。
- 第一步:和下载PHP步骤一样,打开mysql官网下载 然后在最下面有一个下拉框,下拉选Source Code(源代码)下载
- 第二步:选择“Generic Linux (Architecture Independent), Compressed TAR Archive” (通用的Linux架构)点击 Download
- 第三步:此时会有页面表示登录/注册下载,左下角有No thanks... 我们鼠标放在Nothanks上复制这个a标签的链接
- 第四步:weget下载
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11.tar.gz |
- 第五步:解压mysql
tar -zxvf mysql-8.0.11.tar.gz |
- 第六步:安装mysql的依赖工具
sudo yum install cmake gcc-c++ ncurses-devel perl-Data_dumper boost boost-doc boost-devel |
- 第七步:编译
cmake -DCMAKE_INSTALL_PREFIX=
/usr/local/mysql
\
-DMYSQL_DATADIR=
/usr/local/mysql/data
\
-DSYSCONFDIR=
/etc
\
-DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=
/usr/local/mysql/data/mysql
.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_DOWNLOADS=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_DEBUG=0 \
-DMYSQL_MAINTAINER_MODE=1 \
-DWITH_SSL:STRING=bundled \
-DWITH_ZLIB:STRING=bundled \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=
/usr/share/doc/boost-doc-1
.41.0/
|
cmake命令是一个跨平台的安装工具 cmake安装命令的参数较多,如果运行 cmake 版本过低 点击这里 去升级自己cmake的版本 |
- 第八步:make
- 第九步:sudo make install
--complate! 安装完成之后需要对数据库一个小小的配置 简要步骤如下
1. 配置mysql文件: > cd /etc/my.cnf # 加入配置参数 > character-set-server=utf8 2.登录mysql >mysql -u root -p 3.允许远程连接 use mysql; update user set Host='%', Password=PASSWORD('这里填写你设置的密码') where Host='127.0.0.1'; flush privileges; exit; 4.最后重启 service mysqld resatrt |
以上就是 apache nginx mysql php 的编译安装方式
疑惑 yahx6037@foxmail.com