简单易懂 LNMP 架构详解适合入门级别可跟做

一、LNMP架构解读

1.1 LNMP平台就是Linux、Nginx、MySQL、PHP的组合架构,需要Linux服务器、MySQL数据库、PHP解析环境

1.2 本案例在单台服务器上部署LNMP环境

1.3 案例架构图示

在这里插入图片描述简单易懂 LNMP 架构详解适合入门级别可跟做_第1张图片

nginx的特长是处理静态请求效率非常强,擅长处理静态资源

apache更适合做动态处理

LNMP中,动态进程交给php中的fpm去处理

所以php需要额外安装fpm

二、实验步骤及详解

####Nginx网站服务####
 1 Nginx服务基础
        在各种网站服务器软件中, 除了Apache HTTP Server 外, 还有一款轻量级的 HTTP
服务器软件——Nginx, 由俄罗斯的 lgor Sysoev 开发, 其稳定、高效的特性逐渐被越来越
多的用户认可。本章将讲解nginx服务的基本构建、访问控制方式、虚拟主机的搭建,还有应
用广泛的 LNMP 架构服务器的部署方式,并对PHP_FPM模块如何支持PHP语言进行讨论。
           Nginx (发音为[engine x])专为性能优化而开发,其最知名的优点是它的稳定性和低系
统资源消耗以及对 HTTP 并发连接的高处理能力 (单台物理服务器可支持30 000~ 50 000个并
发请求) 。正因为如此,大量提供社交网络、新闻资讯、电子商务及虚拟主机等服务的
                          企业纷纷选择Nginx来提供Web服务。
###试验环境: CentOS 7.6    Nginx 1.15###

1、编译安装Nginx 1.15 安装及运行控制
        ##试验环境: CentOS 7.6 Nginx 1.15 关闭防火墙、核心防护###
##1.1软件支持##
        Nginx的配置及运行需要pcre, zlib等软件包的支持,因此应预先安装这些软件的开发包
(devel) ,以便提供相应的库和头文件,确保 Nginx 的安装顺利完成

