赞
踩
有了前面学习的知识的铺垫,今天可以来学习下第一个常用的web架构了。
所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。
LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建立web应用平台。
在说lamp架构平台的搭建前,我们先来了解下什么是CGI,什么是FastCGI,什么是…
web服务器的资源分为两种,静态资源和动态资源
静态资源就是指静态内容,客户端从服务器获得的资源的表现形式与原文件相同。可以简单的理解为就是直接存储于文件系统中的资源
动态资源则通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端
那么web服务器如何执行程序并将结果返回给客户端呢?下面通过一张图来说明一下web服务器如何处理客户端的请求
如上图所示
阶段①显示的是httpd服务器(即apache)和php服务器通过FastCGI协议进行通信,且php作为独立的服务进程运行
阶段②显示的是php程序和mysql数据库间通过mysql协议进行通信。php与mysql本没有什么联系,但是由Php语言写成的程序可以与mysql进行数据交互。同理perl和python写的程序也可以与mysql数据库进行交互
上图阶段①中提到了FastCGI,下面我们来了解下CGI与FastCGI。
CGI(Common Gateway Interface,通用网关接口),CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
FastCGI(Fast Common Gateway Interface)是CGI的改良版,CGI是通过启用一个解释器进程来处理每个请求,耗时且耗资源,而FastCGI则是通过master-worker形式来处理每个请求,即启动一个master主进程,然后根据配置启动几个worker进程,当请求进来时,master会从worker进程中选择一个去处理请求,这样就避免了重复的生成和杀死进程带来的频繁cpu上下文切换而导致耗时
httpd与php结合的方式有以下三种:
modules:php将以httpd的扩展模块形式存在,需要加载动态资源时,httpd可以直接通过php模块来加工资源并返回给客户端
httpd prefork:libphp5.so(多进程模型的php)
httpd event or worker:libphp5-zts.so(线程模型的php)
CGI:httpd需要加载动态资源时,通过CGI与php解释器联系,获得php执行的结果,此时httpd负责与php连接的建立和断开等
FastCGI:利用php-fpm机制,启动为服务进程,php自行运行为一个服务,https通过socket与php通信
较于CGI方式,FastCGI更为常用,很少有人使用CGI方式来加载动态资源
通过上面的图说明一下web的工作流程:
客户端通过http协议请求web服务器资源
web服务器收到请求后判断客户端请求的资源是静态资源或是动态资源
若是静态资源则直接从本地文件系统取之返回给客户端。
否则若为动态资源则通过FastCGI协议与php服务器联系,通过CGI程序的master进程调度worker进程来执行程序以获得客户端请求的动态资源,并将执行的结果通过FastCGI协议返回给httpd服务器,httpd服务器收到php的执行结果后将其封装为http响应报文响应给客户端。在执行程序获取动态资源时若需要获得数据库中的资源时,由Php服务器通过mysql协议与MySQL/MariaDB服务器交互,取之而后返回给httpd,httpd将从php服务器收到的执行结果封装成http响应报文响应给客户端。
环境说明:
|
lamp平台软件安装次序:
httpd --> mysql --> php
注意:php要求httpd使用prefork MPM
//YUM源配置
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls CentOS-Stream-AppStream.repo CentOS-Stream-HighAvailability.repo CentOS-Stream-RealTime.repo CentOS-Stream-BaseOS.repo CentOS-Stream-Media.repo CentOS-Stream-ResilientStorage.repo CentOS-Stream-Debuginfo.repo CentOS-Stream-NFV.repo CentOS-Stream-Sources.repo CentOS-Stream-Extras.repo CentOS-Stream-PowerTools.repo [root@localhost yum.repos.d]# rm -rf * [root@localhost yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2495 100 2495 0 0 11238 0 --:--:-- --:--:-- --:--:-- 11238 [root@localhost yum.repos.d]# ls CentOS-Base.repo [root@localhost yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo [root@localhost yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo [root@localhost yum.repos.d]# yum install -y wget vim Failed to set locale, defaulting to C.UTF-8 CentOS-8.5.2111 - Base - mirrors.aliyun.com 509 kB/s | 4.6 MB 00:09 CentOS-8.5.2111 - Extras - mirrors.aliyun.com 31 kB/s | 10 kB 00:00 CentOS-8.5.2111 - AppStream - mirrors.aliyun.com 352 kB/s | 8.4 MB 00:24 Package wget-1.19.5-10.el8.x86_64 is already installed. Package vim-enhanced-2:8.0.1763-16.el8_5.7.x86_64 is already installed. Dependencies resolved. Nothing to do. Complete!
安装epel
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls CentOS-Stream-AppStream.repo CentOS-Stream-HighAvailability.repo CentOS-Stream-RealTime.repo CentOS-Stream-BaseOS.repo CentOS-Stream-Media.repo CentOS-Stream-ResilientStorage.repo CentOS-Stream-Debuginfo.repo CentOS-Stream-NFV.repo CentOS-Stream-Sources.repo [root@localhost yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 0:02:38 ago on Tue Aug 2 16:07:49 2022. epel-release-latest-8.noarch.rpm 53 kB/s | 24 kB 00:00 Dependencies resolved. ================================================================================================================ Package Architecture Version Repository Size ================================================================================================================ Installing: epel-release noarch 8-16.el8 @commandline 24 k Transaction Summary ================================================================================================================ Install 1 Package Total size: 24 k Installed size: 34 k Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : epel-release-8-16.el8.noarch 1/1 Running scriptlet: epel-release-8-16.el8.noarch 1/1 Many EPEL packages require the CodeReady Builder (CRB) repository. It is recommended that you run /usr/bin/crb enable to enable the CRB repository. Verifying : epel-release-8-16.el8.noarch 1/1 Installed: epel-release-8-16.el8.noarch Complete! [root@localhost yum.repos.d]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel* [root@localhost yum.repos.d]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel* [root@localhost yum.repos.d]#
//安装开发工具包
[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls CentOS-Stream-AppStream.repo CentOS-Stream-HighAvailability.repo CentOS-Stream-RealTime.repo CentOS-Stream-BaseOS.repo CentOS-Stream-Media.repo CentOS-Stream-ResilientStorage.repo CentOS-Stream-Debuginfo.repo CentOS-Stream-NFV.repo CentOS-Stream-Sources.repo [root@localhost yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 0:02:38 ago on Tue Aug 2 16:07:49 2022. epel-release-latest-8.noarch.rpm 53 kB/s | 24 kB 00:00 Dependencies resolved. ================================================================================================================ Package Architecture Version Repository Size ================================================================================================================ Installing: epel-release noarch 8-16.el8 @commandline 24 k Transaction Summary ================================================================================================================ Install 1 Package [root@localhost yum.repos.d]# yum groups mark install 'Development Tools' Failed to set locale, defaulting to C.UTF-8 Extra Packages for Enterprise Linux 8 - x86_64 360 kB/s | 13 MB 00:35 Extra Packages for Enterprise Linux Modular 8 - x86_64 220 kB/s | 1.0 MB 00:04 Last metadata expiration check: 0:00:03 ago on Tue Aug 2 16:14:31 2022. Dependencies resolved. ================================================================================================================ Package Architecture Version Repository Size ================================================================================================================ Installing Groups: Development Tools Transaction Summary ================================================================================================================ Is this ok [y/N]: y Complete!
//创建apache服务的用户和组
[root@localhost ~]# groupadd -r apache
[root@localhost ~]# useradd -r -M -s /sbin/nologin -g apache apache
[root@localhost ~]# id apache
uid=975(apache) gid=974(apache) groups=974(apache)
//安装依赖包
[root@localhost ~]# yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ --allowerasing
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 0:07:29 ago on Tue Aug 2 16:14:31 2022.
Dependencies resolved.
================================================================================================================
Package Architecture Version Repository Size
================================================================================================================
//下载和安装apr以及apr-util
[root@localhost src]# ls
apr-1.6.5.tar.bz2 debug kernels
apr-util-1.6.1.tar.bz2 httpd-2.4.54.tar.bz2 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
[root@localhost src]#
解压,先解压依赖包在解压主包
[root@localhost src]# tar xf apr-1.6.5.tar.bz2
[root@localhost src]# cd apr-1.6.5/
[root@localhost apr-1.6.5]# ls
CHANGES README apr.pc.in config.layout file_io locks random time
CMakeLists.txt README.cmake apr.spec configure helpers memory shmem tools
LICENSE apr-config.in atomic configure.in include misc strings user
Makefile.in apr.dep build docs libapr.dep mmap support
Makefile.win apr.dsp build-outputs.mk dso libapr.dsp network_io tables
NOTICE apr.dsw build.conf emacs-mode libapr.mak passwd test
NWGNUmakefile apr.mak buildconf encoding libapr.rc poll threadproc
[root@localhost apr-1.6.5]# vim configure
解压安装包
[root@localhost apr-1.6.5]# tar xf apr-1.6.5.tar.bz2
[root@localhost apr-1.6.5]# vim configure
cfgfile="${ofile}T"
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
# $RM "$cfgfile" //将此行加上注释,或者删除此行
配置过程
config.status: creating include/apr.h
config.status: creating build/apr_rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating apr-1-config
config.status: creating apr.pc
config.status: creating test/Makefile
config.status: creating test/internal/Makefile
config.status: creating include/arch/unix/apr_private.h
config.status: executing libtool commands
config.status: executing default commands
[root@localhost apr-1.6.5]# ./configure --prefix=/usr/local/apr
编译安装过程
/usr/bin/install -c -m 644 build/apr_rules.out /usr/local/apr/build-1/apr_rules.mk
/usr/bin/install -c -m 644 /usr/src/apr-1.6.5/build/apr_common.m4 /usr/local/apr/build-1
/usr/bin/install -c -m 644 /usr/src/apr-1.6.5/build/find_apr.m4 /usr/local/apr/build-1
/usr/bin/install -c -m 755 apr-config.out /usr/local/apr/bin/apr-1-config
[root@localhost apr-1.6.5]# make && make install
解压apr-util
configure: creating ./config.status config.status: creating Makefile config.status: creating export_vars.sh config.status: creating build/pkg/pkginfo config.status: creating apr-util.pc config.status: creating apu-1-config config.status: creating include/private/apu_select_dbm.h config.status: creating include/apr_ldap.h config.status: creating include/apu.h config.status: creating include/apu_want.h config.status: creating test/Makefile config.status: creating include/private/apu_config.h config.status: executing default commands [root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 编译安装过程 See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- /usr/bin/install -c -m 644 aprutil.exp /usr/local/apr-util/lib /usr/bin/install -c -m 755 apu-config.out /usr/local/apr-util/bin/apu-1-config [root@localhost apr-util-1.6.1]# make && make install
//编译安装httpd
[root@localhost src]# tar xf httpd-2.4.54.tar.bz2 [root@localhost src]# cd httpd-2.4.38 -bash: cd: httpd-2.4.38: No such file or directory [root@localhost src]# cd httpd-2.4.54/ [root@localhost httpd-2.4.54]# ./configure --prefix=/usr/local/apache \ > --sysconfdir=/etc/httpd24 \ > --enable-ssl \ > --enable-cgi \ > --enable-rewrite \ > --with-zlib \ > --with-pcre \ > --with-apr=/usr/local/apr \ > --with-apr-util=/usr/local/apr-util/ \ > --enable-modules=most \ > --enable-mpms-shared=all \ > --with-mpm=prefork 编译安装过程 mkdir /usr/local/apache/man mkdir /usr/local/apache/man/man1 mkdir /usr/local/apache/man/man8 mkdir /usr/local/apache/manual make[1]: Leaving directory '/usr/src/httpd-2.4.54' [root@localhost httpd-2.4.54]# make && make install
//安装后配置
[root@localhost httpd-2.4.54]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/httpd.sh
[root@localhost httpd-2.4.54]# source /etc/profile.d/httpd.sh
[root@localhost httpd-2.4.54]# ln -s /usr/local/apache/include/ /usr/include/httpd
[root@localhost httpd-2.4.54]# echo 'MANPATH /usr/local/apache/man' >> /etc/man.config
//取消ServerName前面的注释
[root@localhost ~]# sed -i '/#ServerName/s/#//g' /etc/httpd24/httpd.conf
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]#
//启动apache
[root@localhost ~]# apachectl start [root@localhost ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:111 0.0.0.0:* LISTEN 0 32 192.168.122.1:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 5 127.0.0.1:631 0.0.0.0:* LISTEN 0 128 [::]:111 [::]:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 5 [::1]:631 [::]:* [root@localhost ~]# [root@localhost ~]# which apachectl /usr/local/apache/bin/apachectl [root@localhost ~]# cd /usr/lib/systemd/system [root@localhost system]# cp sshd.service httpd.service [root@localhost system]# vim httpd.service [root@localhost system]# cat httpd.service [Unit] Description=httpd server daemon After=network.target sshd-keygen.target [Service] Type=forking ExecStart=/usr/local/apache/bin/apachectl start ExecStop=/usr/local/apache/bin/apachectl stop [Install] WantedBy=multi-user.target [root@localhost system]# cd [root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart httpd [root@localhost ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:111 0.0.0.0:* LISTEN 0 32 192.168.122.1:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 5 127.0.0.1:631 0.0.0.0:* LISTEN 0 128 [::]:111 [::]:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 5 [::1]:631 [::]:*
#3.2 安装mysql
[root@localhost ~]# cd /usr/src
[root@localhost src]# ls
apr-1.6.5 apr-util-1.6.1.tar.bz2 httpd-2.4.54.tar.bz2
apr-1.6.5.tar.bz2 debug kernels
apr-util-1.6.1 httpd-2.4.54 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
//创建用户和组
[root@localhost src]# groupadd -r mysql
[root@localhost src]# useradd -M -s /sbin/nologin -g mysql mysql
//解压软件至/usr/local/
[root@localhost src]# tar xfs mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ [root@localhost src]# cd [root@localhost ~]# ll /usr/local/ total 0 drwxr-xr-x. 2 root root 6 Jun 22 2021 bin drwxr-xr-x. 2 root root 6 Jun 22 2021 etc drwxr-xr-x. 2 root root 6 Jun 22 2021 games drwxr-xr-x. 2 root root 6 Jun 22 2021 include drwxr-xr-x. 2 root root 6 Jun 22 2021 lib drwxr-xr-x. 3 root root 17 Jun 30 14:35 lib64 drwxr-xr-x. 2 root root 6 Jun 22 2021 libexec drwxr-xr-x. 9 root root 129 Jul 26 18:20 mysql-5.7.37-linux-glibc2.12-x86_64 drwxr-xr-x. 2 root root 6 Jun 22 2021 sbin drwxr-xr-x. 5 root root 49 Jun 30 14:35 share drwxr-xr-x. 2 root root 6 Jun 22 2021 src [root@localhost ~]# id mysql uid=1001(mysql) gid=974(mysql) groups=974(mysql) [root@localhost ~]# cd /usr/local/ [root@localhost local]# ln -sv mysql-5.7.37-linux-glibc2.12-x86_64/ mysql 'mysql' -> 'mysql-5.7.37-linux-glibc2.12-x86_64/' [root@localhost local]# ll total 0 drwxr-xr-x. 2 root root 6 Jun 22 2021 bin drwxr-xr-x. 2 root root 6 Jun 22 2021 etc drwxr-xr-x. 2 root root 6 Jun 22 2021 games drwxr-xr-x. 2 root root 6 Jun 22 2021 include drwxr-xr-x. 2 root root 6 Jun 22 2021 lib drwxr-xr-x. 3 root root 17 Jun 30 14:35 lib64 drwxr-xr-x. 2 root root 6 Jun 22 2021 libexec lrwxrwxrwx. 1 root root 36 Jul 26 18:35 mysql -> mysql-5.7.37-linux-glibc2.12-x86_64/ drwxr-xr-x. 9 root root 129 Jul 26 18:20 mysql-5.7.37-linux-glibc2.12-x86_64 drwxr-xr-x. 2 root root 6 Jun 22 2021 sbin drwxr-xr-x. 5 root root 49 Jun 30 14:35 share drwxr-xr-x. 2 root root 6 Jun 22 2021 src
//修改目录/usr/local/mysql的属主属组
[root@localhost local]# chown -R mysql.mysql mysql [root@localhost local]# ll mysql -d lrwxrwxrwx. 1 mysql mysql 36 Jul 26 18:35 mysql -> mysql-5.7.37-linux-glibc2.12-x86_64/ //把原文件也改一下 [root@localhost local]# chown -R mysql.mysql mysql-5.7.37-linux-glibc2.12-x86_64/ [root@localhost local]# ll total 0 drwxr-xr-x. 2 root root 6 Jun 22 2021 bin drwxr-xr-x. 2 root root 6 Jun 22 2021 etc drwxr-xr-x. 2 root root 6 Jun 22 2021 games drwxr-xr-x. 2 root root 6 Jun 22 2021 include drwxr-xr-x. 2 root root 6 Jun 22 2021 lib drwxr-xr-x. 3 root root 17 Jun 30 14:35 lib64 drwxr-xr-x. 2 root root 6 Jun 22 2021 libexec lrwxrwxrwx. 1 mysql mysql 36 Jul 26 18:35 mysql -> mysql-5.7.37-linux-glibc2.12-x86_64/ drwxr-xr-x. 9 mysql mysql 129 Jul 26 18:20 mysql-5.7.37-linux-glibc2.12-x86_64 drwxr-xr-x. 2 root root 6 Jun 22 2021 sbin drwxr-xr-x. 5 root root 49 Jun 30 14:35 share drwxr-xr-x. 2 root root 6 Jun 22 2021 src
//添加环境变量
[root@localhost mysql]# echo 'export PATH=$PATH:/usr/local/mysql/bin ' > /etc/profile.d/mysql.sh [root@localhost mysql]# source /etc/profile.d/mysql.sh [root@localhost mysql]# echo $PSTH [root@localhost mysql]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin [root@localhost mysql]# which mysql /usr/local/mysql/bin/mysql [root@localhost mysql]# ln -s /usr/local/mysql/include /usr/include/mysql [root@localhost mysql]# ll /usr/include/ total 0 drwxr-xr-x. 4 root root 34 Jun 30 14:40 gnome-boxes lrwxrwxrwx. 1 root root 24 Jul 26 18:45 mysql -> /usr/local/mysql/include drwxr-xr-x. 2 root root 27 Jun 30 14:36 python3.6m [root@localhost mysql]# ls LICENSE README bin docs include lib man share support-files [root@localhost mysql]# vim /etc/ld.so.conf.d/mysql.conf /usr/local/mysql/lib ~ ~ [root@localhost mysql]# ldconfig [root@localhost mysql]# pwd /usr/local/mysql [root@localhost mysql]# vim /etc/man_db.conf 找到这行添加下面一行东西 # MANDATORY_MANPATH /usr/man MANDATORY_MANPATH /usr/share/man MANDATORY_MANPATH /usr/local/share/man MANDATORY_MANPATH /usr/local/mysql/man #---------------------------------------------------------
//建立数据存放目录
[root@localhost mysql]# mkdir /opt/data
[root@localhost mysql]# chown -R mysql.mysql /opt/data/
[root@localhost mysql]# ll -d /opt/data
drwxr-xr-x. 2 mysql mysql 6 Jul 26 18:51 /opt/data
[root@localhost mysql]#
//初始化数据库
[root@localhost ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
2022-07-26T10:55:54.471606Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2022-07-26T10:55:54.676138Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-07-26T10:55:54.705693Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-07-26T10:55:54.710232Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 8593b802-0cd1-11ed-a041-000c29087110.
2022-07-26T10:55:54.710845Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-07-26T10:55:55.672624Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-07-26T10:55:55.672650Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-07-26T10:55:55.673043Z 0 [Warning] CA certificate ca.pem is self signed.
2022-07-26T10:55:56.093853Z 1 [Note] A temporary password is generated for root@localhost: yr1H3ent#6kn
[root@localhost ~]# echo 'yr1H3ent#6kn' > pass
[root@localhost ~]# cat pass
yr1H3ent#6kn
//请注意,这个命令的最后会生成一个临时密码,此处密码是yr1H3ent#6kn
//再次注意,这个密码是随机的,你的不会跟我一样,一定要记住这个密码,因为一会登录时会用到
//生成配置文件
[root@localhost ~]# vim /etc/my.cnf
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
//配置服务启动脚本
[root@localhost ~]# cd /usr/local/mysql
[root@localhost mysql]# cd support-files/
[root@localhost support-files]# ls
magic mysql-log-rotate mysql.server mysqld_multi.server
[root@localhost support-files]# cp -a mysql.server /etc/init.d/mysqld
[root@localhost support-files]# vim /etc/init.d/mysqld
# overwritten by settings in the MySQL configuration files.
basedir=/usr/local/mysql
datadir=/opt/data
# Default value, in seconds, afterwhich the script should timeout waiting
//启动mysql
[root@localhost ~]# service mysqld start Starting MySQL.Logging to '/opt/data/localhost.localdomain.err'. SUCCESS! [root@localhost ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:111 0.0.0.0:* LISTEN 0 32 192.168.122.1:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 5 127.0.0.1:631 0.0.0.0:* LISTEN 0 80 *:3306 *:* LISTEN 0 128 [::]:111 [::]:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 5 [::1]:631 [::]:* [root@localhost ~]# ps -ef | grep mysqld root 190654 1 0 19:22 pts/1 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/data --pid-file=/opt/data/mysql.pid mysql 190899 190654 0 19:22 pts/1 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/opt/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=localhost.localdomain.err --pid-file=/opt/data/mysql.pid --socket=/tmp/mysql.sock --port=3306 root 192393 8009 0 19:22 pts/1 00:00:00 grep --color=auto mysqld [root@localhost ~]# chkconfig --add mysqld [root@localhost ~]# chkconfig mysqld on [root@localhost ~]# chkconfig --list Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off 使用systemctl去启动MySQL服务 [root@localhost system]# vim mysql.service [root@localhost system]# cp sshd.service mysql.service [root@localhost system]# vim mysql.service [root@localhost system]# vim mysql.service [root@localhost system]# cat mysql.service [Unit] Description=mysqld server daemon After=network.target sshd-keygen.target [Service] Type=forking ExecStart=/etc/init.d/mysqld start ExecStop=/etc/init.d/mysqld stop ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target [root@localhost system]# systemctl daemon-reload [root@localhost system]# systemctl start mysqld [root@localhost system]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:111 0.0.0.0:* LISTEN 0 32 192.168.122.1:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 5 127.0.0.1:631 0.0.0.0:* LISTEN 0 80 *:3306 *:* LISTEN 0 128 [::]:111 [::]:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 5 [::1]:631 [::]:*
//修改密码
//使用临时密码登录
第一次登录会显示以下问题,需要下载ncurses-compat-libs [root@localhost mysql]# mysql -uroot -p mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory [root@localhost mysql]# yum whatprovides libncurses.so.5 Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 1:39:44 ago on Tue Aug 2 16:53:29 2022. ncurses-compat-libs-6.1-9.20180224.el8.i686 : Ncurses compatibility libraries Repo : base Matched from: Provide : libncurses.so.5 [root@localhost mysql]# yum -y install ncurses-compat-libs Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 1:40:02 ago on Tue Aug 2 16:53:29 2022. Dependencies resolved. ================================================================================================================ Package Architecture Version Repository Size ================================================================================================================ Installing: ncurses-compat-libs x86_64 6.1-9.20180224.el8 base 328 k Transaction Summary ================================================================================================================ Install 1 Package Total download size: 328 k Installed size: 1.0 M Downloading Packages: ncurses-compat-libs-6.1-9.20180224.el8.x86_64.rpm 1.2 MB/s | 328 kB 00:00 ---------------------------------------------------------------------------------------------------------------- Total 1.2 MB/s | 328 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : ncurses-compat-libs-6.1-9.20180224.el8.x86_64 1/1 Running scriptlet: ncurses-compat-libs-6.1-9.20180224.el8.x86_64 1/1 Verifying : ncurses-compat-libs-6.1-9.20180224.el8.x86_64 1/1 Installed: ncurses-compat-libs-6.1-9.20180224.el8.x86_64 Complete! [root@localhost mysql]# cat pass m:wCpfGlr8tw [root@localhost mysql]# cd [root@localhost ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.37 Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> set password = password('123456'); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> exit Bye [root@localhost ~]# mysql -uroot -p123456 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.37 MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
3.3 安装php
//配置yum源
//安装依赖包
[root@localhost ~]# yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel pcre-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel mhash mhash-devel php-mysqlnd --skip-broken Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 1:51:13 ago on Tue Aug 2 16:53:29 2022. Package libxml2-2.9.7-11.el8.x86_64 is already installed. Package openssl-1:1.1.1k-5.el8_5.x86_64 is already installed. Package openssl-devel-1:1.1.1k-5.el8_5.x86_64 is already installed. Package bzip2-1.0.6-26.el8.x86_64 is already installed. Package libcurl-7.61.1-22.el8.x86_64 is already installed. Package libjpeg-turbo-1.5.3-12.el8.x86_64 is already installed. Package libpng-2:1.6.34-5.el8.x86_64 is already installed. Package pcre-devel-8.42-6.el8.x86_64 is already installed. Package freetype-2.9.1-4.el8_3.1.x86_64 is already installed. Package gmp-1:6.1.2-10.el8.x86_64 is already installed. Package readline-7.0-10.el8.x86_64 is already installed. Package libxslt-1.1.32-6.el8.x86_64 is already installed. Dependencies resolved.
下载php并解压
[root@localhost src]# wget https://www.php.net/distributions/php-7.4.30.tar.xz --2022-08-02 18:49:35-- https://www.php.net/distributions/php-7.4.30.tar.xz Resolving www.php.net (www.php.net)... 185.85.0.29, 2a02:cb40:200::1ad Connecting to www.php.net (www.php.net)|185.85.0.29|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 10419136 (9.9M) [application/octet-stream] Saving to: 'php-7.4.30.tar.xz' php-7.4.30.tar.xz 100%[===========================================>] 9.94M 34.3KB/s in 3m 15s 2022-08-02 18:52:51 (52.2 KB/s) - 'php-7.4.30.tar.xz' saved [10419136/10419136] [root@localhost src]# tar xf php-7.4.30.tar.xz [root@localhost src]# cd php-7.4.30/ [root@localhost php-7.4.30]#
编译安装php
[root@localhost php-7.4.30]# ./configure --prefix=/usr/local/php7 \ > > --with-config-file-path=/etc \ > > --enable-fpm \ > > --enable-inline-optimization \ > > --disable-debug \ > > --disable-rpath \ > > --enable-shared \ > > --enable-soap \ > > --with-openssl \ > > --enable-bcmath \ [root@localhost php-7.4.30]# ./configure --prefix=/usr/local/php7 \ > --with-config-file-path=/etc \ > --enable-fpm \ > --enable-inline-optimization \ > --disable-debug \ > --disable-rpath \ > --enable-shared \ > --enable-soap \ > --with-openssl \ > --enable-bcmath \ > --with-iconv \ > --with-bz2 \ > --enable-calendar \ > --with-curl \ > --enable-exif \ > --enable-ftp \ > --enable-gd \ > --with-jpeg \ > --with-zlib-dir \ > --with-freetype \ > --with-gettext \ > --enable-json \ > --enable-mbstring \ > --enable-pdo \ > --with-mysqli=mysqlnd \ > --with-pdo-mysql=mysqlnd \ > --with-readline \ > --enable-shmop \ > --enable-simplexml \ > --enable-sockets \ > --with-zip \ > --enable-mysqlnd-compression-support \ > --with-pear \ > --enable-pcntl \ > --enable-posix
遇到以下问题的解决方法
1
configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met:
Package ‘libxml-2.0’, required by ‘virtual:world’, not found
解决方案
[root@localhost php-7.4.30]# yum install libxml2-devel -y
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 2:04:20 ago on Tue Aug 2 16:53:29 2022.
Package libxml2-devel-2.9.7-9.el8_4.2.i686 is already installed.
Dependencies resolved.
2
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:
Package ‘sqlite3’, required by ‘virtual:world’, not found
解决方案
[root@localhost php-7.4.30]# yum -y install sqlite-devel
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 2:05:34 ago on Tue Aug 2 16:53:29 2022.
Dependencies resolved.
3
configure: error: Package requirements (oniguruma) were not met:
Package ‘oniguruma’, required by ‘virtual:world’, not found
解决方案
[root@localhost php-7.4.30]# yum -y install http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 2:07:03 ago on Tue Aug 2 16:53:29 2022.
oniguruma-devel-6.8.2-2.el8.x86_64.rpm 179 kB/s | 47 kB 00:00
Dependencies resolved.
4
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:
Package ‘libzip’, required by ‘virtual:world’, not found
Package ‘libzip’, required by ‘virtual:world’, not found
Package ‘libzip’, required by ‘virtual:world’, not found
解决方案
[root@localhost php-7.4.30]# yum -y install sqlite-devel
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 2:05:34 ago on Tue Aug 2 16:53:29 2022.
Dependencies resolved.
然后在执行编译安装然后就成功了
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.
[root@localhost php-7.4.30]#
继续编译安装
warning: pear/PEAR dependency package "pear/Archive_Tar" installed version 1.4.14 is not the recommended version 1.4.4
[PEAR] PEAR - installed: 1.10.13
Wrote PEAR system config file at: /usr/local/php7/etc/pear.conf
You may want to add: /usr/local/php7/lib/php to your php.ini include_path
/usr/src/php-7.4.30/build/shtool install -c ext/phar/phar.phar /usr/local/php7/bin/phar.phar
ln -s -f phar.phar /usr/local/php7/bin/phar
Installing PDO headers: /usr/local/php7/include/php/ext/pdo/
[root@localhost php-7.4.30]# make && make install
配置环境变量
[root@localhost php-7.4.30]# echo "export PATH=$PATH:/usr/local/php7/bin" > /etc/profile.d/php.sh
[root@localhost php-7.4.30]# source /etc/profile.d/php.sh
[root@localhost php-7.4.30]# ln -s /usr/local/php7/include/ /usr/include/php
[root@localhost php-7.4.30]# echo "/usr/local/php7/lib" > /etc/ld.so.conf.d/php.conf
[root@localhost php-7.4.30]# which php
/usr/local/php7/bin/php
[root@localhost php-7.4.30]# php -v
PHP 7.4.30 (cli) (built: Aug 2 2022 19:13:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
配置php-fpm
[root@localhost php-7.4.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@localhost php-7.4.30]# chmod +x /etc/init.d/php-fpm [root@localhost php-7.4.30]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf [root@localhost php-7.4.30]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf [root@localhost php-7.4.30]# cd /usr/lib/systemd/system [root@localhost system]# systemctl restart php-fpm.service [root@localhost system]# cat php-fpm.service [Unit] Description=php-fpm server daemon After=network.target sshd-keygen.target [Service] Type=forking ExecStart=/etc/init.d/php-fpm start ExecStop=/etc/init.d/php-fpm stop ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target [root@localhost system]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 127.0.0.1:9000 0.0.0.0:* LISTEN 0 128 0.0.0.0:111 0.0.0.0:* LISTEN 0 32 192.168.122.1:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 5 127.0.0.1:631 0.0.0.0:* LISTEN 0 80 *:3306 *:* LISTEN 0 128 [::]:111 [::]:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 5 [::1]:631 [::]:*
启动php-fpm
#配置apache
启用代理模块
在apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩展,因此,这两个模块都要加载,编辑httpd.conf文件,取消以下两行内容的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
//启用httpd的相关模块
[root@localhost system]# sed -i '/proxy_module/s/#//g' /etc/httpd24/httpd.conf
[root@localhost system]# sed -i '/proxy_fcgi_module/s/#//g' /etc/httpd24/httpd.conf
3.4.2 配置虚拟主机
在需要使用fcgi的虚拟主机中添加类似如下两行:
ProxyRequests Off //关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
例如:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/idfsoft.com/$1
以上设置表示把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
注意:
这里写的/var/www/html/是yum源安装方式生成的网页存放目录,这里必须改成你编译安装指定的网页存放路径,禁止直接复制我这里的路径
这里的idfsoft.com是域名,你必须改成你所使用的域名,禁止直接复制此处的域名
这里的$1表示匹配所有以.php结尾的http请求
//创建虚拟主机目录并生成php测试页面
[root@localhost ~]# mkdir /usr/local/apache/htdocs/zhan.com
[root@localhost ~]# cat > /usr/local/apache/htdocs/zhan.com/index.php <<EOF
<?php
phpinfo();
?>
EOF
[root@localhost ~]# chown -R apache.apache /usr/local/apache/htdocs/
[root@localhost ~]# ll /usr/local/apache/htdocs/ -d
drwxr-xr-x 3 apache apache 44 Aug 16 14:50 /usr/local/apache/htdocs/
[root@localhost ~]# vim /etc/httpd24/httpd.conf
//在配置文件的最后加入以下内容
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/zhan.com"
ServerName www.zhan.com
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/zhan.com/$1
<Directory "/usr/local/apache/htdocs/zhan.com">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
//搜索AddType,添加以下内容
[root@localhost ~]# vim /etc/httpd24/httpd.conf
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php #添加此行
AddType application/x-httpd-php-source .phps #添加此行
[root@localhost ~]# sed -i '/ DirectoryIndex/s/index.html/index.php index.html/g' /etc/httpd24/httpd.conf
[root@localhost system]# systemctl daemon-reload
[root@localhost system]# systemctl restart php-fpm.service
[root@localhost system]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*
LISTEN 0 128 0.0.0.0:111 0.0.0.0:*
LISTEN 0 32 192.168.122.1:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 5 [::1]:631 [::]:*
3.5 验证
1.修改/etc/hosts文件,添加域名与IP的映射
2.在浏览器上使用域名访问,若看到以下界面则表示lamp架构搭建成功,否则请检查你的操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。