一、部署总概:LNMP代表Linux、Nginx、MySQL和PHP(或Perl、Python等其他编程语言),是一种常用的服务器架构,尤其在Web开发中广泛使用。它结合了优秀的开源软件,提供了高性能、高稳定性和高灵活性的特点。
二、LNMP优点:
1、性能优异:Nginx作为Web服务器具有高性能和高并发处理能力。
2、稳定可靠:Linux作为操作系统对稳定性有保证,MySQL/MariaDB作为数据库管理系统也很稳定。
3、可扩展性:LNMP平台支持横向扩展,可以通过增加服务器节点和负载均衡来提高系统的性能和可用性。
4、社区支持:LNMP平台的每个组件都有庞大的开发者社区,提供了大量的文档、插件和技术支持。
三、实验环境:实验需要三台主机,分别做nginx服务器、mysql服务器、php服务器,为了方便实验进行,分别将三台主机进行命名;保证外网和内网通信后,关闭防火墙和selinux(访问控制安全策略)等,保证实验环境。
[root@localhost network-scripts]# systemctl disable --now firewall.service
Failed to execute operation: No such file or directory
[root@localhost network-scripts]# systemctl disable --now firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost network-scripts]# setenforce 0
[root@localhost network-scripts]# hostname nginx
[root@localhost network-scripts]# bash
四、各服务器配置:
1、安装配置nginx服务器
- 配置yum源
[root@nginx ~]# yum install -y epel-release
BDB2053 Freeing read locks for locker 0x692: 2744/139775846078272
BDB2053 Freeing read locks for locker 0x694: 2744/139775846078272
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
正在解决依赖关系
- 安装nginx
[root@nginx ~]# yum install -y nginx
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 9.2 kB 00:00
* base: mirrors.tuna.tsinghua.edu.cn
* epel: ftp.riken.jp
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.tuna.tsinghua.edu.cn
epel | 4.3 kB 00:00
- 配置nginx实现文件解析:
拷贝nginx中,配置说明文件中关于php的配置内容
[root@nginx ~]# cd /etc/nginx
[root@nginx nginx]# cat nginx.conf.default
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
在nginx的配置目录里面新建一个.conf结尾的文件,将拷贝的配置文件复制进去,并进行相应的修改,保证nginx服务器在被客户端访问的时候,直接转到php服务器
[root@nginx nginx]# cd default.d/
[root@nginx default.d]# ls
[root@nginx default.d]# vim php.conf
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 192.168.201.8:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
#启动并测试nginx
[root@nginx default.d]# systemctl enable --now nginx
[root@nginx default.d]# netstat -anptu |grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 60878/nginx: master
tcp6 0 0 :::80 :::* LISTEN 60878/nginx: master
在nginx服务配置文件中更改配置文件,保证客户端访问过来时,会去向一个默认页面。
[root@nginx default.d]# cd ..
[root@nginx nginx]# vim nginx.conf
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
index index.php;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
[root@nginx default.d]# systemctl restart nginx #重启保证配置生效
- 安装配置php服务器
- 安装yum源,由于依赖关系,先装epel-relese源,在安装所需yum源包(在安装yum源包时,如无法解析,可以先将yum包下载下来,拷贝到服务器中安装)。
[root@php ~]# yum install -y epel-release
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
[root@php wE6RU1]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
警告:webtatic-release(1).rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 62e74ca5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:webtatic-release-7-3 ################################# [100%]
(2)安装php所需组件,例如php72w-mysql组件在php中作用就是提供与mysql数据库的连接,pcre-devel组件在php中的作用就是提供正则表达功能(在这里我安装pcre-devel组件时,遇到一个仓库问题,可以通过临时修改/etc/yum.repos.d/webtatic.repo文件,禁用webtatic库解决--只需要注释掉文件中webtatic组)。
[root@php ~]# yum install -y pcre-devel
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 7.2 kB 00:00
* base: mirrors.nju.edu.cn
* epel: repo.jing.rocks
* extras: mirrors.nju.edu.cn
* updates: mirrors.nju.edu.cn
base | 3.6 kB 00:00
·安装各组件过程中,可能会出现一些无法解决的临时问题,例如网络不稳定等,此时可以根据里面的链接路径先下载下来,使用rpm命令逐步安装各组件。
[root@php ~]# yum install -y php72w php72w-cli php72w-common php72w-devel php72w-mysql php72w-fpm
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* epel: ftp.iij.ad.jp
* extras: ftp.sjtu.edu.cn
* updates: ftp.sjtu.edu.cn
[root@php ~]# '//tmp/VMwareDnD/Uf050y/php72w-cli-7.2.34-1.w7.x86_64.rpm' ^C
[root@php ~]# rpm -Uvh /tmp/VMwareDnD/Uf050y/php72w-cli-7.2.34-1.w7.x86_64.rpm
警告:/tmp/VMwareDnD/Uf050y/php72w-cli-7.2.34-1.w7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID 62e74ca5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:php72w-cli-7.2.34-1.w7 ################################# [100%]
(3)验证安装
[root@php ~]# rpm -qa |grep php
php72w-cli-7.2.34-1.w7.x86_64
php72w-pdo-7.2.34-1.w7.x86_64
php72w-devel-7.2.34-1.w7.x86_64
mod_php72w-7.2.34-1.w7.x86_64
php72w-mysql-7.2.34-1.w7.x86_64
php72w-fpm-7.2.34-1.w7.x86_64
php72w-common-7.2.34-1.w7.x86_64
(4)配置php服务器连接nginx的配置
修改php配置文件listen监听接口为本机地址,listen.allowed_clients连接接口为nginx服务器地址,此接口可以是多个,但只能在后面以逗号连接每个地址
[root@php ~]# cd /etc/php-fpm.d/
[root@php php-fpm.d]# vim www.conf
listen = 192.168.201.8:9000
listen.allowed_clients = 192.168.201.6
启动php服务,建立nginx访问目录(注意此目录需同nginx的访问目录)
[root@php ~]# systemctl restart php-fpm.service
[root@php ~]# mkdir -p /usr/share/nginx/html
[root@php ~]# cd /usr/share/nginx/html/
[root@php html]# ls
[root@php html]# vim index.php #写入测试代码,测试函数能否被正确解析
<?php
phpinfo();
?>
解析得以下页面
(5)配置php服务器连接mysql服务器的配置
在nginx访问位置写入连接mysql的脚本,其中调用了php72w-mysql组件中的连接函数和关闭连接函数(nginx服务器里面不必有同路径的文件,因为在客户端访问中,会标记该文件路径)
[root@php html]# vim conn_mysql.php
<?php
$conn = mysqli_connect('192.168.201.7','discuz','Qas@123!!!!!');
if ($conn) {
echo "ok";
} else {
echo "no ok";
}
mysqli_close($conn);
?>
[root@php html]# ls
conn_mysql.php index.php
- 部署php上的discuz应用,同时,在nginx服务器上面部署相同流程的discuz软件文件,保证访问nginx服务器能同步到php服务器上面。
导入并解压discuz软件文件
[root@php html]# '//tmp/VMwareDnD/CcJY5R/Discuz_X3.5_SC_UTF8_20240520.zip' ^C
[root@php html]# mv /tmp/VMwareDnD/CcJY5R/Discuz_X3.5_SC_UTF8_20240520.zip ./
[root@php html]# ls
conn_mysql.php Discuz_X3.5_SC_UTF8_20240520.zip index.php
[root@php html]# mkdir discuz
[root@php html]# mv Discuz_X3.5_SC_UTF8_20240520.zip ./discuz/
[root@php html]# cd discuz/
[root@php discuz]# unzip Discuz_X3.5_SC_UTF8_20240520.zip
Archive: Discuz_X3.5_SC_UTF8_20240520.zip
inflating: LICENSE
inflating: qqqun.png
creating: readme/
便于管理对discuz文件进行移动、赋权。
[root@php discuz]# mv upload/ ../
[root@php discuz]# cd ..
[root@php html]# ls
conn_mysql.php discuz index.php upload
[root@php html]# chmod -R 777 upload/
- 安装配置mysql服务器
- 配置yum源,注意这里为了保证各服务器组件之间的匹配,需要更改mysql安装的yum源,安装5.7版本。
[root@mysql ~]# rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
获取https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
警告:/var/tmp/rpm-tmp.r5CT4V: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql80-community-release-el7-3 ################################# [100%]
[root@mysql ~]# cd /etc/yum.repos.d/
[root@mysql yum.repos.d]# ls
CentOS-Base.repo CentOS-Media.repo mysql-community.repo
CentOS-CR.repo CentOS-Sources.repo mysql-community-source.repo
CentOS-Debuginfo.repo CentOS-Vault.repo
CentOS-fasttrack.repo CentOS-x86_64-kernel.repo
[root@mysql yum.repos.d]# vim mysql-community.repo
# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
- 安装mysql(和服务器交互的工具)和mysql-server(服务器本身)
[root@mysql yum.repos.d]# yum install -y mysql mysql-server
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包 mysql-community-client-5.7.44-1.el7.x86_64 已安装并且是最新版本
正在解决依赖关系
- 配置mysql服务
启动mysql服务,查看管理员root用户的初始密码,更改其初始密码,进行登录
[root@mysql ~]# systemctl enable --now mysqld
[root@mysql ~]# cat /var/log/mysqld.log |grep password
2024-06-23T07:07:39.434101Z 1 [Note] A temporary password is generated for root@localhost: c,l56KDYdMpd
[root@mysql ~]# mysqladmin -uroot -p password 'Qas@123!!!!!'
Enter password:
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@mysql ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
新建discuz用户和discuz库,并赋予此用户的所有权利,同时定义此用户可以从哪些网址进行登录,后面是跟的密码
mysql> grant all on discuz.* to discuz@'192.168.201.%' identified by 'Qas@123!!!!!';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
五、客户端测试,安装数据库。