前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运维之LNMP环境安装与配置

运维之LNMP环境安装与配置

作者头像
全栈工程师修炼指南
发布2022-09-28 19:22:14
6940
发布2022-09-28 19:22:14
举报
0x00 快速入门

描述:1)LNMP是目前互联网主流的WEB服务器架构,主要是由Linux+Nginx+MYSQL|Mariadb+PHP组合,可以发布企业门户网站代码(PHP动态网页),运维人员要能够独立构建LNMP平台。

  • Nginx 是一个web服务器和代理服务器(其功能是负载均衡,正反向代理)
  • Mysql 是一个关系型数据库已经被Oracle收购
  • php-fpm 是一个FastCGI Process Manager(FastCGI进程管理器)

在Linux中安装软件常见的三种方式就是yum安装、rpm包或者源码编译安装;

0x01 YUM手动安装LNMP

安装环境:Centos 7 安装方法:yum

Step 1.安装LNMP之前要安装EPEL,以便安装源以外的软件,如Nginx,phpMyAdmin等。 提示:EPEL即Extra Packages for Enterprise Linux,企业版linux附加包;这个软件仓库里有很多非常常用的软件,而且是专门针对RHEL设计的,对RHEL标准yum源是一个很好的补充,完全免费使用,由Fedora项目维护,所以如果你使用的是RHEL,或者CentOS,Scientific等RHEL系的linux,可以非常放心的使用EPEL的yum源。

代码语言:javascript
复制
yum update -y && yum upgrade -y
yum install epel-release

Step 2.yum update

代码语言:javascript
复制
yum install nginx 
systemctl start nginx #启动nginx 
systemctl enable nginx #设置开机启动

Step 3.安装PHP

代码语言:javascript
复制
yum install -y php php-devel php-fpm php-mysql php-common php-devel php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt libmcrypt-devel

Step 4.开启php-fpm

代码语言:javascript
复制
systemctl start php-fpm #开启php-fpm 
systemctl enable php-fpm #开机自动启动

Step 5.安装mysql CentOS 7的yum源中貌似没有正常安装mysql时的mysql-sever文件,需要去官网上下载(也可以参照网站上的)

代码语言:javascript
复制
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server

成功安装之后重启mysql服务

代码语言:javascript
复制
# service mysqld restart
初次安装mysql是root账户是没有密码的设置密码的方法
  
# mysql -uroot
mysql> set password for 'root'@'localhost' = password('mypasswd');
mysql> exit

Step 6.配置PHP/nginx参数

A) 修改php.ini的配置

代码语言:javascript
复制
vim /etc/php.ini 
cgi.fix_pathinfo=1 #将注释去掉,开启PHP的pathinfo伪静态功能。
max_execution_time = 0  #脚本运行的最长时间,默认30秒
max_input_time = 300 #脚本可以消耗的时间,默认60秒
memory_limit = 256M #脚本运行最大消耗的内存,根据你的需求更改数值,默认128M
post_max_size = 100M  #单提交的最大数据,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的。限制范围包括表单提交的所有内容.例如:发表贴子时,贴子标题,内容,附件等…默认8M
upload_max_filesize = 10M #上载文件的最大许可大小 ,默认2M

B) 修改php-fpm的配置

代码语言:javascript
复制
vim /etc/php-fpm.d/www.conf 
#找到以下两行,解除注释 
listen.owner = nobody 
listen.group = nobody 

#找下以下两行,将各自的apache改为nginx 
user = apache -> user = nginx 
group = apache -> group = nginx

C) 修改nginx的配置

代码语言:javascript
复制
vim /etc/nginx/conf.d/default.conf  

server {
  listen       80;
  server_name  服务器IP或者域名;
  root   /usr/share/nginx/html;
  location / {
    root   /usr/share/nginx/html;
    index index.php 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   /usr/share/nginx/html;
  }
  #支持php解析
  location ~ \.php$ {
      root           /usr/share/nginx/html;
      try_files $uri = 404;
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
  }
}

Step 7.调试

代码语言:javascript
复制
#查找配置
find / -name nginx.conf

