1.LAMP架构
1)LAMP=Linux+Apache(httpd)+MySQL+PHP
-
Linux-操作系统,例如,CentOS,ubantu等等
-
Apache-提供web服务的一个软件
-
MySQL-存储的软件,存的是一些数据,字符串,并不是文件和图片
-
PHP-和shell类似的脚本语言,用C开放,通常用来做网站,随着移动互联网的兴起(移动客户端来调接口,而不是在电脑上来连接端口),PHP就不那么流行了
PHP网站-www.baidu.com;Google网站;
现在流行的是Python,JAVA,GO
2)Apache(httpd)+MySQL+PHP工作架构
在Linux安装这三个东西,做一个简单的架构可以装在一台机器上,但是也可以不装在一个机器上,但是Apache和PHP要在一起
对于一些访问量不大的网站在一台机器上跑三个服务是没有问题的
也可以MySQL在一台服务器上,Apache和PHP在另外一台服务器上
-
PHP服务作为一个模块的形式和Apache结合在一起的
-
Apache不可以直接与MySQL相连,只能通过PHP模块在MySQL上拿数据(动态请求),在PHP得到数据之后在交给Apache,然后Apache在与用户的浏览器进行数据传输
-
静态文件 vs.动态文件
例如,我们现在访问ask.apelearn.com, 点击登录,这时登录请求由用户浏览器到Apache,先有Apache检查看看请求为动态还是静态
然而登录请求为用户把账号和密码提交给Apache,然后到数据库去比对,看看输入的账户和密码是对还是错,首先到MySQL里面查到用户的账户和密码,PHP做对比,如果正确Apache就会返回一个登录的状态,这个过程就为一个动态请求
如果我们要点击网站的logo图片,也需要到Apache请求,Apache会去静态文件(linux操作系统的一个目录下的文件)读取数据,这个过程为静态请求
静态,就是直接由webserver处理的请求,比如图片,js,css等,而动态的是需要和数据库打交道的请求,比如你现在访问ask.apelearn.com,登录用户,发帖子,看帖子,这些都是需要和数据库打交道的。这样的就是动态。
2.MySQL_MariaDB介绍
sun公司-JAVA
Oracle-数据库,银行、金融企业,装在小型机(超级计算机,几百个CPU,上亿Tb的内存)上-unix
3-5.MySQL安装
1)MySQL常用的安装包
-
rpm-直接用yum安装,缺点不能指定安装的路径,默认到/usr/下面
-
源码包
-
二进制免编译包
相当于再发布之前,在一台linux服务器上做了编译,编译完成的文件重新安排到一个目录下,打包压缩再发布
好处无需再编译,可以直接用而且可以定义安装的路径,比如/usr/local/mysql下
2)安装二进制免编译包的步骤
-
cd /usr/local/src/
这个目录用于存放源码包和所需要的资源
-
#wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz,下载MySQL安装的镜像文件
注:uname -a查看操作平台是64位还是32位
wget命令的用法https://www.cnblogs.com/lxz88/p/6278268.html
-
# tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
解压软件包
-
# mv mysql-5.7.23-linux-glibc2.12-x86_64 /usr/local/mysql
-
cd /usr/local/mysql
-
useradd mysql
-
mkdir /data/
-
把/usr/local/mysql 和/data/mysql的属主和属组都改成mysql
-
这个步骤为了初始化,生成目录/data/mysql, 因为mysql如果需要启动要一个自带的库/data/mysql
5.6版本的初始方式-
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
执行了命令之后可能会有下面的error message,提示让安装Perl modules(跟Python相似的脚本语言)少了dumper这个模块
解决方法安装少了的模块或者安装包,我们可以先模糊搜索一下安装包的名字,用yum -list |grep perl |grep -i dumper, 如果这种方法不行可以试着copy error message 在百度搜索
yum -install -y perl-Data-Dumper.x86_64
5.7版本的初始化方式-
因为scripts/mysql_install_db在新版本中已经改在了/bin目录下了,而且用mysql_install-db的方式初始化已经过时,应该使用mysqld --initialize来初始化
命令写成 bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
当值执行了该命令之后可能又出现了error message :bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory, 我们可以发现是加载链接文件libaio的时候出现了问题, 这时我们用rpm -qa |grep libaio查看,如果没有下载libaio,就可以使用yum install libaio-devel.x86_64下载,在用初始化的命令就没问题了
注意生成的临时密码-oSduCXnh!1Kf
-
拷贝配置文件
5.6版本/5.7 版本
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cof(mysql的配置文件,固定放在/etc/下,如果想放到其他目录下,启动的时候要做一个指定)
再拷贝之前也可以查看一下/etc/my.con, 具体信息如下,我们也可以不用拷贝文件,直接用里面的设置,只需要做一些改动
[mysqld]
datadir=/var/lib/mysql
把datadir改成/usr/local/mysql/data/mysql
socket=/tmp/mysql.sock
改在/tmp/目录下
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
可以加#号注释掉
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
加#注释掉
-
运行脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
vim /etc/init.d/mysqld, 只需要修改basedir和datadir的部分
basedir=/usr/local/mysql, datadir=/data/mysql
-
改脚本权限 chmod 755 /etc/init.d/mysqld
-
添加开机启动
chkconfig --add mysqld
-
启动程序
/etc/init.d/mysqld start或者 service mysqld start
如下图,我们可以看见mysqld服务已经成功启动,监听的端口为3306
注:
-
在上图绿线的部分有一条命令/bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/localhost.localdomain.pid
使用场景如下,如果我们在无法把启动脚本写入/etc/init.d下或者没有启动模板脚本可供拷贝,可以使用命令行的方式启动
/usr/local/mysql/bin/mysql_safe --default-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &
着这里--default-filey用来制定配置文件的,&把命令丢到后台去
如果用这种形式启动了mysql的服务,只能用# killall mysqld来关闭服务
-
killall 是一种比较安全的方式来停止任务,相对于kill pidnumber来说的,尤其在mysql在读写数据的时候,使用killall可以先暂停现在读写动作,把内存中的数据写入到磁盘中去,这样可以避免数据的丢失。有时由于内存的数据比较大,killall可能不会很快杀死进程,那这时切忌使用kill -9来杀死进程,如果使用可能导致数据丢失甚至表的损坏
-
mysql常用的引擎-innodb(存储量比较大,和Oracle类似)&myisam (存储量较小)
6.MariaDB安装
安装步骤和mysql类似
-
cd /usr/local/src
-
解压文件
tar -zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
-
mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb
-
cd /usr/local/mariadb
-
mkdir /data/mariadb
-
useradd mariadb
-
初始化
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb
最好定义basedir,不然因为还装了mysql,可能base的目录就去找了mysql
-
cp support-files/my-small.cnf /usr/local/mariadb/my.cnf
我们用ls看配置文件模板,可以发现与mysql不同,mariadb有很多的配置模板,其中有my-small.cnf和my-large.cnf。这里的small和large指的是文件缓存的大小,根据内存大小的不同选择缓存的大小从而使mysql功能更加高效
-
vi /usr/local/mariadb/my.cng
如果要修改就修改mysqld部分,但基本不用做什么改动
-
cp support-files/mariadb-server /etc/init.d/mariadb
-
vim /etc/init.d/mariadb
定义basedir, datadir, conf (自定义变量,来制定配置文件路径)
定义变量是为了与之前安装的mysql进行区分,如果在以后的工作中只装了mariadb,那么就可以把配置文件放在/etc/my.cnf下,也就在脚本中不需要再定义配置文件的路径了
在指定了配置文件之后,我们需要修改启动参数,可以/start来搜索,找到下面的行加上--defaults-file="$conf"来制定配置文件路径
-
/etc/init.d/mariadb start
在启动之前需要check mysqld是否已经启动,因为两种服务监听同一个3306的端口,所以同时运行会产生冲突
我们也可以用 service start mysqld启动
7-9.Apache安装
httpd是我们要装的软件包,主流版本为2.4
依赖的软件apr 和apr-util, 是一个通用的函数库,可以让httpd不用管底层的操作系统平台(windows/Linux),可以很方便的移植
然而yum自带安装的apr和httpd 2.4 版本的不兼容,所以需要编译
1)cd /usr/local/src
2)wget http://mirrors.cnnic.cn/apache/apr/apr-1.6.5.tar.gz
wget http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz
http://httpd.apache.org/download.cgi#apache24, 用来下载最新的httpd版本
3)用tar -zxvf来解压这三个文件
4)先来安装apr
-
cd apr-1.6.5
-
./configure --prefix=/usr/local/apr
但是出现了alert
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/usr/local/src/apr-1.6.5':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
解决办法 yum install -y gcc, 再试一次./configure --prefix=/usr/local/apr, 就成功了,可以用# echo $?来查看是否命令执行成功
在安装信息中会出现“rm: cannot remove 'libtoolT': No such file or directory”,可以忽略这个error message
-
# make && make install
-
5)安装apr-util
-
cd apr-util-1.6.1
-
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
与安装apr不同,因为apr-util需要依赖apr,所以要指定apr
-
make && make install
出现error message -致命错误:expat.h:没有那个文件或目录,这是因为缺少expat库,yum install -y expat-devel
我们在试一次安装就可以成功了
6)安装httpd源码包httpd-2.4.37
-
cd httpd-2.4.37/
-
继续安装
./configure \ //这里的反斜杠是脱义字符,加上它我们可以把一行命令写成多行
--prefix=/usr/local/apache2.4 \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--enable-so \
表示支持动态扩展模块,Apache和PHP都支持以一个模块的形式存在,正如我们在上文提到,PHP是作为httpd的一个模块存在是一个以.so结尾的文件
Apache本身为一个进程和服务,在进程的配置文件中指定模块的路径,那就可以调用模块,正如PHP作为解析PHP脚本的,如果遇到需要解析PHP脚本的时候就可以调用这个模块,执行一些操作,这些模块为独立的文件
这个参数的目的就是可以支持动态扩展
--enable-mods-shared=most
可以制定需要什么动态模块的支持,制定most是指加进大多模块,加了这个参数会安装很多*.so的文件
这一步可能会出现error message-configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/,用yum list |grep pcre搜索应该安装的包,pcre-devel.x86_64(我们一般需要安装有devel字样的库文件),然后yum install -y pcre-devel.x86_64, 这样就可以了
-
make && make install
-
ls /usr/local/apache
如上图,在bin/目录下一般都是执行文件,/bin/httpd就是执行命令核心文件
conf/目录为配置文件所在目录,conf/httpd.conf
htdocs/目录下有index.html,通过httpd访问的网站都会放在这个目录下
logs/目录下,错误日志和访问日志以及一些帮助文档
modules/下面,存放了.os文件,扩展模块,每个模块代表一个功能,如果我们想要查看都安装了哪些模块,可以写成下面的形式
/usr/local/apache2.4/bin/apachectl -M或者/usr/local/apache2.4/httpd -M
static-静态直接把模块编译到了httpd中
shared-说明为扩展模块,为一个.os文件,在modules/下
7)启动
可以 直接启动,无需配置文件或者脚本
# /usr/local/apache2.4/bin/apachectl start
出现的error message可以在配置文件中改动,但是可以忽略
port 22-ssh
port 80-httpd
port 3306-mysqld
pot 25-master 邮件
10-12. PHP安装
官网 www.php.net
主流版本5.6/7.1,大多数使用5.6
1)cd /usr/local/src
2)download php-5.6.38.tar.gz from www.php.net
3)tar -zxvf php-5.6.38.tar.gz
4)cd php-5.6.38
5) ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
-
--prefix=/usr/local/php 指定安装目录
-
--with-apxs2=/usr/local/apache2.4/bin/apxs
apxs工具可以自动配置需要加载的扩展模块,指定Apache
-
--with-config-file-path=/usr/local/php/etc 指定配置文件的所在路径,php默认的文件配置路径为/etc/.ini
-
--with-mysql=/usr/local/mysql 指定mysqld的路径
-
--with-pdo-mysql=/usr/local/mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config
来定义mysqld相关的函数来驱动,使得mysqld可以识别PHP模块
-
--with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
用来指定PHP所需要的模块的
安装过程可能会出现error message “configure: error: Cannot find libmysqlclient_r under /usr/local/mysql.”
解决办法:编译之前,先处理一下mysql的库,默认查找libmysqlclient_r.so,可是mysql默认为libmysqlclient.so,内容完全一样,做个链接即可
# cd /usr/local/mysql/lib/mysql/
# ln -s libmysqlclient.so.版本号 libmysqlclient_r.so
6)make && make install
在结束时我们可以看见放到了Apache的module目录下,PHP模块可以和Apache结合起来是通过libphp5.so的文件实现的、
7)ls /usr/local/php
-
核心的二进制文件在/usr/local/php/bin下
-
/usr/local/php/bin/php -m可以看到php所加载的模块,且模块为静态模块
8)PHP作为Apache的一个扩展模块不需要启动了,只要Apache启动,PHP就是启动的,但是这个模块很重要
我们可以看httpd的配置文件,/usr/local/apache2.4/conf/httpd.conf, 看到php模块已经被加到了httpd的配置文件中,如果不想使用此模块,在前面加#就可以了
9)加载PHP配置文件
cp php.ini-production (php.ini-development 测试环境) /usr/local/php/etc/php.ini
php.ini-production 为生产环境
php.ini-development 测试环境
我们再使用/usr/local/php/bin/php -i,就可以看见配置文件已经被加载了
13.安装PHP7
1)cd /urs/local/src
2)wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
• tar zxf php-7.1.6.tar.bz2
• cd php-7.1.6
• ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
• make && make install
• ls /usr/local/apache2.4/modules/libphp7.so
• cp php.ini-production /usr/local/php7/etc/php.ini
14-15. Apache和PHP结合
1)编辑Apache的配置文件
vim /usr/local/apache2.4/conf/httpd.conf
-
定义ServerName,把ServerName那一行的#号去掉就可以了
-
required all denied 改为required all granted
在ifconfig之后,我们可用看到ip地址为192.168.224.128,用浏览器访问之后发现无法访问
我们可以用windows 上的cmd看是否可以ping通192.168.224.128
如果可以ping通就使用telnet 192.168.224.128 80,去查看80端口是否可以ping通,如果windows的telnet没有打开,那就去控制面板找打开或关闭windows功能,打开telnet客户端
如果80端口ping不通,那就是iptables把80端口禁掉了,我们用iptables -I INPUT -p tcp --dport 80 -j ACCETP,开放80端口,这时再用浏览器访问就显示it works.
但有时80端口是通的但是仍然显示403 forbidden是因为在httpd.conf的配置文件中,required all 被设置为了denied,我们应该把它改成granted
注:我们可以/usr/local/apache2.4/bin/apachectl -t,来检查配置文件语法是否正确
如果我们改错了配置文件,用-t,发现了语法错误,改正之后可以用graceful来重新加载配置文件,然后再用-t来查看语法
-
增加下面的行用来解析PHP
AddType application/x-httpd-php .php
-
增加索引页,这样访问时就不需要在地址后面加index.php
我们来测试下现在是否解析PHP,我们可以先写一个测试脚本在/usr/local/apache2.4/htdocs/1.php
内容如下
<?php
phpinfo (); 可以把PHP的相关信息打印出来
?>
这时我们再用浏览器访问19.168.224.128/1.php, 如果出现下面的页面就意味着可以支持PHP解析, 显示的结果和/usr/local/php/bin/php -i命令显示的结果基本相同
如果解析不了则出现如下页面,只显示源代码
那么这个时候我们就要检查如下几项
-
Apache的配置文件,是否加载PHP扩展模块
/usr/local/apache2.4/bin/apachectl -M
如果发现没有PHP模块,就可以ls /usr/local/apache2.4/modules/libphp.os
如果有,但是没有加载出来,就可以编辑配置文件/usr/local/apache2.4/conf/http.conf,去看是否加载了“LoadModule php5_module modules/libphp5.so”
-
如果上面的都没有问题,就查看配置文件中是否有“AddType application/x-httpd-php .php”
-
再检查是否加了“index.php”