目录
一.LNMP简介
L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
LNMP 是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L 指 Linux,N指 Nginx,M一般指 MySQL,也可以指 MariaDB,P 一般指 PHP,也可以指 Perl 或 Python。
1.1LNMP架构的特点
LNMP架构是由Linux操作系统、Nginx Web服务器、MySQL数据库管理系统以及PHP编程语言组成的软件栈。这种架构因其高效、稳定和灵活的特点,在Web服务器领域得到了广泛应用。它的的主要特点有:
1. 高性能
- Nginx:作为Web服务器,Nginx以其高性能、高并发处理能力和低资源消耗而闻名。它采用事件驱动的异步架构,能够高效处理大量并发请求,适合高流量网站。
- PHP-FPM:PHP的FastCGI Process Manager(FPM)模式进一步提升了PHP的性能,使其能够更好地处理动态内容。
2. 低资源消耗
- Nginx:Nginx的轻量级设计使其在运行时占用较少的系统资源,相比传统的Apache服务器,Nginx在处理静态内容和反向代理方面表现更出色。
- Linux:作为操作系统,Linux以其稳定性和低资源消耗著称,适合作为服务器操作系统。
3. 高并发处理能力
- Nginx:Nginx能够有效处理高并发请求,适合需要处理大量用户请求的Web应用。
- MySQL:MySQL数据库在高并发环境下表现稳定,支持事务处理和数据一致性。
4. 易于扩展
- 模块化设计:Nginx和PHP都支持模块化设计,可以根据需要添加或移除功能模块,实现灵活扩展。
- 数据库扩展:MySQL支持主从复制、分片等扩展方式,满足不同规模应用的需求。
5. 开源免费
- 所有组件:Linux、Nginx、MySQL和PHP都是开源软件,用户可以免费使用和修改,降低了成本。
6. 良好的社区支持
- 庞大社区:LNMP组合拥有庞大的用户社区和丰富的文档资源,便于用户获取帮助和解决问题。
- 活跃开发:各个组件都有活跃的开发团队,不断推出新版本和功能更新。
7. 安全性
- 安全特性:Linux、Nginx、MySQL和PHP都提供了丰富的安全特性,如访问控制、数据加密、防火墙配置等,保障Web应用的安全性。
二.详细安装步骤
2.1MySQL安装
在Linux系统上安装MySQL有多种方法,包括使用Yum包管理器、编译安装、二进制安装和RPM安装。每种方法都有其特点和适用场景。这里我给大家介绍一下详细的安装步骤以及其适用特点:
2.1-1Yum安装
步骤:
-
配置yum源,保证你的yum源可用:
sudo yum update
-
添加MySQL的Yum仓库:
sudo yum install https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
-
安装MySQL:
sudo yum install mysql-community-server
-
启动MySQL服务:
sudo systemctl start mysqld
-
设置开机自启动:
sudo systemctl enable mysqld
-
查看MySQL服务状态(确保已经启动):
sudo systemctl status mysqld
-
获取初始密码(最后一行就是密码):
sudo grep 'temporary password' /var/log/mysqld.log
-
登录MySQL并修改密码:
#登录mysql mysql -u root -p'默认密码' #修改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
特点:
- 简单方便:使用Yum安装非常简单,适合初学者。
- 自动依赖管理:Yum会自动解决依赖关系,确保所有需要的组件都被安装。
- 系统集成:与系统服务管理工具(如systemd)集成良好,便于管理。
2.1-2 编译安装
步骤:
-
下载MySQL源码包:
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.23.tar.gz
-
解压源码包:
#解压 tar -zxvf mysql-8.0.23.tar.gz #进入解压目录 cd mysql-8.0.23
-
安装依赖包:
sudo yum install cmake gcc-c++ ncurses-devel openssl-devel
-
配置编译选项:
[root@mysql-server mysql-5.7.27]# cmake . \ #参数详解: -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ 安装目录 -DSYSCONFDIR=/etc \ 配置文件存放 (默认可以不安装配置文件) -DMYSQL_DATADIR=/usr/local/mysql/data \ 数据目录 错误日志文件也会在这个目录 -DINSTALL_MANDIR=/usr/share/man \ 帮助文档 -DMYSQL_TCP_PORT=3306 \ 默认端口 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ sock文件位置,用来做网络通信的,客户端连接服务器的时候用 -DDEFAULT_CHARSET=utf8 \ 默认字符集。字符集的支持,可以调 -DEXTRA_CHARSETS=all \ 扩展的字符集支持所有的 -DDEFAULT_COLLATION=utf8_general_ci \ 支持的 -DWITH_READLINE=1 \ 上下翻历史命令 -DWITH_SSL=system \ 使用私钥和证书登陆(公钥) 可以加密。 适用与长连接。坏处:速度慢 -DWITH_EMBEDDED_SERVER=1 \ 嵌入式数据库 -DENABLED_LOCAL_INFILE=1 \ 从本地倒入数据,不是备份和恢复。 -DWITH_INNOBASE_STORAGE_ENGINE=1 默认的存储引擎,支持外键
-
编译并安装:
sudo make && make install
-
初始化数据库:
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql #初始化完成后一定记得最后的密码
-
启动MySQL服务:
sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &
最后修改密码步骤都是一样的,根据上面的一样来就可
特点:
- 高度定制:可以根据需要配置编译选项,实现高度定制化。
- 灵活性:可以安装到任意目录,不受系统包管理器的限制。
- 复杂性:需要手动解决依赖关系,配置和编译过程较为复杂。
2.1-3二进制安装
步骤:
-
下载MySQL二进制包:
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
-
解压二进制包:
tar -xvf mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz sudo mv mysql-8.0.23-linux-glibc2.12-x86_64 /usr/local/mysql
-
创建MySQL用户和组:
#添加用户mysql sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql
-
初始化数据库:
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql
-
启动MySQL服务:
sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &
最后修改默认密码
特点:
- 预编译:二进制包是预编译的,安装过程相对简单。
- 灵活性:可以安装到任意目录,不受系统包管理器的限制。
- 性能优化:预编译的二进制包通常针对特定平台进行了优化。
2.1-4 RPM安装
步骤:
-
下载MySQL的RPM包:
wget https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
-
安装RPM包:
sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
-
安装MySQL:
sudo yum install mysql-community-server
-
启动MySQL服务:
sudo systemctl start mysqld
-
设置开机自启动:
sudo systemctl enable mysqld
特点:
- 系统集成:与系统包管理工具(如Yum)集成良好,便于管理。
- 自动依赖管理:RPM包会自动解决依赖关系,确保所有需要的组件都被安装。
- 简单方便:使用RPM安装非常简单,适合初学者。
2.2Nginx安装
2.2-1编译安装nginx
1.安装相关依赖包
[root@localhost ~]# yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel perl-devel perl-ExtUtils-Embed gd-devel
2.下载nginx安装包
[root@localhost ~]# wget https://nginx.org/download/nginx-1.16.0.tar.gz
3.创建 Nginx 运行用户
[root@localhost ~]# useradd -s /sbin/nologin -M nginx
4.解压配置 Nginx 编译
[root@localhost ~ ]# tar zxvf nginx-1.16.0.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/nginx-1.16.0/
[root@localhost nginx-1.16.0]# ./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--sbin-path=/usr/sbin/nginx \
--error-log-path=/var/log/nginx/nginx_error.log \
--http-log-path=/var/log/nginx/nginx_access.log \
--pid-path=/usr/local/nginx/run/nginx.pid
5.Nginx 编译安装
[root@localhost nginx]# make && make install
6.启动nginx
[root@localhost nginx-1.16.0]# /usr/sbin/nginx
7.查看状态并配置开机自启
#查看nginx服务状态
[root@localhost ~]# ps -ef | grep nginx
root 31469 1 0 23:11 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 31470 31469 0 23:11 ? 00:00:00 nginx: worker process
root 31554 1182 0 23:11 pts/0 00:00:00 grep --color=auto ngin
#配置开机自启
[root@localhost ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
2.2-2yum安装nginx
1. 更新Yum仓库
首先,确保你的Yum仓库是最新且可用的,以便获取最新的软件包信息:
sudo yum update
2. 添加Nginx的Yum仓库
Nginx官方提供了Yum仓库,需要先添加这个仓库到你的系统中。创建一个名为nginx.repo
的 文件:
sudo nano /etc/yum.repos.d/nginx.repo
编辑配置文件(vim /etc/yum.repos.d/nginx.repo):
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
3. 安装Nginx
添加了Nginx的Yum仓库后,使用Yum来安装Nginx:
sudo yum install nginx
4. 启动Nginx服务
安装完成后,启动Nginx服务:
sudo systemctl start nginx
5. 设置Nginx开机自启动
为了确保Nginx在系统重启后自动启动,你需要设置开机自启动:
sudo systemctl enable nginx
6. 查看Nginx服务状态
你可以查看Nginx服务的状态,确保它已经正常启动:
sudo systemctl status nginx
7. 配置防火墙
如果你的系统启用了防火墙,你需要允许HTTP和HTTPS流量通过防火墙。以下是使用firewalld
的命令:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
2.3验证Nginx安装
打开浏览器,访问你的服务器IP地址或域名,如果能看到Nginx的默认欢迎页面,表示Nginx已经成功安装并运行。
2.4PHP安装
2.4-1编译安装PHP
1.安装环境依赖包
#安装依赖包
[root@localhost ~]# yum -y install gcc gcc-c++ glibc automake autoconf libtool make
#安装依赖库
[root@localhost ~]#yum -y install libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel
2.下载源码包
[root@localhost ~]# wget https://www.php.net/distributions/php-7.3.6.tar.gz
3.编辑配置文件
[root@localhost ~]# tar xzvf php-7.3.6.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/php-7.3.6/
[root@localhost php-7.3.6 ]# ./configure \
--prefix=/usr/local/php7 # 配置安装目录
--with-config-file-path=/usr/local/php7 # 配置文件 php.ini 的路径
--enable-sockets # 开启 socket
--enable-fpm # 启用 fpm 扩展
--enable-cli # 启用 命令行模式 (从 php 4.3.0 之后这个模块默认开启所以可以不用再加此命令)
--enable-mbstring # 启用 mbstring 库
--enable-pcntl # 启用 pcntl (仅 CLI / CGI)
--enable-soap # 启用 soap
--enable-opcache # 开启 opcache 缓存
--disable-fileinfo # 禁用 fileinfo (由于 5.3+ 之后已经不再持续维护了,但默认是开启的,所以还是禁止了吧)(1G以下内存服务器直接关了吧)
--disable-rpath # 禁用在搜索路径中传递其他运行库。
--with-mysqli # 启用 mysqli 扩展
--with-pdo-mysql # 启用 pdo 扩展
--with-iconv-dir # 启用 XMLRPC-EPI 字符编码转换 扩展
--with-openssl # 启用 openssl 扩展 (需要 openssl openssl-devel)
--with-fpm-user=nginx # 设定 fpm 所属的用户
--with-fpm-group=nginx # 设定 fpm 所属的组别
--with-curl # 启用 curl 扩展
--with-mhash # 开启 mhash 基于离散数学原理的不可逆向的php加密方式扩展库
# GD
--with-gd # 启用 GD 图片操作 扩展
--with-jpeg-dir # 开启对 jpeg 图片的支持 (需要 libjpeg)
--with-png-dir # 开启对 png 图片支持 (需要 libpng)
--with-freetype-dir # 开启 freetype
# xml
--enable-simplexml # 启用对 simplexml 支持
--with-libxml-dir # 启用对 libxml2 支持
--enable-debug # 开启 debug 模式
4.编译安装(30分钟左右)
make && make install
5.配置php-fpm
#1.创建 php.ini 配置文件
[root@localhost php-7.3.6]# cp php.ini-production /usr/local/php7/etc/php.ini
[root@localhost php-7.3.6]# vim /usr/local/php7/etc/php.ini +1371 #php的Session存储目录
1371 session.save_path = "/tmp" #将注释打开
#2.设置php-fpm配置文件
[root@qfedu.com php-7.3.6]# cd /usr/local/php7/etc
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# vim php-fpm.conf +17
pid = /var/run/php-fpm.pid #将注释取消并修改
# php-fpm连接文件
[root@localhost etc]# cd /usr/local/php7/etc/php-fpm.d/
[root@localhost php-fpm.d]# cp www.conf.default www.conf
[root@localhost php-fpm.d]# vim www.conf
user = nginx
group = nginx
listen = 127.0.0.1:9000
#3.启动php-fpm
[root@localhost php-fpm.d]# /usr/local/php7/sbin/php-fpm
#4.查看是否启动
[root@localhost php-fpm.d]# ps aux | grep php-fpm
#5.配置与重新载入环境变量
[root@localhost ~]# vim /etc/profile
export PHP_HOME=/usr/local/php7
export PATH=$PATH:$PHP_HOME/bin:$PHP_HOME/sbin
[root@localhost ~]# source /etc/profile
6.配置php-fpm开机自启
[root@localhost ~]# vim /lib/systemd/system/php-fpm.service
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
[root@localhost ~]# systemctl enable php-fpm.service
2.4-2yum安装PHP
1. 更新Yum仓库
确保Yum仓库是最新的,不再过多缀述:
sudo yum update
2. 安装EPEL和Remi仓库
PHP的某些版本和扩展可能不在默认的Yum仓库中,需要添加EPEL和Remi仓库。EPEL提供了许多额外的软件包,而Remi仓库提供了最新版本的PHP。
安装EPEL源:
sudo yum install epel-release
安装Remi源:
sudo yum install yum-utils
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
3. 启用Remi仓库中的PHP模块
Remi仓库中有多个PHP版本,需要启用你想要安装的PHP版本。例如,启用PHP 7.4版本:
sudo yum-config-manager --enable remi-php74
CopyInsert
4. 安装PHP
启用Remi仓库中的PHP模块后,就可以使用Yum来安装PHP及其常用扩展:
sudo yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-pear php-gd php-mbstring php-curl php-xml php-xmlrpc php-soap php-intl php-zip
5. 启动PHP-FPM服务
启动并设置开机自启动:
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
6. 查看PHP版本
安装完成后,查看PHP的版本,确保安装成功:
php -v
2.5 Nginx 配置支持PHP
2.5-1添加 Nginx 配置
[root@localhost ~]# cd /etc/nginx/
[root@localhost nginx]# vim nginx.conf
#配置如下
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
location ~ \.php$
{
include fastcgi_params; #指定nginx连接php-fpm的常量
fastcgi_pass 127.0.0.1:9000; #连接php-fpm的地址和端口
fastcgi_index index.php; #指定默认页面
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #指定站点根目录
}
}
2.5-2添加 php 探测文件
[root@localhost nginx]# cd /usr/local/nginx/html/
[root@locolhost html]# vim index.php
<?php
phpinfo();
?>
2.5-3验证 Nginx 关联 php-fpm
[root@localhost html]# systemctl restart php-fpm.service
[root@localhost ~]# ps -ef|grep php-fpm
root 69652 1 0 14:02 ? 00:00:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
nginx 69653 69652 0 14:02 ? 00:00:00 php-fpm: pool www
nginx 69654 69652 0 14:02 ? 00:00:00 php-fpm: pool www
nginx 69655 69652 0 14:02 ? 00:00:00 php-fpm: pool www
nginx 69656 69652 0 14:02 ? 00:00:00 php-fpm: pool www
nginx 69657 69652 0 14:02 ? 00:00:00 php-fpm: pool www
重新载入配置:
[root@localhost html]# systemctl restart nginx
[root@localhost html]# systemctl status nginx
2.6访问网页验证
输入你的服务器IP地址+index.php
如图所示:
如果显示该页面表示LNMP环境至此配置成功!