• 部署lamp


    1. lamp简介

    所谓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平台构建

    环境说明:

    系统平台IP需要安装的服务
    centos8 redhat8192.168.229.129httpd-2.4 mysql-5.7 php php-mysql

    LAMP平台软件安装次序:

        httpd --> mysql --> php

      注意:php要求httpd使用prefork MPM

      3.1 安装httpd

      apache官网: https://apache.org/

      # YUM源配置
      ## 基础源
      [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
      [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]# dnf clean all
      0 files removed
      # 建立缓存
      [root@localhost yum.repos.d]# dnf makecache
      
      # 配置epel源
      [root@localhost yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
      [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]# dnf clean all
      0 files removed
      # 建立缓存
      [root@localhost yum.repos.d]# dnf makecache
      
      
      # 安装开发工具包(标志安装)
      [root@localhost ~]# yum groups mark install 'Development Tools'
      
      # 创建apache系统用户
      [root@localhost ~]# useradd -r -M -s /sbin/nologin apache
      [root@localhost ~]# id apache
      uid=995(apache) gid=992(apache) groups=992(apache)
      
      # 安装依赖包
      [root@localhost ~]# dnf -y install openssl-devel pcre-devel expat-devel libtool boost-devel --allowerasing  gcc gcc-c++ make vim wget
      
      安装 boost-devel --allowerasing 这个是因为安装gcc报错所以需要安装这个
      
      # 下载和安装apr和apr-util、httpd包
      #下载apr包
      [root@localhost ~]# cd /opt/
      [root@localhost opt]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz  
      #下载apr-util包
      [root@localhost opt]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
      #下载httpd包
      [root@localhost opt]# wget https://downloads.apache.org/httpd/httpd-2.4.53.tar.gz
      
      [root@localhost opt]# ls
      apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.53.tar.gz
      
      # 解压包
      [root@localhost opt]# tar xf apr-1.7.0.tar.gz 
      [root@localhost opt]# tar xf apr-util-1.6.1.tar.gz 
      [root@localhost opt]# tar xf httpd-2.4.53.tar.gz 
      
      # 需要进去apr 里面的configure 更改一个数据
      [root@localhost opt]# vim apr-1.7.0/configur
          cfgfile="${ofile}T"
          trap "$RM \"$cfgfile\"; exit 1" 1 2 15
          # $RM "$cfgfile"       # 将此行加上注释,或者删除此行
      
      # 编译Apr
      [root@localhost opt]# cd apr-1.7.0/
      [root@localhost apr-1.7.0]# ./configure --prefix=/usr/local/apr
      配置过程略...
      
      # make
      [root@localhost apr-1.7.0]# make
      编译安装过程略...
      
      # make install
      [root@localhost apr-1.7.0]# make install
      编译安装过程略...
      
      # 编译Apr-util
      [root@localhost apr-1.7.0]# cd ../apr-util-1.6.1/
      [root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
      配置过程略...
      
      # make
      [root@localhost apr-util-1.6.1]# make
      编译安装过程略...
      
      # make install
      [root@localhost apr-util-1.6.1]# make install
      编译安装过程略...
      
      
      # 编译安装httpd
      [root@localhost apr-util-1.6.1]# cd  ../httpd-2.4.53/
      [root@localhost httpd-2.4.53]# ./configure --prefix=/usr/local/apache \
      --enable-so \
      --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
      
      编译安装过程略...
      
      # make
      [root@localhost httpd-2.4.53]# make
      编译安装过程略...
      
      # make install
      [root@localhost httpd-2.4.53]# make install
      编译安装过程略...
      
      
      # 设置环境变量
      [root@localhost ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
      [root@localhost ~]# source /etc/profile.d/apache.sh  # 刷新,让其生效
      [root@localhost ~]# which apachectl  # 查看是否已生效
      /usr/local/apache/bin/apachectl
      
      
      # 配置头文件
      [root@localhost ~]# ln -s /usr/local/apache/include /usr/include/apache
      
      
      # 配置man文档
      [root@localhost ~]# vim /etc/man_db.conf
      MANDATORY_MANPATH      /usr/local/share/man
      MANDATORY_MANPATH      /usr/local/apache/man  # 添加
      
      
      # 启动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:22            0.0.0.0:*
      LISTEN    0     128          [::]:22               [::]:*
      LISTEN   0      128          *:80                   *:*
      
      # 用apachectl start 这个命令启动会有一个警告,是因为需要进到主文件里面修改一个数据
      ### apachectl start
      AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
      
      # 解决警告信息
      # 第一种做法 vim 进入里面取消 #号
      [root@localhost ~]# cd /usr/local/apache/conf/
      [root@localhost conf]# vim httpd.conf
      ServerName www.example.com:80  # 取消ServerName前面的注释
      
      # 第二种做法使用sed命令
      [root@localhost ~]# sed -i '/#ServerName/s/#//g' /usr/local/apache/conf/
      
      # 关闭防火墙和SElinux
      [root@localhost ~]# systemctl disable --now firewalld
      [root@localhost ~]# vim /etc/selinux/config
      [root@localhost ~]# head -7 /etc/selinux/config | tail -1
      SELINUX=disabled
      [root@localhost ~]# setenforce 0
      [root@localhost ~]# getenforce
      Permissive
      
      
      # 现在有一个问题,就是开机自启?
      配置apache开机自启
      ## 配置service 文件
      # 进到这个系统目录
      [root@localhost ~]# cd /usr/lib/systemd/system
      # 复制一份,进里面改
      [root@localhost system]# cp sshd.service httpd.service 
      [root@localhost system]# vim 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
      ExecReload=/bin/kill -HUP $MAINPID
      
      [Install]
      WantedBy=multi-user.target
      
      # 刷新进程
      [root@localhost ~]# systemctl daemon-reload
      
      # 设置apache开机自启
      [root@localhost ~]# systemctl enable --now httpd
      Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
      [root@localhost ~]# systemctl status httpd
      ● httpd.service - httpd server daemon
         Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
         Active: active (running) since Mon 2022-07-04 18:59:49 CST; 1s ago
        Process: 48390 ExecStart=/usr/local/apache/bin/apachectl start (code=exited, status=0/SUCCESS)
      ........省略
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
      • 111
      • 112
      • 113
      • 114
      • 115
      • 116
      • 117
      • 118
      • 119
      • 120
      • 121
      • 122
      • 123
      • 124
      • 125
      • 126
      • 127
      • 128
      • 129
      • 130
      • 131
      • 132
      • 133
      • 134
      • 135
      • 136
      • 137
      • 138
      • 139
      • 140
      • 141
      • 142
      • 143
      • 144
      • 145
      • 146
      • 147
      • 148
      • 149
      • 150
      • 151
      • 152
      • 153
      • 154
      • 155
      • 156
      • 157
      • 158
      • 159
      • 160
      • 161
      • 162
      • 163
      • 164
      • 165
      • 166
      • 167
      • 168
      • 169
      • 170
      • 171
      • 172
      • 173
      • 174
      • 175
      • 176
      • 177
      • 178
      • 179
      • 180
      • 181
      • 182
      • 183
      • 184
      • 185
      • 186
      • 187
      • 188
      • 189
      • 190
      • 191
      • 192

      3.2 安装mysql

      mysql官网:https://downloads.mysql.com/

      # 安装依赖包
      [root@localhost ~]# dnf -y install ncurses-compat-libs openssl-devel openssl cmake mariadb-devel
      
      # 创建mysql系统用户
      [root@localhost ~]# useradd -r -M -s /sbin/nologin mysql
      [root@localhost ~]# id mysql
      uid=994(mysql) gid=991(mysql) groups=991(mysql)
      
      
      
      # 下载二进制格式的mysql软件包
      [root@localhost ~]# cd /opt/
      [root@localhost opt]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
      
      
      # 解压软件至/usr/local/
      [root@localhost opt]# ls
      apr-1.7.0  apr-util-1.6.1  httpd-2.4.53  mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
      [root@localhost opt]# tar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
      [root@localhost ~]# ls /usr/local/
      apache  apr-util  etc    include  lib64    mysql-5.7.37-linux-glibc2.12-x86_64  share
      apr     bin       games  lib      libexec  sbin                                 src
      # 重命名为 mysql
      [root@localhost ~]# cd /usr/local/
      [root@localhost local]# mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
      [root@localhost local]# ls
      apache  apr  apr-util  bin  etc  games  include  lib  lib64  libexec  mysql  sbin  share  src
      [root@localhost local]# ll mysql/ -d
      drwxr-xr-x. 9 root root 129 Jul  4 19:09 mysql/
      
      
      # 修改目录/usr/local/mysql的属主属组
      [root@localhost local]# chown -R mysql.mysql mysql
      [root@localhost local]# ll mysql/ -d
      drwxr-xr-x. 9 mysql mysql 129 Jul  4 19:09 mysql/
      
      
      
      # 添加环境变量
      [root@localhost ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
      [root@localhost ~]# source /etc/profile.d/mysql.sh
      [root@localhost ~]# which mysqld
      /usr/local/mysql/bin/mysqld
      
      # 配置include
      ## 软链接到/usr/include/mysql,叫mysql
      [root@localhost ~]# ln -s /usr/local/mysql/include /usr/include/mysql
      
      # 配置 man 文档
      [root@localhost ~]# vim /etc/man_db.conf
      MANDATORY_MANPATH   /usr/local/share/man
      MANDATORY_MANPATH   /usr/local/mysql/man # 添加这条
      
      # 映射库文件
      [root@localhost ~]# vim /etc/ld.so.conf.d/mysql.conf
      /usr/local/mysql/lib
      [root@localhost ~]# ldconfig # 让其生效
      
      
      # 建立数据存放目录
      [root@localhost ~]# mkdir /opt/data
      [root@localhost ~]# chown -R mysql.mysql /opt/data/
      [root@localhost ~]# ll /opt/data/ -d
      drwxr-xr-x. 2 mysql mysql 6 Jul  4 19:20 /opt/data/
      
      - name: privode initialize.sh.j2
        template:
          src: files/initialize.sh.j2
          dest: /opt/initialize.sh
          mode: 0755
      - name: exec  initialize
        shell: /opt/initialize.sh
        register: print_mysql_info
      - debug: var=print_mysql_info
      
      
      
      
      # 初始化数据库
      [root@localhost ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
      ......省略
      root@localhost: V2hQugC(hAh9
      # 请注意,这个命令的最后会生成一个临时密码,此处密码是V2hQugC(hAh9ik
      # 再次注意,这个密码是随机的,你的不会跟我一样,一定要记住这个密码,因为一会登录时会用到
      
      
      # 生成配置文件
      [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/support-files/
      [root@localhost support-files]# ls
      magic  mysqld_multi.server  mysql-log-rotate  mysql.server
      # 复制
      [root@localhost support-files]# cp mysql.server mysqld
      [root@localhost support-files]# ll mysqld -d
      -rwxr-xr-x. 1 root root 10576 Jul  4 19:37 mysqld
      
      # 设置所有者所属组为mysqld
      [root@localhost support-files]# chown -R mysql.mysql mysqld
      [root@localhost support-files]# ll mysqld -d
      -rwxr-xr-x. 1 mysql mysql 10576 Jul  4 19:37 mysqld
      [root@localhost support-files]# vim mysqld
      basedir=/usr/local/mysql # 找到这两行添加/usr/local/mysql
      datadir=/opt/data # 找到这两行添加/opt/data
      
      
      
      # 启动mysql
      [root@localhost ~]# /usr/local/mysql/support-files/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:22          0.0.0.0:*
      LISTEN  0       128               [::]:22             [::]:*
      LISTEN  0       80                 *:3306              *:*
      LISTEN  0       128                *:80                *:*
       
      [root@localhost ~]# ps -ef|grep mysql
      root       50891       1  0 19:44 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/data --pid-file=/opt/data/mysql.pid
      mysql      51091   50891  0 19:44 pts/0    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       51124    1694  0 19:45 pts/0    00:00:00 grep --color=auto mysql
       
       
      
      # 修改密码
      # 使用临时密码登录
      [root@localhost ~]# mysql -uroot -p
      Enter password: # 输入密码
      ......省略
      # 设置新密码
      mysql> set password = password('runtime123!');
      Query OK, 0 rows affected, 1 warning (0.00 sec)
      # 退出登录验证密码
      [root@localhost ~]# mysql -uroot -pruntime123!
      ....省略
      mysql>
      
      # 配置service 让它开机自启
      [root@localhost ~]# cd /usr/lib/systemd/system
      [root@localhost system]# cp sshd.service mysqld.service
      [root@localhost system]# vim mysqld.service
      [Unit]
      Description=mysql server daemon
      After=network.target sshd-keygen.target
      
      [Service]
      Type=forking
      ExecStart=/usr/local/mysql/support-files/mysqld start
      ExecStop=/usr/local/mysql/support-files/mysqld stop
      ExecReload=/bin/kill -HUP $MAINPID
      
      [Install]
      WantedBy=multi-user.target
      [root@localhost system]# systemctl daemon-reload
      
      # 开机自启
      [root@localhost ~]# systemctl enable --now mysqld
      Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
      [root@localhost ~]# systemctl status mysqld
      ● mysqld.service - mysql server daemon
         Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendo>
         Active: active (running) since Mon 2022-07-04 20:04:28 CST; 1s ago
        Process: 51213 ExecStart=/usr/local/mysql/support-files/mysqld start (c>
       Main PID: 51226 (mysqld_safe)
      ........省略
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
      • 111
      • 112
      • 113
      • 114
      • 115
      • 116
      • 117
      • 118
      • 119
      • 120
      • 121
      • 122
      • 123
      • 124
      • 125
      • 126
      • 127
      • 128
      • 129
      • 130
      • 131
      • 132
      • 133
      • 134
      • 135
      • 136
      • 137
      • 138
      • 139
      • 140
      • 141
      • 142
      • 143
      • 144
      • 145
      • 146
      • 147
      • 148
      • 149
      • 150
      • 151
      • 152
      • 153
      • 154
      • 155
      • 156
      • 157
      • 158
      • 159
      • 160
      • 161
      • 162
      • 163
      • 164
      • 165
      • 166
      • 167
      • 168
      • 169
      • 170
      • 171
      • 172
      • 173
      • 174
      • 175
      • 176

      3.3 安装php

      PHP官网:https://www.php.net/

      # 下载 PHP
      [root@localhost opt]#  wget https://www.php.net/distributions/php-7.4.29.tar.xz
      ........省略
      [root@localhost opt]# ls
      apr-1.7.0  apr-util-1.6.1  data  httpd-2.4.53  mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz  php-7.4.29.tar.xz
      
      # 解压
      [root@localhost opt]# tar xf php-7.4.29.tar.xz -C /usr/local/
      [root@localhost ~]# ls /usr/local/
      apache  apr  apr-util  bin  etc  games  include  lib  lib64  libexec  mysql  php-7.4.29  sbin  share  src
      
      # 这是查找MySQL跟PHP打交道的包名
      [root@localhost ~]# dnf list all | grep mysql | grep php
      php-mysqlnd.x86_64                                                7.2.24-1.module_el8.2.0+313+b04d0a66                   AppStream
      
      
      # 安装依赖包
      [root@localhost ~]# dnf -y install  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 sqlite-devel libzip-devel php-mysqlnd
      安装过程略....
      
      # 安装 oniguruma包
      [root@localhost ~]# dnf -y install http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
      
      
      
      # 编译安装php
      [root@localhost ~]# cd /usr/local/php-7.4.29/
      [root@localhost php-7.4.29]# ./configure --prefix=/usr/local/php7  \
      --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
      
      # make
      [root@localhost php-7.4.29]# make
      编译过程略
      
      [root@localhost php-7.4.29]# make install
      安装过程略
      
      
      # 安装后配置
      [root@localhost ~]# echo 'export PATH=/usr/local/php7/bin:$PATH' > /etc/profile.d/php7.sh
      [root@localhost ~]# source /etc/profile.d/php7.sh
      [root@localhost ~]# which php
      /usr/local/php7/bin/php
      
      # 配置头文件
      [root@localhost ~]# ln -s /usr/local/php7/include /usr/include/php7
      
      # 配置库文件
      [root@localhost ~]# echo '/usr/local/php7/lib' > /etc/ld.so.conf.d/php7.conf
      [root@localhost ~]# ldconfig
      
      
      # 查看版本
      [root@localhost ~]# php -v
      PHP 7.4.29 (cli) (built: Jul  4 2022 21:07:32) ( NTS )
      Copyright (c) The PHP Group
      Zend Engine v3.4.0, Copyright (c) Zend Technologies
      
      
      
      # 配置php-fpm
      
      [root@localhost php-7.4.29]# pwd
      /usr/local/php-7.4.29
      [root@localhost php-7.4.29]# \cp php.ini-production /etc/php.ini  # 这个文件已存在所以要加上\表示覆盖
      
      [root@localhost php-7.4.29]# cp sapi/fpm/php-fpm  /etc/init.d/php-fpm
      [root@localhost php-7.2.8]# chmod +x /etc/init.d/php-fpm # 如果有执行权限忽略这一条
      
      [root@localhost ~]# cd /usr/local/php7/etc
      [root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
      [root@localhost etc]# cd  php-fpm.d
      [root@localhost php-fpm.d]# cp www.conf.default www.conf
      
      
      # 编辑php-fpm的配置文件(/usr/local/php7/etc/php-fpm.conf):
      # 配置fpm的相关选项为你所需要的值:
      [root@localhost ~]# vim /usr/local/php7/etc/php-fpm.conf
      .....
      .....
      pm.max_children = 50    ;最多同时提供50个进程提供50个并发服务
      pm.start_servers = 5    ;启动时启动5个进程
      pm.min_spare_servers = 2    ;最小空闲进程数
      pm.max_spare_servers = 8    ;最大空闲进程数
      
      [root@localhost ~]# tail /usr/local/php7/etc/php-fpm.conf
      ; file.
      ; Relative path can also be used. They will be prefixed by:
      ;  - the global prefix if it's been set (-p argument)
      ;  - /usr/local/php7 otherwise
      include=/usr/local/php7/etc/php-fpm.d/*.conf
      pm.max_children = 50
      pm.start_servers = 5
      pm.min_spare_servers = 2
      pm.max_spare_servers = 8
      
      #  查看端口号是否监听在9000上
      [root@localhost php-fpm.d]# pwd
      /usr/local/php7/etc/php-fpm.d
      [root@localhost php-fpm.d]# vim www.conf
      listen = 127.0.0.1:9000 # 查看端口号是否监听在9000上
      
      
      # 启动php-fpm
      [root@localhost ~]# /etc/init.d/php-fpm
      
      # 默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验证其是否已经监听在相应的套接字
      [root@localhost ~]# ss -antl
      State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port  Process
      LISTEN  0       128            0.0.0.0:22          0.0.0.0:*
      LISTEN  0       128          127.0.0.1:9000        0.0.0.0:*
      LISTEN  0       128               [::]:22             [::]:*
      LISTEN  0       80                   *:3306              *:*
      LISTEN  0       128                  *:80                *:*
      [root@localhost ~]#
      
      
      [root@localhost ~]# ps -ef | grep php
      root      218073       1  0 21:44 ?        00:00:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
      nobody    218074  218073  0 21:44 ?        00:00:00 php-fpm: pool www
      nobody    218075  218073  0 21:44 ?        00:00:00 php-fpm: pool www
      nobody    218076  218073  0 21:44 ?        00:00:00 php-fpm: pool www
      nobody    218077  218073  0 21:44 ?        00:00:00 php-fpm: pool www
      nobody    218078  218073  0 21:44 ?        00:00:00 php-fpm: pool www
      root      218081    1694  0 21:45 pts/0    00:00:00 grep --color=auto php
      
      # 杀掉进程
      [root@localhost ~]# pkill php-fpm
      [root@localhost ~]# ps -ef | grep php
      root      218085    1694  0 21:47 pts/0    00:00:00 grep --color=auto php
      [root@localhost ~]# ss -antl
      State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port  Process
      LISTEN  0       128            0.0.0.0:22          0.0.0.0:*
      LISTEN  0       128               [::]:22             [::]:*
      LISTEN  0       80                   *:3306              *:*
      LISTEN  0       128                  *:80                *:*
      
      
      # 配置开机自启
      在这个文件里面写启动
      root@localhost ~]# ll /etc/rc.local
      lrwxrwxrwx. 1 root root 13 Feb 11 23:37 /etc/rc.local -> rc.d/rc.local
      # 没有执行权限,需要给执行权限
      [root@localhost ~]# ll /etc/rc.d/rc.local
      -rw-r--r--. 1 root root 474 Feb 11 23:37 /etc/rc.d/rc.local
      # 给执行权限
      [root@localhost ~]# chmod +x /etc/rc.d/rc.local
      [root@localhost ~]# ll /etc/rc.d/rc.local
      -rwxr-xr-x. 1 root root 474 Feb 11 23:37 /etc/rc.d/rc.local
      [root@localhost ~]# vim /etc/rc.d/rc.local
      [root@localhost ~]# head -2  /etc/rc.d/rc.local
      #!/bin/bash
      /etc/init.d/php-fpm  # 添加这个为了能够开机自启,
      
      ## 不写service 文件的情况下就可以这样写,让其能够开机自启。
      
      #  重启查看是否能够开机自启
      [root@localhost ~]# reboot
      
      [root@localhost ~]# ss -antl
      State         Recv-Q        Send-Q               Local Address:Port
      LISTEN        0             128                      127.0.0.1:9000
      LISTEN        0             128                        0.0.0.0:22
      LISTEN        0             80                               *:3306
      LISTEN        0             128                              *:80
      LISTEN        0             128                           [::]:2
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
      • 111
      • 112
      • 113
      • 114
      • 115
      • 116
      • 117
      • 118
      • 119
      • 120
      • 121
      • 122
      • 123
      • 124
      • 125
      • 126
      • 127
      • 128
      • 129
      • 130
      • 131
      • 132
      • 133
      • 134
      • 135
      • 136
      • 137
      • 138
      • 139
      • 140
      • 141
      • 142
      • 143
      • 144
      • 145
      • 146
      • 147
      • 148
      • 149
      • 150
      • 151
      • 152
      • 153
      • 154
      • 155
      • 156
      • 157
      • 158
      • 159
      • 160
      • 161
      • 162
      • 163
      • 164
      • 165
      • 166
      • 167
      • 168
      • 169
      • 170
      • 171
      • 172
      • 173
      • 174
      • 175
      • 176
      • 177
      • 178
      • 179
      • 180
      • 181
      • 182
      • 183
      • 184
      • 185
      • 186
      • 187
      • 188
      • 189
      • 190
      • 191
      • 192
      • 193
      • 194
      • 195
      • 196
      • 197

      3.4 配置apache

      3.4.1 启用代理模块

      在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 ~]# cd /usr/local/apache/conf/
      [root@localhost conf]# vim httpd.conf #把下面两条代码的注释取消掉
      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
      • 1
      • 2
      • 3
      • 4

      3.4.2 配置虚拟主机

      在需要使用fcgi的虚拟主机中添加类似如下两行:

      ProxyRequests Off      # 关闭正向代理
      ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1
      127.0.0.1 # 是本机所以可以写成127.0.0.1
      如果是用三台虚拟机部署LAMP。一台部署APache、一台部署MySQL、一台部署PHP
      这里的PHP的ip就需要写你本机ip地址
      不懂就去看我另一篇文章,三台虚拟机部署LAMP架构
      • 1
      • 2
      • 3
      • 4
      • 5

      例如:

      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 ~]# cd /usr/local/apache/htdocs/
        # 创建测试目录
        [root@localhost htdocs]# mkdir test.com
        [root@localhost htdocs]# vim  test.com/index.php
        <?php
             phpinfo();
        ?>
        
        [root@localhost ~]# chown -R apache.apache /usr/local/apache/htdocs/
        [root@localhost ~]# ll  /usr/local/apache/htdocs/ -d
        drwxr-xr-x. 3 apache apache 40 Jul  4 22:11 /usr/local/apache/htdocs/
        
        
        
        
        # 在配置文件的最后加入以下内容
        [root@localhost ~]# vim  /usr/local/apache/conf/httpd.conf 
        [root@localhost ~]# tail -11  /usr/local/apache/conf/httpd.conf 
        <VirtualHost *:80>
            DocumentRoot "/usr/local/apache/htdocs/test.com"
            ServerName test.example.com
            ProxyRequests Off
            ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/test.com/$1
            <Directory "/usr/local/apache/htdocs/test.com">
                Options none
                AllowOverride none
                Require all granted
            </Directory>
        </VirtualHost>  
        
        [root@localhost ~]#  vim  /usr/local/apache/conf/httpd.conf
        # 搜索AddType,添加以下内容
            # 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        #添加此行
            
        # 搜索index.html,添加以下内容    
        <IfModule dir_module>
            DirectoryIndex index.php  index.html  # 添加 index.php
        </IfModule>
        
        # 重启apache服务
        [root@localhost ~]# systemctl stop php-fpm
        [root@localhost ~]# systemctl start php-fpm
        [root@localhost ~]# ss -antl
        State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port  Process
        LISTEN  0       128            0.0.0.0:22          0.0.0.0:*
        LISTEN  0       128          127.0.0.1:9000        0.0.0.0:*
        LISTEN  0       128               [::]:22             [::]:*
        LISTEN  0       80                   *:3306              *:*
        LISTEN  0       128                  *:80                *:*
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        • 43
        • 44
        • 45
        • 46
        • 47
        • 48
        • 49
        • 50
        • 51
        • 52
        • 53
        • 54
        • 55

        3.5 验证

        1.修改/etc/hosts文件,添加域名与IP的映射
        在这里插入图片描述

        2.在浏览器上使用域名访问,若看到以下界面则表示lamp架构搭建成功,否则请检查你的操作

        在这里插入图片描述

      • 相关阅读:
        JTabbedPane 点击+新建选项卡
        深度剖析数据在内存中的存储
        AtCoder Beginner Contest 263 G.Erasing Prime Pairs(二分图最大匹配-网络流)
        在Spring中实现资源的动态加载和卸载
        aPaaS是什么(aPaaS平台和IPaaS的区别是啥?大白话解释)
        HTML+CSS+JS制作一个迅雷看看电影网页设计实例 ,排版整洁,内容丰富,主题鲜明,简单的网页制作期末作业
        SpringBoot之ElasticsearchRestTemplate常用示例
        TypeScript 条件语句
        关于IDO代币预售模式系统开发程序逻辑丨代币合约挖矿dapp系统开发模式讲解分析(代码呈现)
        机器学习案例(三):未来销售预测
      • 原文地址:https://blog.csdn.net/m0_58805648/article/details/125628962