Linux之LAMP部署
LAMP概述
什么是LAMP:
LAMP:Linux + Apache + MySQL + PHP ==> LAMP 架构(组合)
LNMP:Linux + Nginx + MySQL + php-fpm ==> LNMP 架构(组合)
LNMPA:Linux + Nginx(80) + MySQL + PHP + Apache ==> Nginx 代理方式
Apache:Apache是世界使用排名第一的Web服务器软件。
PHP:一种专门用于Web开发的编程语言。
MySQL:MySQL是一个关系型数据库管理系统,主要用于永久存储项目数据。
AMP三者之间的关系:
Apache:用于接收用户的请求(输入网址,返回网页=>结果)
PHP:注册、登录、加入购物车、下单、支付等动态功能(有编程语言的支持)
MySQL:永久保存数据,比如你在网站上注册的用户和密码、你加入购物车的产品、你的产品订单
LAMP = Linux + APache + PHP + MySQL
LAMP环境部署:rpm安装方式
LAMP部署前期准备
SELinux:SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。
关闭防火墙和selinux:
第一步:关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
第二步:关闭SELinux
# getenforce => 获取SELinux的状态
# setenforce 0 => 临时关闭SElinux:重启后SELinux还会自动启动
# vim /etc/selinux/config => 永久关闭SELinux:编辑SELinux的配置文件
SELINUX=enforcing => SELINUX=disabled 将"enforcing"更改为"disabled"
检查系统中是否已安装Apache:
# rpm -qa |grep httpd => 检查是否安装Apache
# rpm -qa |grep mysql => 检查是否安装Mysql
# rpm -qa |grep php => 检查是否安装PHP
若安装使用rpm卸载
# rpm -e 软件名称 [选项]
选项说明:
-e:卸载
--nodeps :强制卸载
AMP安装指南:在Linux中安装AMP必须先安装
Apache
,再安装MySQL
,最后安装PHP
因为PHP安装时需要关联MySQL和Apache。
LAMP环境之Apache安装
Apache:阿帕奇,Apache基金会
httpd软件 => 前身apache,随着时间的推移以及互联网行业的发展,越来越多的软件加入到了Apache的基金会。
第一步:安装httpd软件
# yum install httpd -y
第二步:配置/etc/httpd/conf/httpd.conf文件
# vim /etc/httpd/conf/httpd.conf
/ServerName => 搜索
96 ServerName localhost:80 => 增加一行
第三步:启动httpd服务
# systemctl start httpd
第四步:把httpd服务添加到开机启动项中
# systemctl enable httpd
第五步:使用ss或netstat命令查询httpd占用的端口
# netstat -tnlp |grep httpd
或
# ss -naltp |grep httpd
第六步:在浏览器中,使用公网IP访问阿里云服务器(完成)
# l或者在本机安装,需要使用firewall-cmd工具更改一下入站规则,如果关闭防火墙则不需要增加入站规则
LAMP环境之MySQL安装
现在epel扩展源可以使用yum安装MySQL数据库了
yum安装mysql:
-
yum安装mysql:代表安装的是MySQL的客户端
-
yum安装mysql-server:代表安装的是MySQL的服务器端
安装客户端:
# yum install -y mysql
安装mysql服务端:
# yum install -y mysql-server
使用官方源下载:
第一步:下载MySQL的官网yum源
由于yum源上默认没有mysql-server。所以必须去官网下载所需版本mysql软件包后再安装
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
第二步:安装MySQL的官网镜像源
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
第三步:使用yum安装mysql最新版软件
MySQL软件是一个C/S架构的软件,拥有客户端与服务器端。
mysql-server服务器端(内部也包含了客户端),community代表社区版(免费开源)
# yum install mysql-community-server -y
第四步:启动mysql,查看端口占用情况
# systemctl start mysqld
# netstat -tnlp |grep mysqld
MySQL数据库初始化:
默认情况下,数据库没有密码,也没有任何数据,必须要初始化
① 初始化数据,设置root密码(MySQL管理员)
mysql_secure_installation
默认是没有添加管理员密码的,直接回车就行。然后是设置管理员密码输入Y
② 把mysqld服务添加到开机启动项:
systemctl enable mysqld
③ 连接MySQL数据库,测试:
mysql -u root -p 回车
Enter password:
输入刚才初始化时的密码即可进入mysql,如123,回车
LAMP环境之PHP安装
为什么启动php就是重启Apache呢?答:因为LAMP架构中,PHP是以模块的形式追加到Apache的内核中,所以启动php就相当于重置Apache软件
安装php:
第一步:使用yum命令安装php软件
# yum install php -y
第二步:使用systemctl启动php软件(重启Apache)
# systemctl restart httpd
测试LAMP环境是否可以使用:
第一步:使用cd命令进入/var/www/html目录
# cd /var/www/html
Apache的项目目录 => /var/www/html,以后程序员开发的代码都是放置于此目录
第二步:使用vim命令创建demo.php文件,编写php代码
# vim demo.php
<?php
echo 'hello world';
?>
=> 编写完成后,保存退出,然后在浏览器中使用"http://公网IP/demo.php"
LAMP源码包安装
安装需求
任务背景:
为企业内部的开发人员,部署一套“预发布系统”,要求其环境与线上环境一模一样。
由于项目是基于PHP + MySQL进行开发设计的,所以我们需要选配环境。
LAMP = Linux + Apache + MySQL + PHP
LNMP = Linux + Nginx + MySQL + PHP
经过开发人员的沟通确认 => LAMP作为预发布环境!
任务要求:
- 源码部署LAMP环境,和生产保持一致
- 静态资源文件同步生产环境(生产发生改变立马同步到预发布平台)
预发布平台上的资源是放在NFS服务器上,通过挂载进行访问,防止NFS服务器的数据丢失,给NFS服务器增加一台NFS备份服务器
环境准备
软件环境:AMP(Apache、MySQL以及PHP)
选定环境版本:
-
Apache——>2.4.37版本(2.2与2.4)
-
MySQL——>5.6.31版本(5.5、5.6与5.7)
-
PHP——>7.2.17版本(5.2、5.4、5.6、7.0、7.1、7.2)
系统环境:CentOS7.6
编号 | 主机名称 | IP地址 | 备注信息 |
---|---|---|---|
1 | web.itcast.cn | 10.1.1.13 | LAMP预发布环境 |
① 更改主机名称、配置IP地址(静态IP、虚拟机需要更改UUID编号、关闭NetworkManager)
② 关闭防火墙、SELinux
③ 配置YUM源(有网配公网,没网配光盘或自建YUM源)
解决lamp环境源码安装过程中需要依赖的软件:
# yum install cmake pcre-devel ncurses-devel openssl-devel libcurl-devel -y
AMP软件安装注意事项:
编译安装顺序:
Linux+Apache(2.4)+MySQL(5.6.31)+PHP(7.2.17)
Apache——>MySQL——>PHP 或者 MySQL——>Apache——>PHP
PHP为啥最后安装,是因为PHP在安装时需要去关联Mysql和Apache
源码编译安装MySQL软件
安装需求:
软件版本 | 安装目录 | 数据目录 | 端口 |
---|---|---|---|
mysql-5.6.31 | /usr/local/mysql | /usr/local/mysql/data | 3306 |
MySQL安装详解:
第一步:创建一个mysql系统账号(没有这个账号mysql无法运行)
# useradd -r -s /sbin/nologin mysql => -r代表系统用户,-s代表权限
第二步:上传对应mysql版本源码,然后对源码进行解压
# tar xf mysql-5.6.31.tar.gz
第三步:使用cmake配置MySQL的安装向导,然后编译和安装
# cd mysql-5.6.31 => 进入解压目录
# vim cmake.sh => 编辑配置脚本文件
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_USER=mysql
# chmod +x cmake.sh => 给配置文件增加权限
# ./cmake.sh => 运行配置文件,相当于./configure
# make && make install => 编译加安装
# mysql配置脚本参数说明:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \ => 安装路径
-DMYSQL_DATADIR=/usr/local/mysql/data \ => 数据目录
-DENABLED_LOCAL_INFILE=1 \ => 开启加载外部文件功能;1开启,0关闭
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ => 将InnoDB存储引擎静态编译到服务器
-DMYSQL_TCP_PORT=3306 \ => 端口
-DDEFAULT_CHARSET=utf8mb4 \ => 字符集
-DDEFAULT_COLLATION=utf8_general_ci \ => 字符校验规则
-DWITH_EXTRA_CHARSETS=all \ => 扩展字符集
-DMYSQL_USER=mysql => 用户身份mysql
第四步:更改目录权限以及初始化数据库
# chown -R mysql.mysql /usr/local/mysql => 更改MySQL软件安装目录的权限
# rm -f /etc/my.cnf => 删除/etc/my.cnf文件,如果不删除此文件,会导致初始化失败
# cd /usr/local/mysql
#l ./scripts/mysql_install_db --user=mysql => 初始化数据库。就是给mysql数据库一些初始化的数据(如账号、密码、数据文件,ll data)
# ll data/ => 查看data目录,这个目录如果产生了一个mysql的文件夹就代表初始化成功了
第五步:把mysql的启动脚本
support-files/mysql.server
copy 到/etc/init.d
目录下,起一个名称叫做mysql
# cd /usr/local/mysql
# cp support-files/mysql.server /etc/init.d/mysql => 将mysql启动脚本复制到/etc/init.d/目录并更名为mysql
# service mysql start => 启动脚本即启动MySQL服务
[root@lamp mysql]# service mysql start
Starting MySQL. SUCCESS!
第六步:设置密码与环境变量
# cd /usr/local/mysql
# bin/mysqladmin -u root password '123' => 设置密码为123
"/usr/local/mysql/bin"目录是mysql的可执行命令存放地方,需要将这个目录添加到系统环境变量中
第七步:把
/usr/local/mysql/bin
目录添加到环境变量
# echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile => 添加mysql服务的执行命令到系统环境变量中去
# source /etc/profile => 更新配置文件
# mysql -uroot -p => 就可以直接用mysql命令进入mysql命令行
Enter password:123
mysql> exit;
源码编译安装Apache软件
Apache源码安装依赖软件apr:
- 上传Apache源码包需要依赖的apr依赖源码包
安装apr软件:
# tar xf apr-1.5.2.tar.bz2 => 解压apr源码包
# cd apr-1.5.2 => 进入解压目录
# ./configure && make && make install => 配置加编译加安装
安装apr-util软件:
# tar xf apr-util-1.5.4.tar.bz2 => 解压apr源码包
# cd apr-util-1.5.4/ => 进入解压目录
# ./configure --with-apr=/usr/local/apr/bin/apr-1-config => 配置并指定软件apr的路径
# make && make install => 编译加安装
编译安装Apache软件:
第一步:解压软件
- 上传对应版本Apache源码版
# rpm -q http => 查看是否安装httpd软件
# yum remove httpd -y => 删除原有apache软件包
# tar xf httpd-2.4.37.tar.bz2 => 解压
第二步:编写apache.sh脚本进行软件安装
# cd httpd-2.4.37
# vim apache.sh => 编辑配置脚本文件
./configure \
--enable-modules=all \
--enable-mods-shared=all \
--enable-so \
--enable-rewrite \
--with-pcre \
--enable-ssl \
--with-mpm=prefork \
--with-apr=/usr/local/apr/bin/apr-1-config \
--with-apr-util=/usr/local/apr/bin/apu-1-config
# apache配置脚本参数说明:apache默认啥功能都没有,必须通过模块的进行添加!
./configure \
--enable-modules=all => 加载所有支持模块
--enable-mods-shared=all => 共享方式加载大部分常用的模块
--enable-so => 启动动态模块加载功能
--enable-rewrite => 启用url地址重写功能
--enable-ssl => 编译ssl模块,支持https
--with-pcre => 支持正则表达式
--with-apr=/usr/local/apr/bin/apr-1-config => 指定依赖软件apr路径
--with-apr-util=/usr/local/apr/bin/apu-1-config => 指定依赖软件apr-util路径
--with-mpm=prefork => 插入式并行处理模块,称为多路处理模块,Prefork 是类UNIX平台上默认的MPM
(1)prefork
多进程模型,每个进程响应一个请求
(2)worker
多进程多线程模型,每个线程处理一个用户请求
(3)event(最优)
事件驱动模型,多进程模型,每个进程响应多个请求
第三步:给予x权限,然后make && make install
# chmod +x apache.sh => 给配置文件执行权限
#l ./apache.sh => 执行源码配置,相当于./configure
# make && make install => 编译和编译安装
第四步:运行Apache软件
# cd /usr/local/apache2/ => 进入Apache安装目录
# bin/apachectl => 此命令开启Apache服务
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe5c:e7db. Set the 'ServerName' directive globally to suppress this message
=> 当出现AH00558错误时
解决AH00558错误:
# vim /usr/local/apache2/conf/httpd.conf => 增加一行
208 ServerName localhost:80
重启服务:
# bin/apachectl -k restart
- 有It works!就说明Apache安装启动成功
源码编译安装PHP软件
第一步:对软件进行解压缩
- 上传对应版本源码包
# tar xf php-7.2.17.tar.xz
第二步:编写php源码配置脚本
# cd php-7.2.17
# vim php.sh
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysqli \
--with-pdo-mysql \
--with-zlib \
--with-curl \
--enable-zip \
--with-gd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-opcache \
--enable-mbstring \
--enable-mbregex \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-calendar \
--enable-bcmath
- php配置脚本参数说明:
--with-apxs2=/usr/local/apache2/bin/apxs => 指定apxs路径,apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具
以下三个是php的扩展,用于连接mysql数据库的
--with-mysql => php7中已被废弃
--with-mysqli
--with-pdo-mysql
以下这些都是在启用对某种文件的支持
--with-iconv-dir
--with-freetype-dir
--with-jpeg-dir
--with-png-dir
--with-gd
--with-zlib
--with-libxml-dir
--with-curl 和 --with-curlwrappers => 用于支持 curl 函数,此函数允许你用不同的协议连接和沟通不同的服务器
--with-openssl,--with-mhash,--with-mcrypt => 这都是和加密有关的参数,启用它们是为了让php可以更好的支持各种加密。
--enable-bcmath => 高精度数学运算组件。
--enable-shmop和 --enable-sysvsem
使得你的PHP系统可以处理相关的IPC函数.IPC是一个Unix标准通讯机制,它提供了使得在同一台主机不同进程之间可以互相通讯的方法。
--enable-inline-optimization => 栈堆指针和优化线程。
--enable-pcntl => 多线程优化。
with-apxs2 => 调用apache加载模块支持PHP
gd => 画图库
libiconv => 字符变换转换
libmcrypt => 字符加密
mcrypt => 字符加密
mhash => 哈希运算
第三步:对php源码进行配置,并解决php源码配置时产生的依赖关系
# chmod +x php.sh => 给配置文件执行权限
#l ./php.sh => 配置php源码
configure: error: libxml2 not found. Please check your libxml2 installation.
出现以上提示,代表php与其他软件存在依赖关系:
解决方法:
#l 下载依赖软件,除了libxml2这个依赖以外,还存在其他依赖:
# yum install libxml2-devel libjpeg-devel libpng-devel freetype-devel -y
#l ./php.sh => 再次配置
第四步:编译+安装
# make && make install => 编译+编译安装php源码包
第五步:检查php有没有安装成功
- 若存在
libph7.so
这个文件存在代表php安装成功
# ls /usr/local/apache2/modules/libphp7.so => 查看是否有这个文件
*libph7.so
配置Apache与PHP
第一步:打开Apache的配置文件
/usr/local/apache2/conf/httpd.conf
进行配置
- 增加一行内容
# vim /usr/local/apache2/conf/httpd.conf
209行 ServerName localhost:80
第二步:配置Apache语言支持(支持中文)
- 将这两行配置信息的注释符删掉就可以
# vim /usr/local/apache2/conf/httpd.conf => 去掉注释符
159行 LoadModule negotiation_module modules/mod_negotiation.so => 此模块打开注释
483行 Include conf/extra/httpd-languages.conf => 打开此选项,扩展配置文件就生效了
第三步:开启对PHP的支持
在LoadModule php7_module modules/libphp7.so
信息下方增加两条配置信息:
- AddHandler php7-script .php
- AddType text/html .php
# vim /usr/local/apache2/conf/httpd.conf => 增加两行信息
166行 LoadModule php7_module modules/libphp7.so
AddHandler php7-script .php => 增加
AddType text/html .php => 增加
第四步:添加
index.php
默认首页
- 增加
index.php
信息,并写在index.html
前面
# vim /usr/local/apache2/conf/httpd.conf
默认主页加上index.php,并放在index.html前,支持php的首页文件
<IfModule dir_module>
270行 DirectoryIndex index.php index.html => 添加index.php
</IfModule>
第五步:让Apache优先支持中文
- 删掉
DefaultLanguage zh-CN
注释 - 将zh-CN移动到最前面
# vim /usr/local/apache2/conf/extra/httpd-languages.conf
19行 DefaultLanguage zh-CN => 删除此行注释符,将默认语言集"nl"改为"zh-CN"
78行 LanguagePriority zh-CN en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-TW
=> 语言集优先集,把zh-CN移动到到前面
第六步:设置完成后,重启Apache软件
# cd /usr/local/apache2
# bin/apachectl -k restart => 重启
# bin/apachectl -k restart
备注:如果还不行,直接pkill httpd,然后bin/apachectl启动或bin/apachectl -k stop关闭
第七步:编写php测试脚本
# cd /usr/local/apache2/htdocs => htdocs就是apache的默认项目目录相当于www目录
# rm -f index.html => 删除默认文件
# vim index.php
<?php
phpinfo();
?>
如果没有测试成功,可能是代码格式或者是服务没有起来,重启或关闭服务再重启就好
使用LAMP部署Web项目
下载wordpress博客系统:wordpress-4.7.3-zh_CN.tar.gz:
第一步:解压
# tar xf wordpress-4.7.3-zh_CN.tar.g
第二步:创建一个项目目录
# mkdir /www => 创建一个公共目录
# mv wordpress /www/blog => wordpress项目路径,将解压的源码目录剪切到项目目录下并改名为blog
# chown -R daemon.daemon /www/blog/ => 需要对blog项目文件进行权限更改:daemon
=> [deamon用户介绍](https://www.cnblogs.com/taosim/articles/2001880.html)
配置虚拟主机(一台服务器多个项目):
-
正常情况下:
/usr/local/apache2/htdocs
目录下(相当于/var/www/html) -
如果一台服务器有多个项目:可以使用虚拟主机来进行配置
第一步:在Apache的
httpd.conf
配置文件中开启虚拟主机的配置文件
# vim /usr/local/apache2/conf/httpd.conf => 将下面这行的注释删掉
494行 Include conf/extra/httpd-vhosts.conf => 打开加载虚拟主机配置文件
第二步:在
/usr/local/apache2/conf/extra/httpd-vhosts.conf
虚拟主机配置文件定义项目
- 上一步开启了虚拟主机,现在只需要将项目放置在虚拟主机路径下即可
<VirtualHost *:80>
里面一个区块代表一个项目
# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf => 虚拟主机路径
<VirtualHost *:80>
24 ServerAdmin webmaster@dummy-host.example.com
25 DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com"
26 ServerName dummy-host.example.com
27 ServerAlias www.dummy-host.example.com
28 ErrorLog "logs/dummy-host.example.com-error_log"
29 CustomLog "logs/dummy-host.example.com-access_log" common
30 </VirtualHost>
31
32 <VirtualHost *:80>
33 ServerAdmin webmaster@dummy-host2.example.com
34 DocumentRoot "/usr/local/apache2/docs/dummy-host2.example.com"
35 ServerName dummy-host2.example.com
36 ErrorLog "logs/dummy-host2.example.com-error_log"
37 CustomLog "logs/dummy-host2.example.com-access_log" common
38 </VirtualHost>
以上代码可删除,不影响
#l :32,38 co 39 => 将项目编写方式复制一份,以下为增加的blog项目的虚拟机配置方式
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com => 无用代码,可删除
DocumentRoot "/www/blog" => 代表定义项目目录的路径
ServerName www.blog.com => 绑定域名
ErrorLog "logs/blog-error_log" => 错误日志
CustomLog "logs/blog-access_log" common => 访问日志
</VirtualHost>
第三步:重启Apache
# cd /usr/local/apache2
# bin/apachectl -k stop => 关闭服务
# bin/apachectl => 开启服务
在数据库中创建一个blog数据库:
# mysql -uroot -p
Enter password:123
mysql> create database blog default charset utf8;
Query OK, 1 row affected (0.00 sec)
在Windows中配置本地DNS:
运行(Windows + R) => drivers + 回车:C:\Windows\System32\drivers\etc\hosts
Windows的DNS文件 => 可以劫持域名,自定义域名指向:
10.1.1.13 www.blog.com => 增加一行
当不允许更改文件时,右键hosts文件 => 安全,给user用于全部权限即可
使用Google浏览器或Firefox浏览器安装博客:
-
第一次访问:报403 Forbidden
-
原因:默认情况下,httpd不允许其他主机访问项目目录
解决方案:在Apache配置文件中修改一行代码
代表允许所有主机
# vim /usr/local/apache2/conf/httpd.conf
218 <Directory />
219 AllowOverride none
220 Require all denied => 将 Require all denied 改为 Require all granted
221 </Directory>
安装wordpress网站
配置数据库:直接访问:10.1.1.13
- 数据库名需要与之前创建的blog库一致
后台:
首页: