lamp搭建

lamp

1. lamp简介

有了前面学习的知识的铺垫,今天可以来学习下第一个常用的web架构了。

所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建立web应用平台。

2. web服务器工作流程

在说lamp架构平台的搭建前,我们先来了解下什么是CGI,什么是FastCGI,什么是…

web服务器的资源分为两种,静态资源和动态资源

静态资源就是指静态内容,客户端从服务器获得的资源的表现形式与原文件相同。可以简单的理解为就是直接存储于文件系统中的资源
动态资源则通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端
那么web服务器如何执行程序并将结果返回给客户端呢?下面通过一张图来说明一下web服务器如何处理客户端的请求
在这里插入图片描述

如上图所示

阶段①显示的是httpd服务器(即apache)和php服务器通过FastCGI协议进行通信,且php作为独立的服务进程运行

阶段②显示的是php程序和mysql数据库间通过mysql协议进行通信。php与mysql本没有什么联系,但是由Php语言写成的程序可以与mysql进行数据交互。同理perl和python写的程序也可以与mysql数据库进行交互

2.1 cgi与fastcgi

上图阶段①中提到了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上下文切换而导致耗时

2.2 httpd与php结合的方式

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方式来加载动态资源

2.3 web工作流程

通过上面的图说明一下web的工作流程:

客户端通过http协议请求web服务器资源
web服务器收到请求后判断客户端请求的资源是静态资源或是动态资源
若是静态资源则直接从本地文件系统取之返回给客户端。
否则若为动态资源则通过FastCGI协议与php服务器联系,通过CGI程序的master进程调度worker进程来执行程序以获得客户端请求的动态资源,并将执行的结果通过FastCGI协议返回给httpd服务器,httpd服务器收到php的执行结果后将其封装为http响应报文响应给客户端。在执行程序获取动态资源时若需要获得数据库中的资源时,由Php服务器通过mysql协议与MySQL/MariaDB服务器交互,取之而后返回给httpd,httpd将从php服务器收到的执行结果封装成http响应报文响应给客户端。

3. lamp平台构建

环境说明:
|在这里插入图片描述

lamp平台软件安装次序:
httpd --> mysql --> php
注意:php要求httpd使用prefork MPM

3.1 安装httpd

//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架构搭建成功,否则请检查你的操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LAMP是一种常见的Web服务器软件堆栈,它由Linux操作系统、Apache HTTP服务器、MySQL关系型数据库管理系统和PHP编程语言组成。下面是搭建LAMP的步骤: 1. 安装Linux操作系统,建议选择基于Debian或Red Hat的发行版,如Ubuntu、Debian、CentOS等。 2. 安装Apache HTTP服务器。在Linux系统中,可以使用包管理器来安装Apache,例如在Ubuntu中运行以下命令: ``` sudo apt update sudo apt install apache2 ``` 安装完成后,可以通过在Web浏览器中输入服务器IP地址来测试Apache是否正常运行。 3. 安装MySQL数据库。在Linux系统中,也可以使用包管理器来安装MySQL,例如在Ubuntu中运行以下命令: ``` sudo apt install mysql-server ``` 安装完成后,可以通过运行以下命令来测试MySQL是否正常运行: ``` sudo systemctl status mysql ``` 4. 安装PHP编程语言。在Linux系统中,可以使用包管理器来安装PHP,例如在Ubuntu中运行以下命令: ``` sudo apt install php libapache2-mod-php php-mysql ``` 安装完成后,需要重新启动Apache服务器以使PHP生效: ``` sudo systemctl restart apache2 ``` 然后,可以创建一个简单的PHP脚本来测试PHP是否正常运行: ``` <?php phpinfo(); ?> ``` 保存该脚本为phpinfo.php并将其放置在Apache服务器的网站根目录下。然后,在Web浏览器中输入服务器IP地址/phpinfo.php来测试PHP是否正常运行。 完成以上步骤后,您就已经成功地搭建了一个LAMP服务器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值