[root@localhost ~# yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl \
zlib-devel





##1.2创建运行用户、组##
     Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制
其访问权限,增加灵活性、降低安全风险。例如,创建一个名为nginx的用户,不建立宿主文件夹,
也禁止登录到Shell环境。

[root@localhost ~]# useradd -M -s /sbin/nologin nginx

##1.3编译安装Nginx##
         配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx;
启用http_stub_status_module模块以支持状态统计,便于查看服务器的连接信息。
具体选项根据实际需要来定, 配置前可参考"./configure--help" 给出的说明.
上传nginx-1.15.9.tar.gz至/opt目录

[root@localhost ~]#cd /opt
[root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz
[root@localhost opt]# cd nginx-1.15.9
[root@localhost nginx-1.15.9]#
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

[root@localhost nginx-1.15.9]# make && make instal

##1.3路径优化##
为了使 Nginx 服务器的运行更加方便, 可以为主程序 nginx 创建链接文件, 以便管理员
直接执行 "nginx" 命令就可以调用Nginx的主程序

[root@localhost nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.15.9]# ls -l /usr/local/sbin/nginx
Irwxrwxrwx 1 root root 27 228 05:17 /usr/local/sbin/nginx -> 
/usr/local/nginx/sbin/nginx


2、 Nginx的运行控制
##2.1检查配置文件##
      与Apache 的主程序 httpd 类似,  Nginx 的主程序也提供了 "-t" 选项用来对配置文件进行
检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录下的conf/子目录中。
若要检查位于其他位置的配置文件,可使用"-c"选项来指定路径。

[root@localhost nginx-1.15.9]# nginx-t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

##2.2启动、停止Nginx##
直接运行Nginx即可启动Nginx服务器,这种方式将使用默认的配置文件,若要改用
其他配置文件,需添加"-c配置文件路径"选项来指定路径。需要注意的是,若服务器中已装
有 httpd 等其他 Web 服务软件,应采取措施 (修改端口、停用或卸载) 避免冲突。


##############最小安装需要 yum -y install net-tools 
[root@localhost nginx-1.15.9]# nginx
[root@localhost nginx-1.15.9]# netstat -anpt | grep nginx
tcp       0        0.0.0.0.0:80            0.0.0.0:*                LISTEN             11191/nginx: master

最小安装需要   
通过检查Nginx程序的监听状态,或者在浏览器中访问此Web服务(默认页面将显示
"Welcom to nginx!" ) ,可以确认 Nginx 服务是否正常运行。

[root@localhost nginx-1.15.9]# yum -y install lynx
[root@localhost nginx-1.15.9]# lynx 127.0                                                                                     Welcome to nginx!
                              Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. 
Further
configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.


          主程序Nginx支持标准的进程信号,通过kill或killall命令发送HUP信号表示重载配置,
QUIT信号表示退出进程, KILL信号表示杀死进程。例如,若使用killall 命令,重载配置、
停止服务的操作分别如下所示(通过"-s"选项指定信号种类)

[root@localhost ~]# yum -y install psmisc        ###最小没有killall令需要安装 
[root@localhost ~]# killall -s HUP nginx          ###选项-s HUP等同于-1   重新加载 
[root@localhost ~]# killall -s QUIT nginx          ###选项-s QUIT等同于-3  停止服务
[root@localhost ~]# netstat -anpt | grep nginx    ###过滤看下

当Nginx进程运行时,  PID 号默认存放在logs/目录下的nginx.pid文件中,因此若改用
kill 命令,也可以根据nginx.pid文件中的PID号来进行控制。

##2.3添加 Nginx系统服务##
为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写基于CentOs 7.6的
Nginx服务控制文件使用systemctl工具来进行管理.CentOS7.6系统的管理习惯

[root@localhost ~]# vi /lib/systemd/system/nginx.service

###要刷配置参数#
[Unit]              
Description=nginx
After=network.target                  
[Service]                                          
Type=forking                               
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

##配置参数解释##
[Unit]
Description=nginx                                    ###描述
After=network.target                              ####描述服务类别,网络服务模式
[Service]
Type=forking                                             ###后台运行形式
PIDFile=/usr/local/nginx/logs/nginx.pid              ###PID文件位置 ,记录进程号 
ExecStart=/usr/local/nginx/sbin/nginx                 ###启动服务脚本
ExecReload=/usr/bin/kill -s HUP $MAINPID        ###根据PID(nginx进程号)重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID           ###根据PID(nginx进程号)终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target

[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service 
to /usr/lib/systemd/system/nginx.service.

##2.4检查通过systemctl命令能否正常启动、停止、重启、重载Nginx服务##
[root@localhost ~]# netstat -anutp | grep nginx
[root@localhost ~# systemctl start nginx
[root@localhost ~]# netstat -anutp | grep nginx
tcp          0          0 0.0.0.0:80           0.0.0.0:1             LISTEN             11410/nginx: maste
[root@localhost -]#

由各种配置语句组成,不使用特定的界定标记。全局配置部分包括Nginx服务的运行
用户、工作进程数、错误日志、PID存放位置等基本设置

3、配置文件Nginx.conf
      在Nginx服务器的主配置文件/usr/local/nginx/conf/nginx.conf中,包括全局配置、l/O
事件配置和 HTTP 配置这三大块内容,配置语句的格式为“关键字值;" (末尾以分号表示结
束) ,以“#"开始的部分表示注释.

##3.1全局配置##
        由各种配置语句组成,不使用特定的界定标记。全局配置部分包括Nginx服务的运行
用户、工作进程数、错误日志、PID存放位置等基本设置

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

#user nobody;                                   ##运行用户
worker_processes 1;                         ##工作进程数

#error_log logs/error.log:                ###错误日志文件的位置
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid               logs/nginx.pid;            ####PID文件的位置

      上述配置中, worker processes表示工作进程的数量。若服务器有多块CPU或者使用
多核处理器,可以参考CPU核心总数来指定工作进程数,如设为8;如果网站访问量需求并不大
,一般设为1就够用了。其他三项配置均已有注释,表示采用默认设置,例如, Nginx的运行用户
实际是编译时指定的nginx, 若编译时未指定则默认为 nobody

##3.2 l/O时间配置##
使用"events ()"界定标记,用来指定Nginx进程的1/0响应模型、每个进程的连接数等设置。
对于2.6及以上版本的内核,建议使用 epoll 模型以提高性能 ; 每个进程的连接数应根据实际需
要来定, 一般在 10000 以下(默认为1024)
events {
        use epoll;
        worker_connections 4096;
}

若工作进程数为8,每个进程处理4096个连接,则允许Nginx正常提供服务的连接数已超过
3 万个 (4096x8-32 768) , 当然具体还要看服务器硬件、网络带宽等物理条件的性能表现。


##3.3 HTTP配置##
        使用"http {}"界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保
持,以及后面要讲到的虚拟Web主机、PHP解析等一系列设置,其中大部分配置语句都包含在
子界定标记"server {}"#user nobody;
worker_processes 1;

#error_log logs/error.log:
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid            logs/nginx.pid;
events {
    use epoll;
    Worker_connections 4096;
}
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"  "Shttp_x_forwarded_for"';     ###·去掉前面注释
     
     access_log logs/access.log main;                    ###·访问日志位置,去掉前面注释

    sendfile            on;                                 ###支持文件发送(下载)
    #tcp_nopush         on;
    #keepalive timeout 0;keepalive timeout 65;        ##链接保持时间
 
    #gzip on;

    server {                                                   ###WEB服务的监听配置
        isten          80;                                    ###WEB服务的监听端口
        server_name www.51xit.top;                         ###网站名称(FQDN)
        charset koi8-r;                                     ###·网页的默认字符集
        #access log logs/host.access.log main;

     location /{                                                ###根目录配置         
        root html;                                          ###网站根目录的位置
        index index.html index.htm;                        ###默认首页(索引页)
}

     error_page 404                /404.html;
     # redirect server error pages to the static page /50x.html
     #
     error_page           500 502 503 504 /50x.html;        ###内部错误反馈页面
     location=/50x.html                                     ###错误页面配置
     root html;
}

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #   
    #location ~\.php$ {

    # proxy_pass http://127.0.0.1;
    #}

    #pass the PHP scripts to FastCGl server listening on 127.0.0.1:9000
    #
    #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;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny all;
    #}
 }  

   # another virtual host using mix of IP-, name-, and port-based configuration
   #
   #server {
   #    listen        8000;
   #    listen        somename:8080;
   #    server_name somename alias another.alias;

   #    location / {
   #        root html;
   #        index index.html index.htm;
   #   }
   #}

   # HTTPS server
   #
   #servert {
   #    listen      443 ssl;
   #    server_name localhost;
   #    ssl_certificate        cert.pem;
   #    ssl_certificate_key   cert.key;
   #    ssl_session_cache    shared:SSL:1m;
   #    ssl_session_timeout   5m;
   #    ssl_ciphers HIGH:!aNULL:!MD5;
   #    ssl_prefer_server_ciphers on;

   #    location / {
   #        root html;
   #        index index.html index.htm;
   #   }
   #}

 }



上述配置中, listen语句允许同时限定 IP 地址, 采用 "IP 地址:端口" 形式; root语句用
来设置特定访问位置 ("location /" 表示根目录) 的网页文档路径, 默认为Nginx 安装
目录下的html/子目录, 根据需要可改为/var/www/html 等其他路径。

3、访问状态统计
      Nginx内置了HTTP STUB STATUS状态统计模块,用来反馈当前的Web访问情况,
配置编译参数时可添加--with-http_stub_status_module来启用此模块支持,可以使用命令
/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS模块。
      要使用 Nginx 的状态统计功能, 除了启用内建模块以外, 还需要修改nginx.conf配置
文件, 指定访问位置并添加 stub_status 配置代码。

[root@localhost~]# vi /usr/local/nginx/conf/nginx.conf

####省略#### 在localtion / 这个大模块下面 插入(添加)location /status 模块
        location /{
            root html;
            index index.html index.htm;
         }

        location /status {
           stub_status on;
           access_log off;
         }
####省略####

[root@localhost nginx]# nginx-t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@localhost nginx]# systemctl restart nginx

##########################验证###########################################################
去电脑主页登录    
http://20.0.0.26/status

##或者
[root@localhost nginx]# lynx 127.0.0.1/status
Active connections:1                           ###活动连接数
server accepts handled requests      ###已经处理的链接信息
  1    1   1                                                
  ###上个数字从左到右依次表示:已处理的连接数、成功的TCP握手次数、已处理的请求数
Reading: 0 Writing: 1 Waiting: 0
########################################################################################



【Nginx访问控制】

###基于授权的访问控制###

1.1基于授权的访问控制简介
Nginx与Apahce一样,可以实现基于用户授权的访问控制,当客户端想要访问相应网
站或者目录时,要求用户输入用户名和密码才能正常访问,配置步骤与Apache基本一致。
之前我们讲过, Apache 网页认证实现步骤概括为:


################基于授权的访问控制##############################
[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/.passwd.db zzz       
New password: 
Re-type new password: 
Adding password for user zzz

[root@localhost ~]# chmod 400 /usr/local/nginx/.passwd.db   #加个点表示隐藏文件
[root@localhost ~]# cd /usr/local/nginx/
[root@localhost nginx]# ll -a

总用量 8
drwxr-xr-x. 11 root  root  169 93 12:20 .
drwxr-xr-x. 13 root  root  144 92 19:24 ..
drwx------.  2 nginx root    6 92 19:24 client_body_temp
drwxr-xr-x.  2 root  root 4096 93 12:13 conf
drwx------.  2 nginx root    6 92 19:24 fastcgi_temp
drwxr-xr-x.  2 root  root   40 92 19:24 html
drwxr-xr-x.  2 root  root   58 93 12:13 logs
-r--------.  1 root  root   42 93 12:20 .passwd.db
drwx------.  2 nginx root    6 92 19:24 proxy_temp
drwxr-xr-x.  2 root  root   19 92 19:24 sbin
drwx------.  2 nginx root    6 92 19:24 scgi_temp
drwx------.  2 nginx root    6 92 19:24 uwsgi_temp

[root@localhost nginx]# chown nginx .passwd.db                 

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

        location / {
            root   html;
            index  index.html index.htm;
            auth_basic "secret";                                                        
            auth_basic_user_file /usr/local/nginx/.passwd.db;        
        }

[root@localhost nginx]# systemctl restart nginx               

####################添加的内容为############
            auth_basic "secret";                                                        #表示密码验证的方式
            auth_basic_user_file /usr/local/nginx/.passwd.db; #认证的账号密码在什么地方


打开电脑浏览器    http://20.0.0.26/    
输入账号:zzz
输入密码:Abc123
登录验证




#########################基于客户端的访问控制###########
##配置规则
##规则从上往下执行,如匹配则停止,不再往下匹配
                  deny IP/IP段:拒绝某个IP或IP段的客户端访问
                  allow IP/IP段:允许某个IP或IP段的客户端访问

####比如:除主机20.0.0.1之外允许其他客户端访问   可进行如下操作:

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

        location / {
            root   html;
            index  index.html index.htm;
            auth_basic "secret";
            auth_basic_user_file /usr/local/nginx/.passwd.db;
            deny 20.0.0.1;
            allow all;
        }
#######################添加的内容如下###########
            deny 20.0.0.1;
            allow all;

[root@localhost nginx]# systemctl restart nginx

###打开电脑浏览器访问           http://20.0.0.26/      ####发现访问不了了


    

【Nginx虚拟主机】
        利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一
组Nginx进程,虚拟主机提供了在同一台服务器,同一组 Nginx进程上运行多个网站的功
能。跟Apache一样,Nginx也可以配置多种类型的虚拟主机,分别是基于IP的虚拟主机、
基于域名的虚拟主机、基于端口的虚拟主机。
        使用Nginx搭建虚拟主机服务器时,每个虚拟Web站点拥有独立的“serverf”配置段,
各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。


###基于域名的虚拟主机###
1、修改windos客户机的C:\Windows\System32]drivers\etc\hosts文件,加入
www.51xit.top和www.52xit.top这两个域名,它们都指向同一个服务器IPР地址,用于实现
不同的域名访问不同的虚拟主机。

20.0.0.26            www.51xit.top               www.52xit.top


2、准备各个网站的目录和测试首页
[root@localhost~]# mkdir -p /var/www/html/51xit/            ####创建www.bt.com的根目录
[root@localhost~]# mkdir -p /var/www/html/52xit/           ####创建www.test.com的根目录
[root@localhost~]# echo "www.51xit.top" >> /var/www/html/51xit/index.html
[root@localhost~]# echo "www.52xit.top" >> /var/www/html/52xit/index.html

[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ll
总用量 0
drwxr-xr-x. 2 root root 24 93 16:07 51xit
drwxr-xr-x. 2 root root 24 93 16:07 52xit

[root@localhost html]# cat 51xit/index.html 
www.51xit.top
[root@localhost html]# cat 52xit/index.html  
www.52xit.top

3、修改配置文件,把配置文件中的server{代码段全部去掉,加入2个新的server{}
段,对应2个域名
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

###################首先将原来的server内容全部加#注释掉#############
#    server {
#        listen       80;
#        server_name  localhost;
#
#        #access_log  logs/host.access.log  main;
#
#        location / {
#            root   html;
#           #auth_basic_user_file /usr/local/nginx/.passwd.db;
#           #deny 20.0.0.1;
#           #allow all;
#        }
#       location /status {
#           stub_status on;
#           access_log off;
#       }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
#        error_page   500 502 503 504  /50x.html;
#        location = /50x.html {
#            root   html;
#        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.
0.1:9000
        #
        #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;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
#    }
################################################################
再在# another virtual host using mix of IP-, name-,and port-based configuration
上空几行添加#######
server {
        listen 80;
        server_name www.51xit.top;
        charset utf-8;
        access_log logs/www.51xit.top.access.log;
        location / {
           root /var/www/html/51xit;
           index index.html index.htm;
           }
     error_page 500 502 503 504/50x.html;
     location = 50x.html{
           root html;
           }
}
server {
        listen 80;
        server_name www.52xit.top;
        charset utf-8;
        access_log logs/www.52xit.top.access.log;
        location / {
           root /var/www/html/52xit;
           index index.html index.htm;
           }
        error_page 500 502 503 504/50x.html;
        location = 50x.html{
           root html;
           }
}


# another virtual host using mix of IP-, name-, and port-based configuration 在这行上面


###验证
分别用电脑浏览器访问:   www.51xit.top   和   www.52xit.top

你也可以再开一台LINUX系统  做一下 /etc/hosts 映射   
然后访问www.51xit.top   和   www.52xit.top


####################基于IP的虚拟Web主机##########
主机配置两个IP地址
20.0.0.26          192.168.100.26

[root@localhost ~]# nmcli connection
NAME        UUID                                  TYPE      DEVICE 
ens33       35d9d64f-7719-42e9-b846-a1aeb356fa34  ethernet  ens33  
有线连接 1  ee2dccf4-cc4a-34bc-9cea-37e7d528cd27  ethernet  ens36  

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vi ifcfg-ens36

NAME=ens36
UUID=ee2dccf4-cc4a-34bc-9cea-37e7d528cd27
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.100.26
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifdown ens36
[root@localhost ~]# ifup ens36

#######打开电脑cmd ping一下      ping通继续

###修改配置文件
[root@localhost~]# vim /usr/local/nginx/conf/nginx.conf

server {
      listen 20.0.0.26;
      server_name 20.0.0.26:80;
.........                                                      ###省略部分
}

server {
      listen 192.168.100.26;
      server_name 192.168.100.26:80;
............                                                       ###省略部分
}


####验证,用电脑浏览器访问
20.0.0.26 出现    51xit.top

192.168.100.26 出现 52xit.top

####################基于端口的虚拟Web主机##########
只需要一个IP地址就够了
[root@localhost~]# vim /usr/local/nginx/conf/nginx.conf

server {
      listen 20.0.0.26;
      server_name 20.0.0.26:6666;
.........                                                      ###省略部分
}

server {
      listen 20.0.0.26;
      server_name 20.0.0.26:8888;
.........                                                      ###省略部分
}


####验证,用电脑浏览器访问
20.0.0.266666
20.0.0.268888




【安装MySQL服务】
1、安装Mysq环境依赖包
[root@localhost ~]#yum -y install \
ncurses \
ncurses-devel \
bison \            ####解析器
gcc \
gcc-c++ \
cmake

2、创建运行用户
[root@localhost ~] useradd -s /sbin/nologin mysql

3、编译安装
###上传mysql-boost-5.7.20.tar.gz到opt目录下###
[root@localhost ~]cd /opt
[root@localhost opt]# tar xzvf mysql-boost-5.7.20.tar.gz
[root@localhost opt]#cd /opt/mysql-5.7.20/
[root@localhost mysql-5.7.20]#
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \                                ####c++-DWITH_SYSTEMD=1                                       ####自己的id号

[root@localhost mysql-5.7.20]#make && make install
######编译安装####

make && make install


#####数据库目录进行权限调整###

chown -R mysql:mysql /usr/local/mysql/


#####建立调整配置文件########

vi /etc/my.cnf

[client]       客户端
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]      应用程序
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]   服务端
user = mysql             程序用户
basedir = /usr/local/mysql            工作目录
datadir = /usr/local/mysql/data       数据目录
port = 3306                           端口号
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock         通讯文件
server-id = 1                               群集唯一编号

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,
NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
PIPES_AS_CONCAT,ANSI_QUOTES
模式,固定语法

chown mysql:mysql /etc/my.cnf

#######设置环境变量####

echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile

cd /usr/local/mysql/

bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
netstat -anpt | grep 3306

mysqladmin -u root -p password "abc123" ##刚开始没密码是空的直接回车,然后输入密码abc123,
                                          在此确认abc123,这是在root账户下运行的
mysql -u root -p     ##这个命令敲下,提示要输入密码,这个就是刚才设置的密码abc123


【安装配置PHP解析环境】
1、安装环境依赖包
yum -y install \
libjpeg \
libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \           字体样式
libxml2 \
libxml2-devel \
zlib zlib-devel \
curl curl-devel \                            定位远程资源,定义web资源
openssl openssl-devel                 安全套接字程,对网络传输数据进行加密

2、编译安装

cd /opt
yum -y install bzip2
tar xjvf php-7.1.10.tar.bz2
cd php-7.1.10
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysq//mysql.sock \
--with-mysqli
--with-zlib \
---with-curl\
--with-gd \
--with-jpeg-dir\
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

make && make install
cp php.ini-development /usr/local/php/lib/php.ini
vi /usr/local/php/lib/php.ini

mysqli.default socket =/usr/local/mysql/mysql.sock
date.timezone = Asia/Shanghai

/usr/local/php/bin/php-m              //验证安装的模块

------------------------配置及优化FPM模块-------------------------
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default  www.conf

cd /usr/local/php/etc/
vi php-fpm.conf

pid = run/php-fpm.pid
:user = nginx
:group = nginx


/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini
netstat -anpt | grep 9000

In -s /usr/local/php/bin/ * /usr/local/bin/
ps aux | grep -c "php-fpm"           #结果

下是让nginx支持PHP功能
vi /usr/local/nginx/conf/nginx.conf      #在合适的位置
location ~\.php${
            root         html;
            fastcgi_pass           127.0.0.1:9000;
            fastcgi_index          index.php;
            fastcgi_param        SCRIPT_FILENAME 
            /usr/local/nginx/html$fastcgi_script_name;          ###注意目录名称
            include                    fastcgi _params;
}


vi /usr/local/nginx/html/index.php
<?php
phpinfo();
?>

systemctl restart nginx

在网页测试"http://192.168.100.41/index.php"

------------下面测试数据库工作是否正常-------------------
mysql -u root -p #########输入abc123密码

CREATE DATABASE bbs;
GRANT all ON bbs.* TO 'bbsadm'@'%' IDENTIFIED BY 'admin123";
GRANT all ON bbs.* TO 'bbsadm'@'localhost' IDENTIFIED BY 'admin123;
flush privileges;

vi /usr/local/nginx/html/index.php        ###原来的测试页内容更改如下
<?phpl
$link=mysqli_connect('192.168.100.41','bsadm','admin123");
if($link) echo "<h1>Success!!</h1>;
else echo "Fail!!!";
?>

systemctl restart nginx

在网页测试 "http://192.168.80.193/index.php"

####LNMP应用部署####
【部署Discuz!社区论坛Web应用)

########以下安装论坛#########

cd /opt
yum -y install unzip
unzip Discuz X3.4 SC UTF8.zip -d/tmp
cd /tmp/dir_SC_UTF8/
cp -r upload/ /usr/local/nginx/html/bbs/
cd /usr/local/nginx/html/bbs/
chown -R root:nginx ./config/
chown -R root:nginx ./data/
chown -R root:nginx ./uc_client/
chown -R root:nginx ./uc_server/

chmod-R 777./config/
chmod-R 777./data/
chmod-R 777./uc_client/
chmod-R 777./uc_server/

http://IP/bbs/install/index.php
##
数据库服务器: localhost   ###本地架设就用localhost, 如何不是在在本机上就要填写IP地址和端口号
数据库名字: bbs
数据库用户名: bbsadm
数据库密码: admin123
管理员账号:admin
管理员密码:admin123
##
http://P/bbs/admin.php //管理后台
账户: admin
密码: admin123

http://192.168.32.21/bbs/index.php

你可能感兴趣的:(linux)