#查看PHP-FPM 监听9000 端口正常
$netstat -npa | grep 9000 
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2142/php-fpm: maste

#改变目录的组和用户
chown nginx.nginx modules/

#修改目录下所有文件所属
chown -R nginx.nginx html

#修改目录下所有文件权限
chmod -R 777 html

8.安装phpmyadmin

代码语言:javascript
复制
a) wget https://files.phpmyadmin.net/phpMyAdmin/4.4.12/phpMyAdmin-4.4.12-all-languages.zip 
b) unzip phpMyAdmin-4.4.12-all-languages.zip 
c) mv phpMyAdmin-4.4.12-all-languages /usr/share/nginx/html/phpmyadmin
d) chown -R nginx.nginx /var/lib/php/session

注:/usr/share/nginx/html/为网站跟目录,我采用Docker进行安装Centos进行验证的

0x02 源码编译安装LNMP

描述:基于手工MAKE源码方式构建LNMP WEB平台,操作步骤、指令非常的繁琐,如果企业要求快速、高效的配置平台,通过手工操作会消耗大量的人力成本,可以引入SHELL编程自动化实现。流程步骤如下:

  • Nginx官网下载Nginx软件包&解压&编译&安装;
  • MYSQL官网下载MYSQL软件包&解压&编译&安装;
  • PHP官网下载PHP软件包&解压&编译&安装;
  • LNMP配置文件整合,创建PHPinfo测试页面&访问。

变量定义说明:

代码语言:javascript
复制
## Define nginx variable
NGX_VER=1.17.9
NGX_URI="http://nginx.org/download/nginx-${NGX_VER}.tar.gz"
NGX_NAME="nginx-${NGX_VER}.tar.gz"
NGX_SRC="${NGX_NAME%.tar.gz}"
NGX_DIR="/usr/local/nginx/${NGX_VER}"
NGX_ARGS="--user=nginx --group=nginx --with-http_stub_status_module"

## Define php-fpm variable
PHP_VER=7.4.3
PHP_SOFT="php-${PHP_VER}.tar.bz2"
PHP_URL="http://mirrors.sohu.com/php/${PHP_SOFT}"
PHP_SRC=${PHP_SOFT%.tar.bz2}
PHP_DIR="/usr/local/php/${PHP_VER}"

## Define Mysql-Boost variable
MYSQL_VER=5.7.29
MYSQL_NAME="mysql-boost-${MYSQL_VER}.tar.gz"
MYSQL_URL="http://mirrors.163.com/mysql/Downloads/MySQL-${MYSQL_VER%.*}/mysql-boost-${MYSQL_VER}"
MYSQL_SRC="${MYSQL_NAME%.tar.gz}"
MYSQL_DIR="/usr/local/mysql/${MYSQL_VER}"
MYSQL_DATADIR="/data/mysql/db"

## Define GCC Variable
GCC_VER=5.5.0
GCC_NAME="gcc-${GCC_VER}"
GCC_SRC="${GCC_VER}.tar.xz"
GCC_URL="http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/${GCC_NAME}/gcc-5.5.0.tar.xz"

软件包说明:

