LNMP架构部署

LNMP架构部署

简介

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

LNMP的特性

Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler 站点开发的,已经在一些俄罗斯的大型网站上运行多年,相当的稳定。Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。

  • 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
  • 作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多。
  • 作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。
  • Nginx 安装非常的简单:配置文件非常简洁(还能够支持perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。

LNMP工作原理

LAMP = Linux + Apache + MySQL +PHP
如下图:
在这里插入图片描述

FastCGI : 一句话来说的话就是 Http服务器和动态脚本语言实现高速通信的接口。FastCGI 是 C/S结构,可以将http服务器和脚本解析服务器分离开,同时在脚本解析服务器上开启一个或多个解析守护进程。这样可以使http服务器专注于处理静态请求,遇到".php"之类的动态请求直接通过FastCGI 往脚本解析服务器扔,极大的提高了系统的性能。

在这可能有一个概念不太清楚,什么是守护进程?
守护进程就是一个特殊的进程,这个进程特殊在哪里呢?一般的进程都需要终端去控制,而守护进程却是独立于终端的 ,一般来说系统启动的时候守护进程就启动了,直到系统关机。当然如果认为的强制干预的话,也是能关闭它的。守护进程会按照周期性去执行某个任务或着等待处理将会发生的某个任务。比如httpd、mysqld之类的,就是守护进程。
Nginx + php-fpm:

php-fpm 是动态解析服务器,Nginx 作为 http 服务器。
Nginx 本身来说是不支持解析PHP的,终端对PHP的页面请求将会被 Nginx 交给FastCGI监听的IP端口,由php-fpm处理,最后将处理结果返还给Nginx。这个过程中,Nginx仅仅是作为反向代理服务器,通过反向代理功能,将动态请求交给后端的php-fpm处理,实现对PHP请求的解析。

Nginx不支持对外部程序的调用或解析。所有的外部程序(包括PHP)必须有FastCGI接口来调用。FastCGI在linux中是一个socket(ip socket 或 文件 socket),调用CGI还需要FastCGI的wrapper(可以理解成一个程序,用来启动其他程序),这个wrapper绑定在某个固定的socket上。当Nginx将CGI请求发给socket时,通过FastCGI接口,wrapper就收到请求,然后wrapper会fork(派生)出一个新的线程,用来调用外部程序解释器或脚本来处理请求,并读取返回数据,然后wrapper将返回的数据通过FastCGI接口,通过固定的socket,将数据返回给Nginx,返回给客户端。

LNMP部署

环境说明:

主机名ip
lnmp192.168.58.20

1.关闭防火墙

[root@lnmp ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@lnmp ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@lnmp ~]# setenforce 0

2.安装nginx

//创建系统用户nginx
[root@lnmp ~]# useradd -r -M -s /sbin/nologin nginx

//安装依赖环境
[root@lnmp ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make
[root@lnmp ~]# yum -y groups mark install 'Development Tools'

//创建日志存放目录
[root@lnmp ~]#  mkdir -p /var/log/nginx
[root@lnmp ~]# chown -R nginx.nginx /var/log/nginx

//编译安装nginx
[root@lnmp ~]# cd /usr/src/
[root@lnmp src]# ls
debug    mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz  php-8.0.10.tar.xz
kernels  nginx-1.20.1.tar.gz
[root@lnmp src]# tar xf nginx-1.20.1.tar.gz 
[root@lnmp src]# cd nginx-1.20.1
[root@lnmp nginx-1.20.1]#./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log
[root@lnmp nginx-1.20.1]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install

//配置环境变量
[root@lnmp ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@lnmp ~]# source /etc/profile.d/nginx.sh

启动nginx
[root@lnmp ~]# nginx
[root@lnmp ~]# ss -antl
State      Recv-Q     Send-Q          Local Address:Port           Peer Address:Port     
LISTEN     0          128                   0.0.0.0:80                  0.0.0.0:*        
LISTEN     0          128                   0.0.0.0:22                  0.0.0.0:*        
LISTEN     0          128                      [::]:22                     [::]:*    


配置service文件

[root@lnmp ~]# cat /usr/lib/systemd/system/nginx.service 
[Unit]
Description=nginx-The High-performance HTTP Server              
After=network.target remote-fs.target nss-lookup.target         

[Service]
Type=forking            
PIDFile=/usr/local/nginx/logs/nginx.pid 
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf 
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf       
ExecReload=/usr/local/nginx/sbin/nginx -s reload        
ExecStop=/usr/local/nginx/sbin/nginx -s stop                
ExecQuit=/usr/local/nginx/sbin/nginx -s quit                
PrivateTmp=true         

[Install]
WantedBy=multi-user.target      

systemctl daemon-reload
systemctl start nginx.service

网页访问
在这里插入图片描述

3. 安装Mysql

//安装依赖包
[root@lnmp ~]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel ncurses-compat-libs

//创建用户和组
[root@lnmp ~]# useradd -r -M -s /sbin/nologin mysql

//解压mysql软件包
[root@lnmp ~]# cd /usr/src/
[root@lnmp src]# tar xf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@lnmp ~]# cd /usr/local/
[root@lnmp local]# ls
bin  games    lib    libexec                              nginx  share
etc  include  lib64  mysql-5.7.35-linux-glibc2.12-x86_64  sbin   src
[root@lnmp local]# ln -sv mysql-5.7.35-linux-glibc2.12-x86_64/ mysql
'mysql' -> 'mysql-5.7.35-linux-glibc2.12-x86_64/'
[root@lnmp local]# chown -R mysql.mysql /usr/local/mysql*

//添加环境变量
[root@lnmp ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@lnmp ~]# source /etc/profile.d/mysql.sh
[root@lnmp ~]# echo $PATH 
/usr/local/mysql/bin:/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

//头文件软连接
[root@lnmp ~]# ln -s /usr/local/mysql/include /usr/include/mysql

//帮助文档
[root@lnmp ~]# vim /etc/man_db.conf
MANDATORY_MANPATH                       /usr/local/mysql/man

//库文件
[root@lnmp ~]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[root@lnmp ~]# ldconfig 

//建立数据存放目录
[root@lnmp ~]# mkdir -p /opt/data
[root@lnmp ~]# chown -R mysql.mysql /opt/data/
[root@lnmp ~]# ll /opt/
总用量 0
drwxr-xr-x. 2 mysql mysql 6 10月 26 01:02 data

//初始化数据库
[root@lnmp ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data

//生成配置文件
[root@lnmp ~]# cat /etc/my.cnf    
[mysqld]
basedir = /usr/local/mysql
datadir = /data
socket = /tmp/mysql.sock
port = 3306
pid-file = /data/mysql.pid
user = mysql
skip-name-resolve

//配置启动服务
[root@lnmp ~]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /usr/local/mysql/support-files/mysql.server 
[root@lnmp ~]# sed -ri 's#^(datadir=).*#\1/opt/data#g' /usr/local/mysql/support-files/mysql.server
[root@lnmp ~]# cat /usr/lib/systemd/system/mysqld.service
[Unit]
Description=Mysql server daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

// 启动mysql
[root@lnmp ~]# systemctl daemon-reload 
[root@lnmp ~]# systemctl enable --now mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
[root@lnmp ~]# ss -antl
State    Recv-Q   Send-Q     Local Address:Port     Peer Address:Port  Process   
LISTEN   0        128              0.0.0.0:80            0.0.0.0:*               
LISTEN   0        128              0.0.0.0:22            0.0.0.0:*               
LISTEN   0        128                 [::]:22               [::]:*               
LISTEN   0        80                     *:3306                *:*              

//设置数据库密码
mysql> set password = password('xu1');
Query OK, 0 rows affected, 1 warning (0.00 sec)


4. 安装php

PHP

进入官方下载PHP8.0.10源码包

[root@lnmp ~]# ls
anaconda-ks.cfg  php-8.0.10.tar.gz
[root@lnmp ~]# mv php-8.0.10.tar.gz /usr/src/
[root@lnmp ~]# cd /usr/src/
[root@llnmp src]# ls
debug  kernels  php-8.0.10.tar.gz

先下载epel源

[root@lnmp ~]# yum -y install epel-release

下载依赖包

[root@lnmp ~]# yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel  pcre-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel mhash mhash-devel

[root@lnmp ~]# yum -y install http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
[root@lnmpsrc]# tar xf php-8.0.10.tar.gz -C /usr/local/
[root@lnmp src]# cd /usr/local/php-8.0.10/
[root@lnmp php-8.0.10]# ./configure --prefix=/usr/local/php8  \
--with-config-file-path=/etc \
--enable-fpm \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-openssl \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--enable-exif  \
--enable-ftp \
--enable-gd \
--with-jpeg \
--with-zlib-dir \
--with-freetype \
--with-gettext \
--enable-mbstring \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-readline \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--with-zip \
--enable-mysqlnd-compression-support \
--with-pear \
--enable-pcntl \
--enable-posix

编译过程略......

[root@lnmp php-8.0.10]# make && make install
过程略......

设置环境变量

[root@lnmp profile.d]# echo 'export PATH=/usr/local/php8/bin:$PATH' > /etc/profile.d/php.sh
[root@lnmp profile.d]# source /etc/profile.d/php.sh

配置php-fpm

[root@lnmp php-8.0.10]# cp php.ini-production /etc/php.ini 
cp:是否覆盖'/etc/php.ini'? y
[root@lnmp php-8.0.10]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@lnmp php-8.0.10]# chmod +x /etc/init.d/php-fpm 
[root@lnmp php-8.0.10]# cp /usr/local/php8/etc/php-fpm.conf.default /usr/local/php8/etc/php-fpm.conf
[root@lnmpphp-8.0.10]# cp /usr/local/php8/etc/php-fpm.d/www.conf.default /usr/local/php8/etc/php-fpm.d/www.conf
[root@lnmp php-8.0.10]# 

启动php-fpm

[root@lnmp ~]# service php-fpm start
Starting php-fpm  done
[root@lnmp ~]# ss -antl
State   Recv-Q  Send-Q     Local Address:Port     Peer Address:Port  Process  
LISTEN  0       128            127.0.0.1:9000          0.0.0.0:*              
LISTEN  0       128              0.0.0.0:22            0.0.0.0:*              
LISTEN  0       80                     *:3306                *:*              
LISTEN  0       128                    *:80                  *:*              
LISTEN  0       128                 [::]:22               [::]:*              

/创建php测试页面
[root@lnmp ~]# cat /usr/local/nginx/html/index.php
<?php
    phpinfo();
?>

配置ningx.conf文件

[root@lnmp ~]# vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.php index.html index.htm;				#添加index.php
        }
        location ~ \.php$ {
            root   html;
            fastcgi_pass   127.0.0.1:9000;                      
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $Document_Root$fastcgi_script_name;
            include        fastcgi_params;
        }


//重启nginx,重新加载配置文件
[root@lnmp ~]# nginx -s reload

网页访问
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值