• Linux学习-76-LAMP环境搭建和LNMP环境搭建-前期准备


    17 LAMP环境搭建和LNMP环境搭建-环境准备

    • LAMP是协同工作的一整套系统和相关软件,能够提供动态Web站点服务以及应用开发环境,是目前最为成熟也是比较传统的一种企业网站应用模式。

    • LAMP 环境搭建指的是在 Linux 操作系统中分别安装 Apache 网页服务器、MySQL 数据库服务器和 PHP 开发服务器,以及一些对应的扩展软件。LAMP 环境是当前极为流行的搭建动态网站的开源软件系统,拥有良好的稳定性及兼容性。而且随着开源软件的蓬勃发展,越来越多的企业和个人选择在 LAMP 开发平台上搭建自己的网站。除了采用 LAMP 搭建环境还有其他的网站平台(如 Microsoft IIS 开发平台、Linux Nginx 开发平台、Google 开发平台等)。

    • LNMP 环境搭建指的是在 Linux 操作系统中分别安装 Nginx 网页服务器、MySQL 数据库服务器和 PHP 开发服务器,以及一些对应的扩展软件。在 LNMP 环境中,使用 Nginx 网页服务器取代了 Apache 网页服务器。Nginx 是一款高性能的 HTTP 网页服务器和反向代理服务器,它的执行效率极高,配置相比 Apache 也较为简单,所以在短时间内被国内外很多大型公司所采用。

    17.1 LAMP环境搭建的前期准备
    • 我们安装的是应用服务软件,这个软件是给外网用户访问和使用的,那么应该使用源码包安装,因为源码包安装的软件经过了本机编译,性能更好。所以我们的 LAMP 环境搭建,在生产服务器上一般采用源码包进行安装,而不会使用 RPM 包进行安装,接下来我们要讲的也是采用源码包方式搭建 LAMP 环境。

    • LAMP 环境搭建是较为复杂的 Linux 实验,在进行真正的环境安装之前,需要做一些细致的准备工作,以避免在安装过程中出现不必要的错误。我们需要进行的准备工作有以下几步。

    • LAMP 环境特点主要体现在以下五个方面:

      (1)成本低廉: 开源,可快速获得免费使用;
      (2)可定制: 拥有大量的额外组件和扩展功能模块,可以根据需要定制或者自行开发添加新功能;
      (3)易于开发: 代码简洁,与HTML语言结合度高,容易修改网页代码;
      (4)方便易用: PHP、Perl属于解释性语言,开发的程序不需要编译,可以直接移植使用;
      (5)安全和稳定: 开源优势,发现问题能够很快解决。

    17.1.1 获取源码包
    • RPM 包是在 CentOS 的安装光盘中保存的,但是源码包需要去互联网下载。我们此次完成 LAMP 环境搭建需要 19 个软件包,这是目前较为完善和常用的 LAMP 环境搭建方式。这些软件包的下载地址如表 1 所示。这些下载地址只是参考,如果有失效的,则请自行搜索。
    软件包说 明下载地址
    httpd-2.4.54.tar.gzApache 包http://www.apache.org/
    mysql-5.5.23.tar.gz或者是mysql-8.0.18-el7-x86_64.tar.gz两版本安装方式不同Mysql数据库http://dev.mysql.com/downloads/
    php-8.0.0.tar.gzPHP语言http://www.php.net/downloads.php
    phpMyAdmin-5.2.0-all-languages.tar.gzWeb方式的MySQL管理工具https://www.phpmyadmin.net/downloads/
    libxml2-2.9.12.tar.gz用来解析XML文档的函数库http://xmlsoft.org/sources/
    libmerypt-2.5.8.tar.gz加密算法扩展库http://prdownloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?use_mirror=peterhost
    mhash-0.9.9.9.tar.gz加密算法扩展库http://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/
    mcrypt-2-6.8-tar.gz加密算法扩展库http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/
    zlib-1.2.13.tar.gz数据压缩函数库http://www.zlib.net/
    gd-2.0.35.tar.gzPHP处理用形的扩展库https://bitbucket.org/libgd/gd-libgd/downloads
    freetype-2.3.5.tar.gz字体引擎库http://download.savannah.gnu.org/releases/freetype/
    libpng-1.6.38.tar.gz用于解码.png格式的图片https://sourceforge.net/projects/libpng/files/libpng16/1.6.38/libpng-1.6.38.tar.gz/download
    jpegsrc.v6b.tar.gz用于解码.jpg和.jpeg格式的图片http://www.ijg.org/files/jpegsrc.v6b.tar.gz
    apr-1.7.0.tar.gzApache支持镆块http://archive.apache.org/dist/apr/
    apr-util-1.6.1.tar.gzApache支持模块http://archive.apache.org/dist/apr/
    pcre-8.45.tar.gzApache支持模块,使Apache支持pcre正则表达式规则https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz/download
    ncurses.tar.gz使应用程序直接控制终端屏幕显示的函数库https://invisible-island.net/ncurses/#download_ncurses
    memcache-8.0.tgzmemcache函数库(客户端)http://pecl.php.net/package/memcache
    memcached-1.6.17.tar.gzmemcached服务器端http://www.memcached.org/files/memcached-1.6.17.tar.gz

    一般在计算机领域永远不是最新版本的软件就是最好的,新软件虽然有了更多的功能,但是这个软件并没有经过实际工作的检验,它不一定稳定,也有可能会有 Bug;反而版本较低的、但是经过足够的实践检验的软件会更受开发者的欢迎

    • Linux 就是这样的,CentOS 6.x 自 2011 年发布以来,经过多年的补充和完善,目前才逐渐得到个人使用者和企业使用者的认可。PHP 同样如此,目前 php-5.4.25.tar.gz 依然是使用最多的 PHP 版本,所以我们依然使用 php-5.4.25.tar.gz 来介绍 LAMP 环境的搭建。
    17.1.2 把软件包传送到Linux服务器上
    • 可以直接把软件包下载到 Linux 服务器上,也可以先下载到本地 Windows 中,再上传到 Linux 服务器中。如果是先下载到本地 Windows 中,再上传到 Linux 服务器中,那么需要利用网络文件服务器XFTP来进行数据的传输。其他文件服务有 FTP、Samba 或 NFS,使用方式大同小异。
    • 可以 在 Windows 中安装WinSCP,是使用 SFTP 协议向 Linux 服务器传递文件的工具。它的特点是使用简单、图形化操作,而且数据传递过程是加密的,较为安全,是 Windows 和 Linux 之间进行数据传递的常用软件。WinSCP 第一次启动的界面
      在这里插入图片描述
    • 在启动界面的“主机名”文本框中输入 Linux 服务器的 IP 地址,如 192.168.0.210,在“用户名”文本框中输入 Linux 的用户名,在“密码”文本框中输入正确的密码,单击“登录”按钮,就会见到如下界面:
      在这里插入图片描述
    • 在这个工具中,左半部分是 Windows 系统中的文件,右半部分是 Linux 服务器上的文件。如果需要从 Windows 向 Linux 传递什么文件,则只需找到这个文件或目录,从左半部分拖拽到右半部分即可;反过来就是从 Linux 传递文件到 Windows 中,非常简单。
    • 那么,我们应该把软件放置在 Linux 服务器的的 /usr/local/src/ 目录,该是系统默认的放置下载软件源代码的位置,所以我们就把搭建 LAMP 环境所需的所有软件包都传递到这个位置,传递完成后查看一下,如下:19 个软件包全部传递到 Linux 服务器中。
    [root@CncLucZK ~]# ll -h /usr/local/src
    total 378M
    -rw-r--r-- 1 root root 1.1M Nov  1 14:01 apr-1.7.0.tar.gz
    -rw-r--r-- 1 root root 542K Nov  1 14:01 apr-util-1.6.1.tar.gz
    -rw-r--r-- 1 root root 3.3M Nov  1 13:51 freetype-2.10.0.tar.gz
    -rw-r--r-- 1 root root 9.3M Nov  1 09:41 httpd-2.4.54.tar.gz
    -rw-r--r-- 1 root root 599K Nov  1 13:58 jpegsrc.v6b.tar.gz
    -rw-r--r-- 1 root root 2.3M Nov  1 13:48 libgd-2.1.1.tar.gz
    -rw-r--r-- 1 root root 1.3M Nov  1 13:38 libmcrypt-2.5.8.tar.gz
    -rw-r--r-- 1 root root 1.5M Nov  1 13:58 libpng-1.6.38.tar.gz
    -rw-r--r-- 1 root root 5.5M Nov  1 13:10 libxml2-2.9.12.tar.gz
    -rw-r--r-- 1 root root 461K Nov  1 13:46 mcrypt-2.6.8.tar.gz
    -rw-r--r-- 1 root root  77K Nov  1 14:12 memcache-8.0.tgz
    -rw-r--r-- 1 root root 1.7M Nov  1 14:10 memcached-1.6.17.tar.gz
    -rw-r--r-- 1 root root 910K Nov  1 13:44 mhash-0.9.9.9.tar.gz
    -rw-r--r-- 1 root root 312M Nov  1 14:27 mysql-8.0.31.tar.gz
    -rw-r--r-- 1 root root 3.5M Nov  1 14:18 ncurses.tar.gz
    -rw-r--r-- 1 root root 2.0M Nov  1 14:07 pcre-8.45.tar.gz
    -rw-r--r-- 1 root root  19M Nov  1 10:21 php-8.1.12.tar.gz
    -rw-r--r-- 1 root root  12M Nov  1 12:46 phpMyAdmin-5.2.0-all-languages.tar.gz
    -rw-r--r-- 1 root root 1.5M Nov  1 13:47 zlib-1.2.13.tar.gz
    [root@CncLucZK ~]# ll -h /usr/local/src | grep gz |wc -l
    19
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    17.1.3 安装编译工具
    • 源码安装需要经历步骤:配置(configure)、编译(make)、安装( make install )。
    • 源码包都是用 C 或 C++语言编写的,而且需要在本机编译之后才能正确安装。在 Linux 中,C 语言的编译器是 gcc,C++ 语言的编译器是 gcc-c++。在安装源码包之前,需要确认这两个编译器是否存在。命令如下:
    [root@CncLucZK ~]# rpm -q gcc
    gcc-8.2.1-3.5.el8.x86_64
    
    
    • 1
    • 2
    • 3
    • 可以看到,我们已经安装了 gcc 编译器,但是还没有安装 gcc-c++ 编译器。使用 yum 安装 gcc-c++ 编译器,命令如下:
    [root@CncLucZK ~]# yum -y install gcc-c++
    Installed:
      gcc-c++-8.5.0-4.el8_5.x86_64               libstdc++-devel-8.5.0-4.el8_5.x86_64              
    
    Complete!
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 如果 Linux 服务器可以正常连接互联网,那么这条 yum 命令是可以直接使用的,不用进行任何配置与修改。只是 yum 会去连接 CentOS 的官方服务器,这台服务器在国外,速度可能较慢。如果 Linux 服务器不能正常连接互联网,则也可以使用本地光盘作为 yum 源。安装完成后再查询一下,如下:
    [root@CncLucZK ~]# rpm -qa | grep  gcc
    gcc-8.5.0-4.el8_5.x86_64
    libgcc-8.5.0-4.el8_5.x86_64
    gcc-c++-8.5.0-4.el8_5.x86_64
    
    • 1
    • 2
    • 3
    • 4
    • gcc 和 gcc-c++ 编译器都已经安装了。大家可能发现这次查询的 gcc 是8.5.0版本,而上次查询的 gcc 是 8.2.1版本,那是因为使用网络 yum 源去 CentOS 的官方服务器上安装 gcc-c++,但是在安装 gcc-c++ 的时候,是需要 gcc 已经安装完成的。在 CentOS 的官方服务器上,gcc 和 gcc-c++ 的版本更高,所以在安装 gcc-c++ 的时候,自动更新了 gcc 的版本。不管怎么说,编译工具已经安装完成,我们可以进行下一步的准备工作了。
    17.1.4 关闭RPM包安装的apache和mysql
    • 在生产服务器上是不会既安装 RPM 包的 apache,又安装源码包的 apache 的。但是为了教学需要,有时需要安装这两种包的 apache。我们现在需要停用 RPM包安装的 apache 和 mysql,命令如下:
    #停止apache和mysql服务
    [root@CncLucZK ~]# service httpd stop
    Redirecting to /bin/systemctl stop httpd.service
    [root@CncLucZK ~]# service mysqld stop
    Redirecting to /bin/systemctl stop mysqld.service
    #关闭apache和mysql的自启动
    [root@CncLucZK ~]# chkconfig httpd off
    Note: Forwarding request to 'systemctl disable httpd.service'.
    [root@CncLucZK ~]# chkconfig mysqld off
    Note: Forwarding request to 'systemctl disable mysqld.service'.
    Removed /etc/systemd/system/multi-user.target.wants/mysqld.service.
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    17.1.5 关闭防火墙和SELinux
    • 在生产服务器上,防火墙是不能直接关闭的,而是需要设置防火墙允许 80 端口(apache)、3306 端口:(mysql)和 11211(memcache)端口访问的。但是目前我们还没有学习防火墙,所以只能暂时关闭它了

    方式1:关闭命令如下:

    [root@CncLucZK ~]# setup
    
    • 1
    • 在该界面中选择“防火墙配置”,进入防火墙配置界面。
      在这里插入图片描述
    • 在以下界面中,把“启用”前面的“*”去掉,选择“确定”保存,默认防火墙规则就会被关闭。
      在这里插入图片描述
      方式2:关闭防火墙命令
    [root@CncLucZK ~]#systemctl stop firewalld.service    #关闭防火墙
    
    • 1
    • 再查询一下防火墙规则:
    #默认filter表中的三条链中的规则都是空。防火墙已经被关闭了
    [root@CncLucZK ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 除关闭防火墙之外,我们还需要关闭 SELinux 安全子系统。因为这个子系统会对我们的安装过程产生影响,所以先关闭它。关闭命令如下:关闭 SELinux 之后,必须重启 Linux 系统,修改才会生效。
    [root@CncLucZK ~]# cat /etc/selinux/config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    # SELINUXTYPE= can take one of these three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes aed. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted
    
    #把 SELINUX=enforcing改为 SELINUX=disabled
    [root@CncLucZK ~]# shutdown -r now
    #重启Linux系统
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    或者执行此命令:

    [root@CncLucZK ~]#setenforce 0    #关闭selinux
    
    • 1
    17.1.6 关闭不必要的服务
    • 接下来需要关闭我们不需要的服务,这既是服务器的必须优化步骤,也会使我们在 LAMP 环境搭建过程中的报错可能性大大降低,所以建议大家进行这一步服务优化。具体方法就是使用 ntsysv 命令把不需要的服务前面的“*”去掉,然后重启 Linux 服务器。具体哪些服务是必须启动的,哪些服务是不必要的,大家可以参考《Linux常见服务类别及功能》
    17.1.7 批量解压源码包
    • 安装 17 个源码包,如果一个一个地解压缩实在太麻烦了,那么我们写一个小的 Shell 脚本,批量进行解压缩。命令如下:
    [root@CncLucZK src]# vi tar.sh
    #建立解压缩脚本
    #!/bin/bash
    #标是 Shell脚本
    cd /usr/local/src/
    #进入保存源码包的目录
    ls *.tar.gz >> /usr/local/src/ls.log
    #把所有以.tar .gz结尾的文件名覆盖写入ls.log文件
    ls *.tgz >> /usr/local/src/ls.log
    #把所有以.tgz结尾的文件名追加写入ls.log文件
    file=$(cat /usr/local/src/ls.log)
    #读取 Is.log 文件中的内容,赋子变量file
    for i in $file
    #for循环,每次德环把变量file中的一个文件名
        do
           tar -zxf $i
           #解压缩毎个压缩文件
        done
    rm -rf /usr/local/src/ls.log
    #删除临时文件ls.log
    #以上是脚本的内容
    [root@CncLucZK src]# chmod 755 tar.sh
    [root@CncLucZK src]# ll *.sh
    -rwxr-xr-x 1 root root 600 Nov  1 16:49 tar.sh
    #赋予tar.sh文件执行权限
    [root@CncLucZK src]. tar.sh
    #执行这个脚本
    
    • 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
    • 这样,所有的压缩包就已经完成了解压缩过程。
      在这里插入图片描述
    17.1.8 检查硬盘的剩余空间
    • LAMP 环境搭建大概需要 3GB 的空闲空间,所以确认一下硬盘的剩余空间,命令如下:
    [root@CncLucZK ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        902M     0  902M   0% /dev
    tmpfs           915M   40K  915M   1% /dev/shm
    tmpfs           915M  428K  915M   1% /run
    tmpfs           915M     0  915M   0% /sys/fs/cgroup
    /dev/vda1        50G  8.8G   39G  19% /
    tmpfs           183M     0  183M   0% /run/user/0
    “/”分区还有39GB的可用空间,足够使用了。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    17.1.9 linux的lib64库缺失处理
    • 在后续安装软件(源码包和rpm包)安装软件时,发现Linux库找不到或者库不正确时有两种方式处理:

    1.例如:在安装某源码包时发现找不到libssl.so.3的库,那先到/usr/lib64类库中查找是否有此类库:

    ...while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
    
    [root@CncLucZK ~]# cd /usr/lib64
    [root@CncLucZK lib64]# ll libssl.so.3
    
    #若是/usr/lib64没有,查看系统中是否有其他的libssl.so.3库
    #存在llibssl.so.3库,这种有可能是用了同一个库的软链接
    [root@CncLucZK lib64]# find / -name libssl.so.3
    /usr/local/openssl/lib64/libssl.so.3
    /usr/local/src/openssl-3.0.7/libssl.so.3
    
    #发现openssl安装包下有这个类库那么利用`ln -s`做个软链接即可,这时可能有多个不同版本的库,需要自己判断使用那个库
    [root@CncLucZK lib64]# ln -s /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.如果系统中不存其他的libssl.so.3库,可以在 https://pkgs.org/ 中搜索libssl
    在这里插入图片描述

    • 选择自己系统架构版本和软件版本,若发现没有自己系统的库(centos7、8、9、SUSE),但是可以看到这个类库属于openssl,na 重新搜索openssl开源包,这样即可找到属于自己系统的类库
      在这里插入图片描述
    • 例如选择openssl-devel-1.1.1k-4.el8.x86_64.rpm包,点击进去
      在这里插入图片描述
    • 之后利用yum命令自动安装这个package name包
    [root@CncLucZK lib64]# yun -y install 
    
    • 1
    • 待安装好后可以查看lib64是否有libssl.so.3,即使没有使用find命令查找系统中同名的libssl文件,存在其他库的话创建软链接

    参考文献:
    Linux LAMP环境搭建的前期准备

    下一篇:Linux学习-77-libxml2安装过程
  • 相关阅读:
    神经网络入门教程,现代神经网络教程
    ElementUI之动态树及书籍的分页查询
    24.java- File类的常用方法:遍历目录里的文件
    FPGA时序分析
    一文教你Kali信息收集
    @Builder注解有什么用?怎么用?
    华为云云耀云服务器L实例评测|企业项目最佳实践之docker部署及应用(七)
    2023 10月最新Vmd 下载安装教程,Windows&Linux
    【Javascript】构造函数的参数写法
    LeetCode算法心得——有序三元组中的最大值 II (简单的动规思想)
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/128193599