代码语言:javascript
复制
$ls /opt/LNMP/*.tar.gz
/opt/LNMP/mysql-5.7.29.tar.gz  
/opt/LNMP/mysql-boost-5.7.29.tar.gz #推荐下载此版本
/opt/LNMP/mysql-8.0.19.tar.gz  
/opt/LNMP/nginx-1.17.9.tar.gz
Nginx

Nginx 安装Shell脚本:

代码语言:javascript
复制
## [ 安装 nginx ]
function nginx_install(){
    echo -e "\e[32m 安装Nginx中..... \e[0m"

    CHECK_NUM=$(rpm -qa|grep -wcE "gcc|pcre-devel")
  if [ $CHECK_NUM -lt 2 ];then
    yum install -y wget gzip tar make gcc
    yum install -y pcre pcre-devel zlib zlib-devel
  fi

    CHECK_USER=$(getent passwd | grep -wc nginx)
    if [ $CHECK_USER -eq 0 ];then useradd -s /sbin/nologin nginx -M; fi

    if [ ! -f $NGX_NAME ];then
        wget $NGX_URI
    else
        echo -e "\e[31m#Messge: Nginx 已存在 无需下载 \e[0m"
    fi

    if [ ! -d $NGX_SRC ];then tar -zxf $NGX_NAME; fi
    if [ ! -d $NGX_DIR ];then mkdir -p $NGX_DIR; fi

  cd $NGX_SRC && ./configure --prefix=$NGX_DIR $NGX_ARGS 
    if [ $? -eq 0 ];then
    make && make install
    else
        echo -e "\e[31m#Error: 编译失败!终止安装 \e[0m"
        exit
  fi

    #echo -e "\e[32m#Messge: Nginx安装成功正在进行防火墙设置 \e[0m"
    #fireall_set nginx

    echo -e "\e[32m#Messge: 正在启动 Nginx \e[0m"
    if [ ! -f /usr/bin/nginx ];then
        ln -s $NGX_DIR/sbin/nginx /usr/bin/nginx
    fi
    $NGX_DIR/sbin/nginx

    CHECK_STATUS=$(netstat -tlnp | grep -wc "nginx")
    if [ $CHECK_STATUS -ne 0 ];then
        echo -e "\e[32m#Nginx 启动成功.... \e[0m"
    else
        echo -e "\e[31m#Nginx 启动失败.... \e[0m"
    fi
}
MySQL

MySQL 安装Shell脚本:

代码语言:javascript
复制
 ## [ 安装 mysql ]
function mysql_install(){
    echo -e "\e[32m 安装Mysql及其yum 依赖安装中..... \e[0m"
    yum install -y gcc.x86_64 gcc-c++.x86_64 make perl autoconf openssl* ncurses ncurses-devel bison bison-devel xz -y 
  yum install -y automake zlib libxml2 libxml2-devel libgcrypt libtool bison
    # 验证系统中mariadb版本
    # CHECK_MARIADB=$(rpm -qa | grep -w mariadb)
    # if [ $CHECK_MARIADB != "" ];then
    #     rpm -e $CHECK_MARIADB
    # fi

    # MySQL 8.X 需要环境准备gcc 5.0 (还是推荐二进制的吧)
    if [ ! -f ${GCC_SRC} -a ${MYSQL_VER%.*.*} == "8" ];then
        #yum install -y cmake3 
        #wget $GCC_URL
        echo "由于8.x需要安装更高版本的GCC暂时放弃"
        exit
    else
        echo "#当前 MySQL 版本 无需安装高版本的 cmake 以及 gcc"
        yum install -y cmake && cmake --version
    fi
    
    CHECK_USER=$(getent passwd | grep -wc mysql)
    if [ $CHECK_USER -eq 0 ];then
        useradd -s /sbin/nologin mysql -M
    else
        echo -e "MySQL用户已添加"
    fi

    if [ ! -f $MYSQL_NAME ];then
        wget $MYSQL_URL
    else
        echo -e "\e[32m#Messge: MySQL 已存在 无需下载 \e[0m"
    fi

    if [ ! -d $MYSQL_SRC ];then tar -zxf $MYSQL_NAME; fi
    if [ ! -d $MYSQL_DATADIR ];then
        mkdir -p $MYSQL_DATADIR
        mkdir -p /data/mysql/tmp/
        chown -R mysql.mysql /data
    fi

    if [ ! -f $MYSQL_DIR/bin/mysqld ];then
        mkdir -p $MYSQL_DIR
        cd $MYSQL_SRC && cmake . -DWITH_BOOST=./boost -DCMAKE_INSTALL_PREFIX=$MYSQL_DIR/ -DSYSCONFDIR=/etc/my.cnf -DSYSTEMD_PID_DIR=$MYSQL_DATADIR/ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_DATADIR=$MYSQL_DATADIR/ -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DMYSQLX_TCP_PORT=33060 -DTMPDIR=$MYSQL_DATADIR/tmp/ -DWITH_XTRADB_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_JEMALLOC=1 -DMAX_INDEXES=64 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

        if [ $? -eq 0 ];then
        #安装编译时候不建议使用 make -j 4 ,虽然安装快但是可能影响程序的完整性;
        make && make install
        ln -s $MYSQL_DIR/bin/* /usr/bin/
        else  
            echo -e "\e[31m#Error: 编译失败,终止安装.... \e[0m"
            exit
        fi
    fi

    if [ $? -eq 0 ];then
        echo -e "\e[32m#MySQL 安装成功 .....\e[0m"
        cp /etc/my.cnf /etc/my.cnf.bak
cat > /etc/my.cnf<<END
[mysqld]
datadir=/data/mysql/db/
socket=/tmp/mysql.sock
symbolic-links=0
default_authentication_plugin=mysql_native_password
character-set-server=utf8

[mysqld_safe]
log-error=/data/mysql/db/error.log
pid-file=/data/mysql/db/mysql.pid
END
        cd $MYSQL_DIR/
        cp support-files/mysql.server /etc/init.d/mysqld
        chmod +x /etc/init.d/mysqld
        chkconfig --add mysqld
        chkconfig --level 35 mysqld on
        service  mysqld stop
        sed -i "s#^basedir=#basedir=${MYSQL_DIR}#g" /etc/init.d/mysqld
        sed -i "s#^datadir=#datadir=${MYSQL_DATADIR}/#g" /etc/init.d/mysqld
        echo -e "\e[32m##MySQL单机多实例初始化......\e[0m'"
        #--initialize-insecure  不安全即密码为空
        ./bin/mysqld --initialize --user=mysql --basedir=$MYSQL_DIR --datadir=$MYSQL_DATADIR
        # ./bin/mysqld_safe --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/5.7.29/ --user=mysql
        service mysqld start

        CHECK_STATUS=$(netstat -tlnp | grep -wc "mysqld")
        if [ $CHECK_STATUS -ne 0 ];then
            echo -e "\e[32m#MySQL 启动成功.... \e[0m"
            echo -e "\e[32m#sql> mysql -uroot -p'!/K+ak7*RAkR' --connect-expired-password <<EOF\e[0"
            echo -e "\e[32m#alter user user() identified by 'WeiyiGeek' \e[0"
            echo -e "\e[32m#EOF \e[0"
        else
            echo -e "\e[31m#MySQL 启动失败.... \e[0m"
        fi
    else   
        echo -e "\e[31m#Error:安装失败,请检查报错....\e[0m"
        exit
    fi

    echo -e "\e[32m#Messge: MySQL安装成功正在进行防火墙设置 \e[0m"
    #fireall_set mysql
    echo .
}
WeiyiGeek.PHP-fpm安装效果
WeiyiGeek.PHP-fpm安装效果

WeiyiGeek.PHP-fpm安装效果

补充知识: (1) MySQL Boost编译包依赖 描述:从MySQL 5.7.5版本开始依赖于Boost C++库,我们在安装编译的时候需要指定boost目录的路径-DWITH_BOOST=/opt/mysql-8.0.15/boost/,推荐下载含有Boost源码的源码包;

WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

下面主要描述自行安装boost的流程步骤:

代码语言:javascript
复制
#1.YUM/RPM包方式安装boost
https://www.rpmfind.net/linux/rpm2html/search.php

#2.官网进行安装(上面那种方式版本数量有限,不一定满足需求)
https://sourceforge.net/projects/boost/
#安装方式
tar -zxf boost.tar.gz && cd ./boost
./bootstrap.sh --prefix=/usr/local/boost
./b2 install

注意事项:

  • 1.源码安装MySQL时候选择带boost源码的MySQL源码安装包进行安装-DWITH_BOOST=./boost,否则在编译时候在线下载-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost/(访问国外网站时选择否则您会知道什么叫做绝望);
WeiyiGeek.DDOWNLOAD_BOOST
WeiyiGeek.DDOWNLOAD_BOOST

WeiyiGeek.DDOWNLOAD_BOOST

  • 2.安装编译时候不建议使用 make -j 4 ,虽然安装快但是可能影响程序的完整性;
  • 3.如果想修改MySQL版本号的头文件,实际不建议进行修改include/mysql_version.h.in;
  • 4.MySQL 8.0 需要依赖 cmake3 可选 gcc 5.x(4.8.5经测试没有问题),如果编译过程中产生错误则清空CMakeCache.txt文件后解决对应错误,重新编译即可。
  • 5.安装新版本的GCC后,为了保证原始的GCC可用把新版本做个软链接即可,并且可以在cmake编译参数里设置绝对路径-DCMAKE_CXX_COMPILER=/usr/local/bin/g++ -DCMAKE_C_COMPILER=/usr/local/bin/gcc
  • 6.不同的MySQL版本依赖的最低Boost版本是不一样的需要在cmake编译前查看boost中requires boost_1_xx_0;
PHP-FPM

描述: FPM(`FastCGI 进程管理器|FastCGI Process Manager)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。 PHP 安装Shell脚本:

代码语言:javascript
复制
function php_install(){
    echo -e "\e[32m#Message: 正在进行安装php环境..... \e[0m"
    if [ ! -f $PHP_SOFT ];then
        wget $PHP_URL
    else
       echo -e "\e[32m#Message: 源码文件已经存在无需重新下载 \e[0m"
    fi

    CHECK_USER=$(getent passwd | grep -wc "www")
    if [ $CHECK_USER -eq 0 ];then useradd -M -s/sbin/nologin www; fi

    echo -e "#PHP依赖安装"
    yum install libxml2 libxml2-devel gzip bzip2 sqlite-devel -y

    if [ ! -d $PHP_SRC ];then
        tar jxf $PHP_SOFT
        mkdir -p $PHP_DIR
        mkdir -p /etc/php/
    fi

    cd $PHP_SRC && ./configure --prefix=$PHP_DIR --with-config-file-path=$PHP_DIR/php-config --with-pdo-mysql=mysqlnd --enable-mysqlnd --enable-fpm

    if [ $? -eq 0 ];then
        echo -e "\e[32m#Message: PHP 编译成功正在执行make && make install 安装操作 \e[0m"
        make && make install
        ln -s $PHP_DIR/etc/* /etc/php/
    else
        echo -e "\e[31m#Error: 编译失败终止安装.... \e[0m"
        exit
    fi

    #配置 php-fpm 配置文件
    cp php.ini-development $PHP_DIR/php.ini
  cp $PHP_DIR/etc/php-fpm.conf.default $PHP_DIR/etc/php-fpm.conf
    cp $PHP_DIR/etc/php-fpm.d/www.conf.default $PHP_DIR/etc/php-fpm.d/www.conf

    #由于下面需要使用systemctl来启动为了不动启动配置文件所以进行设置
    sed -i 's#;error_log = log/php-fpm.log#error_log = /var/log/php-fpm.log' $PHP_DIR/etc/php-fpm.conf
    sed -i 's#;pid = run/php-fpm.pid#pid = /var/run/php-fpm.pid' $PHP_DIR/etc/php-fpm.conf
    sed -i 's#nobody#www#g' $PHP_DIR/etc/php-fpm.conf

    #方式1:配置/etc/init.d/进行启动
    cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
  chmod o+x /etc/init.d/php-fpm
    service php-fpm restart

    #方式2:配置systectl启动
    cp sapi/fpm/php-fpm.service /usr/lib/systemd/user/php-fpm.servic
    systemctl daemon-reload
    # systemctl start php-fpm
    # systemctl status php-fpm

    if [ ! -f /usr/bin/php-fpm ];then
        ln -s $PHP_DIR/sbin/php-fpm /usr/bin/php-fpm
    fi

    CHECK_STATUS=$(netstat -tlnp | grep -wc "php-fpm")
    if [ $CHECK_STATUS -eq 0 ];then
        echo -e "\e[32m#Message: 启动失败请请检查错误原因后重试.... \e[0m"
    else
         echo -e "\e[32m#Message: 启动成功.... \e[0m"
    fi
}
WeiyiGeek.PHP-FPM编译执行结果
WeiyiGeek.PHP-FPM编译执行结果

WeiyiGeek.PHP-FPM编译执行结果

脚本执行效果:

WeiyiGeek.php-FPM执行效果
WeiyiGeek.php-FPM执行效果

WeiyiGeek.php-FPM执行效果

安装异常记录:

问题1: php-fpm Failed to open error_log Read-only file system (30) 错误信息:

代码语言:javascript
复制
Mar 05 13:26:13 weiyigeek php-fpm[18283]: [05-Mar-2020 13:26:13] ERROR: failed to open error_log (/usr/local/php/7.4.3/var/log/php-fpm.log): Read-only file system (30)

错误原因:

代码语言:javascript
复制
#1.由于我们安装路径在/usr/且没有进行error 与 pid file文件的默认路径
/usr/local/php/7.4.3/var/log/php-fpm.log
/usr/local/php/7.4.3/var/run/php-fpm.pid

#2.我们采用Systemctl管理的方式进行启动,由于Systemctl有一个ProtectSystem参数,从描述中我们可以知道 /usr, /boot, and /etc 对于这个单元调用的进程,目录是只读的不能进行写操作(注意通过/etc/init.d/启动不存在该错误)
# Mounts the /usr, /boot, and /etc directories read-only for processes invoked by this unit.
ProtectSystem=full

解决办法:

  • 方式1:打开 /usr/lib/systemd/system/php-fpm.service 设置如下 ProtectSystem=false
  • 方式2:修改 php-fpm.conf 配置文件夹中的error_file 和 pid_file 到 /var/目录中即可

问题2: ERROR: failed to post process the configuration 报错信息:

代码语言:javascript
复制
ALERT: [pool www] pm.min_spare_servers(0) must be a positive value
ERROR: failed to post process the configuration

问题原因:

  • #1.在php-fpm安装目录下的/etc/php-fpm.conf未配置pm.min_spare_servers(0)参数以及pid/log配置文件有误

解决方法:

代码语言:javascript
复制
#1.再次编辑php-fpm.conf找到pm.min_spare_server ;pm.min_spare_servers = 5 去除;号。
sed -i 's/;pm.max_spare_servers = 35/pm.max_spare_servers = 35/g' /usr/local/php/etc/php-fpm.conf
sed -i 's/;pm.start_servers = 20/pm.start_servers = 20/g' /usr/local/php/etc/php-fpm.conf

问题3:php-fpm启动时候:No pool defined 报错信息:

代码语言:javascript
复制
[28-Nov-2018 17:13:23] ERROR: No pool defined. at least one pool section must be specified in config file
[28-Nov-2018 17:13:23] ERROR: failed to post process the configuration #上面出现过常常就是配置文件错问题
[28-Nov-2018 17:13:23] ERROR: FPM initialization failed

错误原因:由于我们没有进行对pool配置文件进行配置;

解决方法:进入PHP安装目录/etc/php-fpm.d/然后执行 cp www.conf.default www.conf 即可

暂时存放

代码语言:javascript
复制
#php-fpm的运行参数
$ php-fpm --fpm-config /usr/local/etc/php/5.4/php-fpm.conf --prefix /usr/local/var

-p,--prefix) 指定放置运行时文件的相对路径前缀

0x03 LNMP综合实践

综合配置脚本示例说明:

代码语言:javascript
复制
function lnmp_config(){
    echo -e "\e[32m#LNMP 测试配置....\e[0m"
    cp $NGX_DIR/conf/nginx.conf{,.bak}
cat > $NGX_DIR/conf/nginx.conf <<EOF
user nginx;
worker_processes  1;
error_log  logs/error.log;
#pid       logs/nginx.pid;
events {
    worker_connections  1024;
}
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  65;
    #gzip  on;
    server {
        listen       9081;
        server_name  my.weiyigeek.top;
        charset utf-8;
        #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;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location / {
           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;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        location ~ /\.ht {
           deny  all;
        }
    }
}
EOF
    echo "<?php  phpinfo(); ?>" > $NGX_DIR/html/phpinfo.php
    echo "<?php  echo "Hello World! php" ?>" > $NGX_DIR/html/index.php
    $NGX_DIR/sbin/nginx -s reload
}

最终执行程序所属者查看:

代码语言:javascript
复制
$ps aux | grep -E "nginx|php-fpm|mysql"
root      4511  0.0  0.0  11820  1592 ?        S    20:54   0:00 /bin/sh /usr/local/mysql/5.7.29/bin/mysqld_safe --datadir=/data/mysql/db/ --pid-file=/data/mysql/db//weiyigeek.pid
mysql     4687  0.0  1.1 1797852 186644 ?      Sl   20:54   0:00 /usr/local/mysql/5.7.29/bin/mysqld --basedir=/usr/local/mysql/5.7.29 --datadir=/data/mysql/db --plugin-dir=/usr/local/mysql/5.7.29/lib/plugin --user=mysql --log-error=/data/mysql/db/error.log --pid-file=/data/mysql/db//weiyigeek.pid --socket=/tmp/mysql.sock
root     13942  0.0  0.0  47916  4804 ?        Ss   21:49   0:00 php-fpm: master process (/usr/local/php/7.4.3/etc/php-fpm.conf)
php      13943  0.0  0.0  47916  5124 ?        S    21:49   0:00 php-fpm: pool www
php      13944  0.0  0.0  47916  5628 ?        S    21:49   0:00 php-fpm: pool www
root     14917  0.0  0.0  20568   652 ?        Ss   21:58   0:00 nginx: master process nginx
nginx    14918  0.0  0.0  20928  1596 ?        S    21:58   0:00 nginx: worker process

安装异常记录: 问题1.Nginx + php-fpm 访问php文件时候显示 常见错误原因:

  1. php-fpm找不到SCRIPT_FILENAME里执行的php文件
  2. php-fpm不能访问所执行的php也就是权限问题

情况1解决方法:

代码语言:javascript
复制
#(1)在location体中里面添加当文件不存在时返回404而不是交给php-fpm进行处理
location ~ \.php$ {
    #文件不存在转404
    try_files $uri = 404;
}

#(2)fastcgi_param 参数指定有误
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    #fastcgi_param  SCRIPT_FILENAME  /script$fastcgi_script_name; //采用下面方式进行替换
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
systemctl restart nginx(/usr/local/nginx/sbin/nginx) #重新加载nginx配置文件

情况2解决方法:

代码语言:javascript
复制
第一种,就是把你root文件夹设为其他用户允许
第二种,找到你的php-fpm.conf的配置文件,找到下面这段,把apache替换成你要的用户组

; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
WeiyiGeek.phpinfo
WeiyiGeek.phpinfo

WeiyiGeek.phpinfo


0x04 工具补充

wlnmp安装部署包

描述:wlnmp支持CentOS6、7、8一键部署lnmp环境官网:https://www.wlnmp.com 安装使用简单说明:

代码语言:javascript
复制
#(1)建议阿里云镜像配置epel源(必须)
yum install epel-release

#(2)添加WLNMP一键安装包源
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm

#(3)安装LNMP
# Nginx
# php: php5.6/php7.0/php7.1/php7.2/php7.3/php7.4
# php扩展: php5.6/php7.0/php7.1/php7.2/php7.3
# k-v数据库:redis4.x/redis5.x/memcached
# 关系型数据库:MySQL5.5/MySQL5.6/MySQL5.7/MySQL8.0
yum install wnginx wphp74 wmysql57 wphp57-memcache

#(4)修改MySQL密码(默认密码为空)
mysql -uroot -p
mysql> set password = password('weiyigeek');  #5.7.x
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'WeiyiGeek'; #8.x

#(5)nginx中php配置,在nginx配置文件中,找到安装对应php的版本,取消前面#注释,重启nginx即可
#include enable-php56.conf;
#include enable-php70.conf;
#include enable-php71.conf;
#include enable-php72.conf;
#include enable-php73.conf;
#include enable-php74.conf;

#(6)各项服务启动
/etc/init.d/*
/etc/init.d/nginx start


#(7)版本升级
yum update wnginx
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 快速入门
  • 0x01 YUM手动安装LNMP
  • 0x02 源码编译安装LNMP
    • Nginx
      • MySQL
        • PHP-FPM
        • 0x03 LNMP综合实践
        • 0x04 工具补充
          • wlnmp安装部署包
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档