在Centos8/RHEL8中部署LNMP环境

LNMP环境

它指的是L(Linux系统)N(Nginx)M(Mysql)P(Php)

本次的环境使用的是阿里云的在线实验(在线实验链接):
https://developer.aliyun.com/adc/scenario/1295050220a64cb193d1cf3d810c9c8b?spm=a2c6h.14164896.0.0.4d1670bdKKE8SF

准备

  • 使用xshell7(学生版)链接实验的实例
  • 使用xftp7(学生版)为实验实例上传文件
  • 准备一段php代码用以测试环境

第一步,CentOS 8切换源

  • 因为centos8已经停止维护了,所以使用阿里云的镜像站

    1、执行以下命令,备份之前的repo文件。

    1
    rename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo

    2、执行以下命令,下载最新的repo文件。

    1
    2
    wget https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo -O /etc/yum.repos.d/Centos-vault-8.5.2111.repo
    wget https://mirrors.aliyun.com/repo/epel-archive-8.repo -O /etc/yum.repos.d/epel-archive-8.repo

    3、执行以下命令,替换repo文件中的链接。

    1
    2
    sed -i 's/mirrors.cloud.aliyuncs.com/url_tmp/g'  /etc/yum.repos.d/Centos-vault-8.5.2111.repo &&  sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/url_tmp/mirrors.aliyun.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo
    sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/epel-archive-8.repo

    4、执行以下命令,重新创建缓存。

    1
    yum clean all && yum makecache

    5、执行以下命令,查看repo文件。

    1
    yum clean all && yum makecache
    结果如下:
    test

    6、执行以下命令,删除之前备份的repo文件。

    说明 后续步骤中我们将为切换后的CentOS8的repo文件进行重命名,以防冲突需将其删除。如果只有两个repo文件则不需要进行删除
    1
    rm -rf /etc/yum.repos.d/!(*.repo)

    7、删除之后,执行以下命令进行查询。

    1
    rm -rf /etc/yum.repos.d/!(*.repo)
    结果如下:
    test

第二步,准备编译环境

因为在测试和安装中的服务会被防火墙拦截,因此先关闭防火墙,环境搭建完毕会重新打开防火墙

1、关闭防火墙。

  • 执行如下命令,查看当前防火墙的状态。
    1
    systemctl status firewalld

返回结果如下,您可查看到当前防火墙的状态

说明 如果防火墙的状态参数是inactive,则防火墙为关闭状态。如果防火墙的状态参数是active,则防火墙为开启状态。

test

2. 关闭防火墙。如果防火墙为关闭状态可以忽略此步骤。

  • a.如下命令,关闭防火墙。
    1
    systemctl stop firewalld
  • b.执行如下命令,实例开机时,禁止启动防火墙服务。
    1
    systemctl disable firewalld

第三步, 安装Nginx

1、执行如下命令,安装Nginx。

1
dnf -y install http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.16.1-1.el8.ngx.x86_64.rpm

test

2、执行如下命令,查看Nginx版本。

1
nginx -v

返回结果如下,表示Nginx安装成功。
test

第四步,安装MySQL

1、执行如下命令,安装MySQL。

1
dnf -y install @mysql

2、执行如下命令,查看MySQL版本。

1
mysql -V

返回结果如图所示,表示MySQL安装成功。
test

第五步,安装PHP

1、执行如下命令,添加并更新epel源。

1
2
dnf -y install epel-release
dnf -y update epel-release

2、执行以下命令,删除缓存的无用软件包并更新软件源。

1
2
dnf clean all
dnf makecache

3、执行以下命令,启用php:7.3模块。

  • 说明 本示例使用php:7.3版本。如果您需要使用PHP 7.4版本,需要先安装remi源。remi源安装命令为dnf -y install
    1
    dnf -y module enable php:7.3

4、执行以下命令,安装PHP相应的模块。

1
dnf -y install php php-curl php-dom php-exif php-fileinfo php-fpm php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml libsodium

返回结果如下,表示安装成功。
test

第六步,配置Nginx

先尝试开启nginx服务

1
systemctl start nginx

如果没有报错你可以继续做如果报了以下的错误重新安装就行
p94TqbD.md.jpg
卸载命令
1
dnf remove nginx

安装命令
1
dnf -y install http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.16.1-1.el8.ngx.x86_64.rpm

现在你的nginx能够正常开启,接下来需要对nginx的配置做修改

1、执行如下命令,查看Nginx配置文件的默认路径。

1
cat /etc/nginx/nginx.conf

http大括号内,查看include配置项。即配置文件的默认路径。
test

2、执行如下命令,在配置文件的默认路径下,备份默认配置文件。

1
2
cd /etc/nginx/conf.d
cp default.conf default.conf.bak

3、修改默认配置文件。

  • a.执行如下命令,打开默认配置文件。
    1
    vi default.conf
  • b.按i进入编辑模式。
  • c.在location大括号内,修改以下内容。
    1
    2
    3
    4
    5
    6
    location / {
    #将该路径替换为您的网站根目录。
    root /usr/share/nginx/html;
    #添加默认首页信息index.php。
    index index.html index.htm index.php;
    }
    修改后如图:
    test
  • d.去掉被注释的 location ~ .php$ 大括号内容前的 # ,并修改大括号的内容。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    location ~ \.php$ {
    #将该路径替换为您的网站根目录。
    root /usr/share/nginx/html;
    #Nginx通过unix套接字与PHP-FPM建立联系,该配置与/etc/php-fpm.d/www.conf文件内的listen配置一致。
    fastcgi_pass unix:/run/php-fpm/www.sock;
    fastcgi_index index.php;
    #将/scripts$fastcgi_script_name修改为$document_root$fastcgi_script_name。
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    #Nginx调用fastcgi接口处理PHP请求。
    include fastcgi_params;
    }

    修改完成如下所示。
    test

  • e.按下Esc键后,输入:wq并回车以保存关闭配置文件。

  • f.执行以下命令,启动Nginx服务。
    1
    systemctl start nginx 

    5、执行一下命令,设置Nginx服务开机自启动。

    1
    systemctl enable nginx

