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.phpphpMyAdmin-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=peterhostmhash-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/downloadsfreetype-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/downloadjpegsrc.v6b.tar.gz用于解码.jpg和.jpeg格式的图片http://www.ijg.org/files/jpegsrc.v6b.tar.gzapr-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/downloadncurses.tar.gz使应用程序直接控制终端屏幕显示的函数库https://invisible-island.net/ncurses/#download_ncursesmemcache-8.0.tgzmemcache函数库(客户端)http://pecl.php.net/package/memcachememcached-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

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

可以看到,我们已经安装了 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!

如果 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

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.

17.1.5 关闭防火墙和SELinux

在生产服务器上,防火墙是不能直接关闭的,而是需要设置防火墙允许 80 端口(apache)、3306 端口:(mysql)和 11211(memcache)端口访问的。但是目前我们还没有学习防火墙,所以只能暂时关闭它了

方式1:关闭命令如下:

[root@CncLucZK ~]# setup

在该界面中选择“防火墙配置”,进入防火墙配置界面。 在以下界面中,把“启用”前面的“*”去掉,选择“确定”保存,默认防火墙规则就会被关闭。 方式2:关闭防火墙命令

[root@CncLucZK ~]#systemctl stop firewalld.service #关闭防火墙

再查询一下防火墙规则:

#默认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

除关闭防火墙之外,我们还需要关闭 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系统

或者执行此命令:

[root@CncLucZK ~]#setenforce 0 #关闭selinux

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

#执行这个脚本

这样,所有的压缩包就已经完成了解压缩过程。

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的可用空间,足够使用了。

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

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

待安装好后可以查看lib64是否有libssl.so.3,即使没有使用find命令查找系统中同名的libssl文件,存在其他库的话创建软链接

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

下一篇:Linux学习-77-libxml2安装过程

查看原文