• LNMP Web服务搭建


    1. 常见WEB环境介绍

    1.1 JAVA环境(主流)

    # 常用的软件如下:
    tomcat、resin、jboss、Weblogic
    
    tomcat配合nginx proxy_pass代理功能来实现web环境。
    

    1.2 Python Web环境

    配合nginx uwsgi_pass代理功能来实现web环境。
    

    1.3 PHP Web环境

    配合nginx fastcgi_pass代理功能来实现web环境。
    

    2. LNMP 组合工作流程

    3. 二进制安装Mysql数据库

    3.1 MySQL安装方式

    MySQL安装方式 特点说明
    yum/rpm安装 特点是简单、速度快,但是无法定制安装,适合新手
    二进制安装 解压后简单配置即可使用,速度快,专业DBA常用该方式。
    源码编译安装 特点是可以定制安装参数,但是安装时间较长。
    源码软件结合yum/rpm来安装 把源码包制作成符合要求的rpm,结合了第一种和第三种的优点。

    3.2 安装步骤介绍

    (1)创建MySQL用户

    [root@web01 ~]# useradd -s /sbin/nologin -g mysql -M mysql
    useradd: group 'mysql' does not exist
    [root@web01 ~]# groupadd mysql
    [root@web01 ~]# useradd -s /sbin/nologin -g mysql -M mysql
    
    # 创建存放软件包的目录
    [root@web01 ~]# mkdir /home/xts/tools -p
    [root@web01 ~]# cd /home/xts/tools/
    

    (2)二进制方式安装MySQL

    [root@web01 /home/xts/tools]# ls
    mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
    [root@web01 /home/xts/tools]# tar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
    [root@web01 /home/xts/tools]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /application/mysql-5.7.26
    [root@web01 /home/xts/tools]# ln -s /application/mysql-5.7.26/ /application/mysql
    [root@web01 /home/xts/tools]# ll /application/
    total 0
    lrwxrwxrwx  1 root root  26 Jun 12 20:03 mysql -> /application/mysql-5.7.26/
    drwxr-xr-x  9 root root 129 Jun 12 20:00 mysql-5.7.26
    lrwxrwxrwx  1 root root  26 May 19 20:37 nginx -> /application/nginx-1.18.0/
    drwxr-xr-x 11 root root 151 May 19 20:37 nginx-1.18.0
    

    (3)初始化MySQL配置文件my.cnf

    [root@web01 /home/xts/tools]# cd /application/mysql
    [root@web01 /application/mysql]# rpm -e --nodeps mariadb-libs  # 卸载系统自动安装的mariadb库,防止冲突。
    
    # 手动编辑my.cnf并加入如下内容
    [root@web01 /application/mysql]# vim /etc/my.cnf 
    [mysqld]                                            # 服务器端模块名字
    basedir = /application/mysql                        # MySQL安装目录
    datadir = /application/mysql/data                   # MySQL数据文件目录
    socket = /tmp/mysql.sock                            # MySQL服务端sock文件目录
    server_id = 1                                       # MySQL实例ID
    port = 3306                                         # MySQL端口号
    log_error = /application/mysql/data/mysql.error     # MySQL错误日志存放位置
    
    [mysql]                                             # MySQL客户端模块名
    socket = /tmp/mysql.sock                            # MySQL客户端sock文件目录
    prompt = mysql [\d]>                               # MySQL登录提示符
    

    (4)初始化MySQL数据库文件

    # 安装依赖包
    [root@web01 /application/mysql]# yum -y install libaio-devel
    
    # 创建数据文件目录并授权
    [root@web01 /application/mysql]# mkdir -p /application/mysql/data -p
    [root@web01 /application/mysql]# chown -R mysql.mysql /application/mysql/
    [root@web01 /application/mysql]# ll -d /application/mysql/
    drwxr-xr-x 10 mysql mysql 141 Jun 12 23:26 /application/mysql/
    
    # 初始化数据库
    [root@web01 /application/mysql]# /application/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/application/mysql/ --datadir=/application/mysql/data  # 初始化的时候,是要没有error就行。
    
    
    ## 初始化参数介绍
    --initialize-insecure:关闭mysql安全策略。
    --user=mysql:mysql用户
    --basedir=/application/mysql/:mysql根目录
    --datadir=/application/mysql/data:mysql数据文件目录
    
    扩展:
    --initialize:开启mysql安全策略,初始化完毕会生成一条临时密码。高安全环境使用。
    

    4. 配置并启动MySQL数据库

    4.1 设置MySQL启动脚本

    [root@web01 /application/mysql]# cat >/etc/systemd/system/mysqld.service <<EOF
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    After=network.target
    After=syslog.target
    [Install]
    WantedBy=multi-user.target
    [Service]
    User=mysql
    Group=mysql
    ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
    LimitNOFILE = 5000
    

    4.2 启动MySQL数据库

    [root@web01 /application/mysql/support-files]# systemctl start mysqld
    [root@web01 /application/mysql/support-files]# systemctl enable mysqld
    Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /etc/systemd/system/mysqld.service.
    [root@web01 /application/mysql/support-files]# systemctl status mysqld
    ● mysqld.service - MySQL Server
       Loaded: loaded (/etc/systemd/system/mysqld.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2020-06-12 23:40:05 CST; 13s ago
         Docs: man:mysqld(8)
               http://dev.mysql.com/doc/refman/en/using-systemd.html
     Main PID: 7540 (mysqld)
       CGroup: /system.slice/mysqld.service
               └─7540 /application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
    
    Jun 12 23:40:05 web01 systemd[1]: Started MySQL Server.
    

    4.3 检查启动是否有异常

    [root@web01 /application/mysql]# ps -ef | grep [m]ysql
    mysql      7540      1  0 23:40 ?        00:00:00 /application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
    [root@web01 /application/mysql]# netstat -lntup|grep 3306
    tcp6       0      0 :::3306                 :::*                    LISTEN      7540/mysqld
    
    # 如果3306端口未启动,请查看/application/mysql/data/mysql.err日志进行调试。
    

    4.4 配置MySQL命令的环境变量

    [root@web01 /application/mysql]# echo 'export PATH=/application/mysql/bin:$PATH' >> /etc/profile
    [root@web01 /application/mysql]# tail -1 /etc/profile
    export PATH=/application/mysql/bin:$PATH
    [root@web01 /application/mysql]# source /etc/profile
    [root@web01 /application/mysql]# echo $PATH
    /application/mysql/bin:/application/nginx/sbin/:/application/nginx/sbin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    

    4.5 登录测试

    [root@web01 /application/mysql]# mysql
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 2
    Server version: 5.7.26 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql [(none)]>show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql [(none)]>select user();
    +----------------+
    | user()         |
    +----------------+
    | root@localhost |
    +----------------+
    1 row in set (0.00 sec)
    
    mysql [(none)]>
    

    4.6 设置MySQL登录密码

    [root@web01 /application/mysql]# mysqladmin -u root password 'xts123'
    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@web01 /application/mysql]# mysql                                           # 由于更改了密码,所以无法直接登录
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    [root@web01 /application/mysql]# mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 5
    Server version: 5.7.26 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql [(none)]>
    

    5. FastCGI介绍

    5.1 什么是CGI

    5.2 什么是FastCGI


    5.3 FastCGI的运行原理

    当有*.php这样的请求到达Nginx的时候,会由Nginx中的fastcgi_pass把该请求抛给PHP服务端。
    在PHP服务端中会事先启动php_fpm服务(配置文件为php-fpm.conf),php_fpm服务收到fastcgi_pass抛过来的请求后,会由waepper发送给PHP解析器进行处理(配置文件php.ini)。
    如果需要访问数据库就会访问数据库,如果不需要,就会直接把结果返回给Nginx。
    访问原理图如下:
    

    6. PHP(FastCGI)安装前的准备

    6.1 检查确认Nginx和MySQL的安装路径

    [root@web01 ~]# ll -d /application/mysql/
    drwxr-xr-x 10 mysql mysql 141 Jun 12 23:26 /application/mysql/
    [root@web01 ~]# ll -d /application/nginx/
    drwxr-xr-x 11 root root 151 May 19 20:37 /application/nginx/
    

    6.2 检查端口及启动情况

    [root@web01 ~]# netstat -lntup|egrep "80|3306"
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      6757/nginx: master  
    tcp6       0      0 :::3306                 :::*                    LISTEN      6504/mysqld
    

    6.3 安装PHP所需的lib库文件

    [root@web01 ~]# yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y
    [root@web01 ~]# yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y
    

    6.4 安装yum无法安装的libiconv库

    [root@web01 /server/tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
    [root@web01 /server/tools]# ll 
    total 6064
    -rw-r--r-- 1 root  root  5166734 Jun  4 18:22 libiconv-1.16.tar.gz
    drwxr-xr-x 9 mysql mysql     186 May 19 20:35 nginx-1.18.0
    -rw-r--r-- 1 root  root  1039530 Apr 21 22:33 nginx-1.18.0.tar.gz
    [root@web01 /server/tools]# tar xf libiconv-1.16.tar.gz 
    [root@web01 /server/tools]# cd libiconv-1.16/
    [root@web01 /server/tools/libiconv-1.16]# ./configure --prefix=/application/libiconv
    [root@web01 /server/tools/libiconv-1.16]# make
    [root@web01 /server/tools/libiconv-1.16]# make install
    

    6.5 安装libmcrypt库

    # 这是一个使用动态加载的模块化的libmcrypt。libmcrypt对于在程序运行时添加或移除算法是有用的。  libmcrypt目前不在被官方支持,安装时需要安装epel源。  libmcrypt官方地址为http://mcrypt.hellug.gr/lib/。
    [root@web01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    [root@web01 /server/tools/libiconv-1.16]# cd ..
    [root@web01 /server/tools]# yum -y install libmcrypt-devel
    [root@web01 /server/tools]# rpm -qa libmcrypt-devel
    libmcrypt-devel-2.5.8-13.el7.x86_64
    

    6.6 安装mhash加密扩展库

    # mhash是基于离散数学原理不可逆向的PHP加密方式扩展库,其在默认情况下不会开启。mhash可以用于创建校验数值、消息摘要、消息认证码,以及无需原文的关键信息保存(如密码)等。它为PHP提供了多种散列算法,如MD5、SHA1、GOST等。可以通过MHASH_hashname()查看支持的算法。
    
    # 注意:该扩展不能提供最新的散列算法。
    #      该扩展结果原则上运算不可逆。
    
    [root@web01 /server/tools]# yum install mhash -y
    [root@web01 /server/tools]# rpm -qa libmcrypt-devel
    libmcrypt-devel-2.5.8-13.el7.x86_64
    

    7. 开始安装PHP(FastCGI方式)服务

    7.1 获取PHP包

    [root@web01 /server/tools]# wget http://mirrors.sohu.com/php/php-7.3.5.tar.gz
    [root@web01 /server/tools]# ll -h
    total 25M
    drwxrwxr-x 20 root  root   4.0K Jun 13 16:04 libiconv-1.16
    -rw-r--r--  1 root  root   5.0M Jun  4 18:22 libiconv-1.16.tar.gz
    drwxr-xr-x  9 mysql mysql   186 May 19 20:35 nginx-1.18.0
    -rw-r--r--  1 root  root  1016K Apr 21 22:33 nginx-1.18.0.tar.gz
    -rw-r--r--  1 root  root    19M May  1  2019 php-7.3.5.tar.gz     # 检查软件包的完整性
    # 注意:工作中如何选择PHP版本,取决于开发人员使用什么版本的PHP。
    

    7.2 解压配置PHP

    [root@web01 /server/tools]# tar xf php-7.3.5.tar.gz 
    [root@web01 /server/tools]# cd php-7.3.5/
    [root@web01 /server/tools/php-7.3.5]# ./configure 
    --prefix=/application/php-7.3.5 
    --enable-mysqlnd  
    --with-mysqli=mysqlnd 
    --with-pdo-mysql=mysqlnd 
    --with-iconv-dir=/application/libiconv 
    --with-freetype-dir 
    --with-jpeg-dir 
    --with-png-dir 
    --with-zlib 
    --with-libxml-dir=/usr 
    --enable-xml 
    --disable-rpath 
    --enable-bcmath 
    --enable-shmop 
    --enable-sysvsem 
    --enable-inline-optimization 
    --with-curl 
    --enable-mbregex 
    --enable-fpm 
    --enable-mbstring 
    --with-gd 
    --with-openssl 
    --with-mhash 
    --enable-pcntl 
    --enable-sockets 
    --with-xmlrpc 
    --enable-soap 
    --enable-short-tags 
    --enable-static 
    --with-xsl 
    --with-fpm-user=nginx 
    --with-fpm-group=nginx 
    --enable-ftp 
    --enable-opcache=no
    
    ## 配置成功显示如下:
    

    7.3 编译PHP

    ## 编译时间较久,中途会停顿,不是卡住了。
    ## 最后一行出现这个:Don't forget to run 'make test'. 表示成功。
    [root@web01 /server/tools/php-7.3.5]# make
    [root@web01 /server/tools/php-7.3.5]# echo $?
    0   # 返回0,表示安装成功
    [root@web01 /server/tools/php-7.3.5]# make install
    [root@web01 /server/tools/php-7.3.5]# echo $?
    0
    

    7.4 配置PHP引擎配置文件 php.ini(解析器)

    (1)设置软连接以便访问

    [root@web01 /server/tools/php-7.3.5]# ln -s /application/php-7.3.5/ /application/php
    [root@web01 /server/tools/php-7.3.5]# ll /application/
    total 0
    drwxr-xr-x  6 root  root   56 Jun 13 16:04 libiconv
    lrwxrwxrwx  1 root  root   26 Jun 12 20:03 mysql -> /application/mysql-5.7.26/
    drwxr-xr-x 10 mysql mysql 141 Jun 12 23:26 mysql-5.7.26
    lrwxrwxrwx  1 root  root   26 May 19 20:37 nginx -> /application/nginx-1.18.0/
    drwxr-xr-x 11 root  root  151 May 19 20:37 nginx-1.18.0
    lrwxrwxrwx  1 root  root   23 Jun 13 16:39 php -> /application/php-7.3.5/
    drwxr-xr-x  9 root  root   88 Jun 13 16:32 php-7.3.5
    [root@web01 /server/tools/php-7.3.5]# ls /application/php
    bin  etc  include  lib  php  sbin  var
    

    (2)查看PHP配置默认模板文件

    [root@web01 /server/tools/php-7.3.5]# !l
    ll php.ini-*
    -rw-r--r-- 1 www www 71648 Apr 30  2019 php.ini-development   # 开发(测试)环境
    -rw-r--r-- 1 www www 71920 Apr 30  2019 php.ini-production    # 生产环境
    
    # 两个文件内容的不同可以使用vimdiff进行比对。
    

    (3)拷贝PHP配置文件到PHP默认目录,并更改文件名为php.ini

    [root@web01 /server/tools/php-7.3.5]# cp php.ini-development /application/php/lib/php.ini  # 学习用开发环境的配置文件,工作用生产环境的配置,或者环境部署成功后,再改成生产配置。
    [root@web01 /server/tools/php-7.3.5]# ll /application/php/lib/php.ini 
    -rw-r--r-- 1 root root 71648 Jun 13 16:51 /application/php/lib/php.ini
    

    7.5 配置PHP服务(FastCGI模式)的配置文件php-fpm.conf

    [root@web01 /application/php/etc]# cp php-fpm.conf.default php-fpm.conf
    [root@web01 /application/php/etc]# cp php-fpm.d/www.conf.default php-fpm.d/www.conf   # 这是个特殊的包含文件,必须要有,否则后面启动服务会有报错ERROR: No pool defined。
    

    7.6 启动PHP服务(FastCGI模式)

    [root@web01 /application/php/etc]# /application/php/sbin/php-fpm 
    [root@web01 /application/php/etc]# netstat -lntup|grep 9000
    tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      27769/php-fpm: mast
    

    7.7 设置为开机自启动

    [root@web01 /application/php/etc]# echo '/application/php/sbin/php-fpm' >> /etc/rc.local 
    [root@web01 /application/php/etc]# tail -1 /etc/rc.local
    /application/php/sbin/php-fpm
    

    8. 配置Nginx支持PHP程序请求访问

    8.1 修改Nginx配置文件

    (1)查看当前配置

    [root@web01 /application/nginx/conf]# cat -n nginx.conf
         1	worker_processes  1;
         2	error_log logs/error.log;
         3	events {
         4	    worker_connections  1024;
         5	}
         6	http {
         7	    include       mime.types;
         8	    default_type  application/octet-stream;
         9	    sendfile        on;
        10	    keepalive_timeout  65;
        11	    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        12	                      '$status $body_bytes_sent "$http_referer" '
        13	                      '"$http_user_agent" "$http_x_forwarded_for"';
        14	include extra/01_www.conf;
        15	include extra/02_blog.conf;
        16	include extra/03_bbs.conf;
        17	include extra/04_status.conf;
        18	}
    

    (2)配置PHP程序解析,这里以Blog为例

    [root@web01 /application/nginx/conf/extra]# cat 02_blog.conf
    server {
     listen 80;
     server_name blog.etiantian.org;
     location / {
      root html/blog;
      index index.html index.htm;
     }
     location ~ .*.(php|php5)?$ {
      root html/blog;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi.conf;
     }
    }
    

    8.2 检查并启动Nginx

    [root@web01 /application/nginx/conf/extra]# nginx -t
    nginx: the configuration file /application/nginx-1.18.0//conf/nginx.conf syntax is ok
    nginx: configuration file /application/nginx-1.18.0//conf/nginx.conf test is successful
    [root@web01 /application/nginx/conf/extra]# nginx -s reload
    

    8.3 测试LNMP环境生效情况

    (1)测试PHP解析请求是否OK

    # 添加index.php
    [root@web01 /application/nginx/conf]# echo '<?php phpinfo(); ?>' > ../html/blog/test_info.php
    [root@web01 /application/nginx/conf]# cat ../html/blog/test_info.php
    <?php phpinfo(); ?>
    
    # 调整Windows机器的hosts文件,添加好对应的解析
    192.168.1.51 www.etiantian.org bbs.etiantian.org blog.etiantian.org etiantian.org
    
    # 访问测试
    [root@web01 /application/nginx/conf]# ping blog.etiantian.org
    PING www.etiantian.org (192.168.1.51) 56(84) bytes of data.
    64 bytes from www.etiantian.org (192.168.1.51): icmp_seq=1 ttl=64 time=0.268 ms
    ^C
    --- www.etiantian.org ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.268/0.268/0.268/0.000 ms
    

    (2)针对Nginx请求访问PHP,然后PHP连接MySQL的情况进行测试

    # 编辑test_mysql.php,加入如下内容
    [root@web01 /application/nginx/conf]# vim ../html/blog/test_mysql.php
    <?php
    //$link_id=mysqli_connect('主机名','用户','密码');
    $link_id=mysqli_connect('localhost','root','xts123') or mysql_error();
    if($link_id){
    echo "mysql successful by xts.
    ";
    }else{
    echo mysql_error();
    }
    ?>
    
    # 服务器本地测试连接数据库
    [root@web01 /application/nginx/conf]# /application/php/bin/php ../html/blog/test_mysql.php 
    mysql successful by xts.
    
    # 浏览器测试如下
    

  • 相关阅读:
    集合类--容器
    《学习之道》第十一章理解
    文件操作引出流(一)Stream和File.Create(path)
    整理文件操作(五)
    整理文件操作(四)Image.FromFile(path)
    整理文件操作(三)File.Exists(path)和new FileInfo(path).Exists
    整理文件操作(二)File和FileInfo
    整理文件操作(一)逻辑流程
    《学习之道》第十一章先理解再去记忆
    《学习之道》第十一章再次强调激发感官
  • 原文地址:https://www.cnblogs.com/xiets/p/13111265.html
Copyright © 2020-2023  润新知