第七步,配置MySQL

1.执行如下命令,启动MySQL,并设置为开机自启动。

1
systemctl enable --now mysqld

2.执行如下命令,查看MySQL是否已启动。

1
systemctl status mysqld

查看返回结果中Active: active (running)表示已启动。

3.执行下命令,执行MySQL安全性操作并设置密码。

1
mysql_secure_installation

1.输入Y并回车开始相关配置。

2.选择密码验证策略强度,输入2并回车。

3.设置MySQL的新密码并确认。本示例设置密码PASSword123!。

4.输入Y并回车继续使用提供的密码。

5.输入Y并回车移除匿名用户。

6.输入Y并回车移除匿名用户。

7.入Y并回车删除test库以及对test库的访问权限。

8.输入Y并回车重新加载授权表。

第八步,配置PHP

1.修改PHP配置文件。

  • a.执行如下命令,打开配置文件。
    1
    vi /etc/php-fpm.d/www.conf
  • b.按i编辑
  • c.找到user = apache和group = apache,将apache修改为nginx。
    1
    /user   #vim搜索命令
  • d.按Esc键后,输入:wq并回车,保存关闭配置文件。
  • e.新建并编辑phpinfo.php文件,用于展示PHP信息。
  • f.执行以下命令,新建phpinfo.php文件。
    1
    vim <网站根目录>/phpinfo.php
    <网站根目录>是您在nginx.conf配置文件中location ~ .php$大括号内,配置的root参数值,如下图所示。

    本文配置的网站根目录为/usr/share/nginx/html,因此需要运行以下命令新建phpinfo.php文件。
    1
    vim /usr/share/nginx/html/phpinfo.php
  • b.按i进入编辑模式。
  • c.输入下列内容,函数phpinfo()​会展示PHP的所有配置信息。
    1
    <?php echo phpinfo(); ?>
  • d.按Esc键后,输入:wq并回车,保存关闭配置文件。
  • e.执行以下命令,启动PHP-FPM
    1
    systemctl start php-fpm

    2、执行以下命令,设置PHP-FPM开机自启动。

    1
    systemctl enable php-fpm

第九步,测试

1、在您的本机浏览器中,打开新页签,在地址栏输入http:///phpinfo.php。

说明 您需要将替换为云产品资源列表中的ECS公网地址。

返回结果如下图所示,表示LNMP环境部署成功。

第十步,收尾

还记得我们在开始的时候把防火墙关掉了吗?,我们现在来开启防火墙

1
systemctl start firewalld

  • 但是开启防火墙,可以看到,我们之前搭建好的网页现在无法响应就像这样

现在我们为nginx,mysql等服务,允许他们经过防火墙,我们需要放行80-http,443-https,3306-mysql端口

1
2
3
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent

现在我们操作完毕的,但是返回到浏览器还是无法访问,此时我们需要重启一下防火墙即可

1
systemctl restart firewalld

现在就能正常访问我们的网页了

第十一步,使用python连接数据库测试mysql是否可用

为了能让python正常获取数据库中的数据我们先使用命令连上数据库创建一个数据库

1
mysql -uroot -p

密码还记得吗,我们在之前也配置过,密码是PASSword123!

  • 现在我们创建一个learn的数据库,并用use进入数据库

    1
    2
    mysql>create database learn;
    mysql>use learn;
  • 现在我们再建一张名为goods的表,让它存储不同类型的商品,建表语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `goods` (
    `id` int NOT NULL AUTO_INCREMENT,
    `type` varchar(30) NOT NULL,
    `name` varchar(30) DEFAULT NULL,
    `price` decimal(7,2) unsigned DEFAULT NULL,
    `num` int DEFAULT '0',
    `add_time` datetime DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `name` (`name`)
    ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  • 使用desc查看表结构

    1
    desc goods;
  • insert into 插入一条数据

    1
    insert into goods values(1,'书籍','心灵鸡汤',59.98,100,now());
  • select查询一下表的内容

    1
    select * from goods;
  • \q退出

    1
    \q

    效果如下:

接下来使用python3.9来连接

  • 安装python3.9

    1
    dnf install python3.9 -y
  • 安装pymysql,用来连接数据库

    1
    pip3.9 install pymysql
  • 控制台数据python3.9进入python命令行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [root@iZuf6bdol74ybrk0rc88xnZ ~]# python3.9
    Python 3.9.6 (default, Aug 25 2021, 16:22:38)
    [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pymysql
    >>> db=pymysql.connect(host="localhost",port=3306,user='root',password="PASSword123!",database='learn') #创建连接
    >>> cursor=db.cursor() #指针
    >>> sql='select * from goods;' #sql语句,查询语句
    >>> cursor.execute(sql) #1为成功执行了一条sql语句
    1
    >>> print(cursor.fetchall()) #打印查询结果
    ((1, '书籍', '心灵鸡汤', Decimal('59.98'), 100, datetime.datetime(2023, 5, 20, 11, 7, 39)),)
    >>> exit() #退出python
    效果如下:
    p94bo2n.md.png

教程到此就结束了,相信你已经具备自己部署LNMP环境的能力了,恭喜你!