zoukankan      html  css  js  c++  java
  • LNMP环境搭建网站

    系统:Centos7.4

    一台服务器安装nginx、php、mysql

    原理不是很懂,但实测如下两种环境下都能成功,这里做下记录:

    1、一个干净的系统,从0开始完成所有步骤,完成LNMP搭建

    2、已经装了mysql,之后再装nginx、php,完成LNMP搭建(安装php编译时要注意指定mysql的安装路径等信息)

    注意:安装前一定检查是否装有mariadb数据库(系统安装时选择某项安装会集成安装上的),若有请卸载,不然后面初始化mysql时会报错,百度了很久都没找原因,都说是权限问题,后来在重复搞整时看到有关于mariabd的打印,猜测是这个原因,卸载mariadb问题解决。

    Can't create/write to file '/data/mysql/xx.pid' (Errcode: 13)

    步骤如下:

    一、源码ginx安装

    1、安装nginx需要的环境依赖库、工具等

    yum -y install pcre pcre-devel openssl-devel openssh  wget 

    2、下载nginx安装包至/usr/local/src下

    wget -c -P /usr/local/src http://mirrors.yangxingzhen.com/nginx/nginx-1.13.4.tar.gz

    3、安装编译器

    yum -y install gcc gcc-c++

    4、编译安装nginx

    cd /usr/local/src

    tar zxf nginx-1.13.4.tar.gz

    cd /src/nginx-1.13.4

    #编译前可以根据企业实际需要选择是否隐藏nginx版本等信息

    sed -i -e 's/1.13.4/123/g' -e 's/nginx//abc/g' -e 's/"NGINX"/"abc"/g'  ./src/core/nginx.h

    #预编译(根据实际需求添加相应模块)

    ./configure --user=www --group=www --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-http_ssl_module

    #编译、安装(-j8表示同时用8核CPU进行编译)

    make -j8 && make install

    5、创建nginx启动用户,默认用户为www,不授予登陆权限

    useradd -s /sbin/nologin www

    6、启动nginx并测试是否能正常访问

    #检测配置文件是否正确

    /usr/local/nginx/sbin/nginx -t

    #启动nginx

    /usr/local/nginx/sbin/nginx

    7、根据具体需求对nginx.conf配置文件进行修改调整

    cp /usr/local/nginx/conf/nginx.conf   /usr/local/nginx/conf/nginx.conf.bak

    #为方便查看配置文件,可将多余的注释和空行清空

    grep -vE "^$|#"  nginx.conf.default >nginx.conf

    #修改配置

    vim  /usr/local/nginx/conf/nginx.conf

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        include conf.d/*.conf;    # 开启虚拟主机,将会去此目录下找配置文件,在找不到时才会往下进行
        server {
            listen       80;
            server_name  abc.c.com;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

     #创建虚拟主机配置文件目录并创建一个配置,如nginx.conf配置所示,conf.d文件夹与nginx.conf配置文件处于同级。

    mkdir -p /usr/local/nginx/conf/conf.d

    vim /usr/local/nginx/conf/conf.d/abc1.conf    #应该根据具体需求进行配置

    server{
        listen 80;
        server_name  www.abc.com;
        root /usr/local/nginx/html/abc/public; # 该项要修改为你准备存放相关网页的路径
    
        location / {
            index  index.php index.html index.htm;
             #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
             if (!-e $request_filename)
             {
                #地址作为将参数rewrite到index.php上。
                rewrite ^/(.*)$ /index.php?s=$1;
                #若是子目录则使用下面这句,将subdir改成目录名称即可。
                #rewrite ^/subdir/(.*)$ /subdir/index.php?s=$1;
             }
        }
    
            location /api/ {
            index  index.php index.html index.htm;
             #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
             if (!-e $request_filename)
             {
                #地址作为将参数rewrite到index.php上。
                #rewrite ^/(.*)$ /index.php?s=$1;
                #若是子目录则使用下面这句,将subdir改成目录名称即可。
                rewrite ^/api/(.*)$ /api/index.php?s=$1;
             }
        }
    
            location ~* ^/upload/.+.(html|php)$ {
                    return 404;
            }
    
            location ~* ^/plugins/.+.(html|php)$ {
                    return 404;
            }
    ▽
            location ~* ^/themes/.+.(html|php)$ {
                    return 404;
            }
    
        #proxy the php scripts to php-fpm
        location ~ .php {
                include fastcgi_params;
                ##pathinfo支持start
                #定义变量 $path_info ,用于存放pathinfo信息
                set $path_info "";
                #定义变量 $real_script_name,用于存放真实地址
                set $real_script_name $fastcgi_script_name;
                #如果地址与引号内的正则表达式匹配
                if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
                        #将文件地址赋值给变量 $real_script_name
                        set $real_script_name $1;
                        #将文件地址后的参数赋值给变量 $path_info
                        set $path_info $2;
                }
                #配置fastcgi的一些参数
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
                ###pathinfo支持end
            fastcgi_intercept_errors on;
    
            fastcgi_pass   127.0.0.1:9000;
            # fastcgi_pass 如果是 sock形式,可能是下面的配置
            # fastcgi_pass unix:/tmp/php-cgi.sock
        }
    
    }
    

    #平滑重启nginx,访问域名查看是否有结果(如果是静态网站,现在能正常访问了,但这里是动态网站,需要php解释器,还需要连接数据库,访问肯定是报错一堆)

    /usr/local/nginx/sbin/nginx -s reload

    二、mysql数据库安装

    1、安装依赖环境

    yum -y install cmake ncurses-devel perl  autoconf  

    2、下载安装包

    cd /usr/loca/src

    wget  http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39.tar.gz

    3、 编译安装

    tar zxf mysql-5.6.39.tar.gz

    cd mysql-5.6.39

    #预编译(根据经验,感觉是将以下配置写入my.cnf默认配置中,所以只要你不修改my.cnf配置文件,以下配置就属于默认配置,若修改了my.cnf配置文件就以修改后为准)

    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
    -DMYSQL_DATADIR=/data/mysql 
    -DSYSCONFDIR=/etc 
    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock 
    -DMYSQL_USER=mysql 
    -DMYSQL_TCP_PORT=3306 
    -DWGE_ENGINE=1 
    -DWITH_INNOBASE_STORAGE_ENGINE=1 
    -DWITH_PARTITION_STORAGE_ENGINE=1 
    -DWITH_BLACGINE=1 
    -DWITH_MYISAM_STORAGE_ENGINE=1 
    -DWITH_READLINE=1 
    -DENABLED_LOCAL_INFILE=1 
    -DWITH_EXDDEFAULT_CHARSET=utf8 
    -DDEFAULT_COLLATION=utf8_general_ci 
    -DEXTRA_CHARSETS=all 
    -DWITH_BIG_DEBUG=0

    将知道的进行解释(其它的以后查到了再进行更新):

    -DCMAKE_INSTALL_PREFIX=  #指定安装目录
    -DMYSQL_DATADIR=  #指定数据库的存放目录即数据目录
    -DSYSCONFDIR=  #指定默认my.cnf配置文件路径,如果遇到一个服务器装多个mysql时,可以对其进行修改,实测有效。
    -DMYSQL_UNIX_ADDR=  #sock命令以及存放路径指定,一台服务器多个mysql时,不要重名
    -DMYSQL_USER=  #指定mysql启动使用的用户
    -DMYSQL_TCP_PORT=  #指定数据库端口
    -DWITH_EXDDEFAULT_CHARSET=  #设置默认数据库字符集
    ----------------------------------------------------------------------------
    #编译、安装
    make -j8 && make install

    4、创建mysql启动用户
    useradd -s /sbin/nologin mysql

     5、mysql安装目录授权(编译安装时会自动创建目录)、数据目录创建(数据库初始化时要用,所以必须提前创建)和授权等

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

    mkdir -p /data/mysql

    chown -R mysql:mysql /data/mysql

    6、修改my.cnf配置文件(很初始的配置,根据实际需求进行调整)

    vim /etc/my.cnf

    [client]
    default-character-set = utf8
    [mysql]
    default-character-set = utf8
    [mysqld]
    datadir = /data/mysql
    socket = /tmp/mysql.sock
    user = mysql
    log-error = /var/log/mysqld.log
    character_set_server = utf8
    

    7、初始化数据库(会在/data/mysql下根据my.cnf配置初始创建一些数据文件和库文件,如果是新装数据库,可重复初始化,每次初始化前将原来生成的文件删除干净。已投入生产的不要此操作.)

    /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
    

    8、启动数据库

    #软链接让mysql的命令全局直接使用

    ln -s /usr/local/mysql/bin/* /usr/bin

    #数据库系统启动制作

    cp /usr/local/mysql/support-files/mysql.server   /etc/init.d/mysqld  #若一台服务器多个mysql可以重新命名如根据数据库版本来区分,mysqld55或mysqld56

    chmod o+x /etc/init.d/mysqld   

    /etc/init.d/mysqld start或service mysqld start

    #设置开机启动

    chkconfig --add mysqld

    hkconfig mysqld on

    chkconfig --list mysqld

     三、PHP(FastCGI)安装

    1、安装php函数依赖库等

    yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

    2、安装libmcrypt库、mhash加密扩展库、mcrypt加密扩展库(根据实际需要进行安装)

    #提前安装epel.repo扩展源,不然无法进行安装(根据实际系统版本指定epel-6或epel-7)

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

    yum -y install libmcrypt-devel mhash mcrypt

    3、源码安装libiconv(系统环境不同编译时可能会出现部分系统报错,实测有些系统报错,有些没有报错)

    cd /usr/local/src

    wget -c http://mirrors.yangxingzhen.com/libiconv/libiconv-1.14.tar.gz

    tar zxf libiconv-1.14.tar.gz

    cd libiconv-1.14

    ./configure --prefix=/usr/local/libiconv

    #编译时若出现报错,可按此操作解除。

    make -j8 && make install

    解决办法:

    find . -name "stdio.in.h"

    ./srclib/stdio.in.h

    vim ./srclib/stdio.in.h

    大概在698行位置,删除stdio.in.h文件中_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");行即可

     #重新进行编译安装就过了

    make -j8 && make install

    4、源码安装php

    cd /usr/local/src

    wget -c http://mirrors.sohu.com/php/php-5.6.29.tar.gz

    tar zxf php-5.6.29.tar.gz

    cd php-5.6.29

    ln -s /usr/local/mysql/lib/libmysqlclient.so.18  /usr/lib64

    #预编译(参数中有关于mysql的信息,比如指定mysql的安装路径,一定要正确配置

    ./configure --prefix=/usr/local/php 
    --with-config-file-path=/usr/local/php/etc 
    --with-mysql=/usr/local/mysql 
    --with-mysqli=/usr/local/mysql/bin/mysql_config 
    --with-pdo-mysql=/usr/local/mysql 
    --enable-opcache 
    --with-gettext 
    --with-iconv-dir=/usr/local/libiconv 
    --with-freetype-dir 
    --with-jpeg-dir 
    --with-png-dir 
    --with-zlib 
    --with-libxml-dir 
    --enable-xml 
    --disable-rpath 
    --enable-bcmath 
    --enable-shmop 
    --enable-sysvsem 
    --enable-inline-optimization 
    --with-curl 
    --enable-mbregex 
    --enable-fpm 
    --enable-mbstring 
    --with-mcrypt 
    --with-gd 
    --enable-gd-native-ttf 
    --with-openssl 
    --with-mhash 
    --enable-pcntl 
    --enable-sockets 
    --with-xmlrpc 
    --enable-soap 
    --enable-short-tags 
    --enable-static 
    --with-fpm-user=www 
    --with-fpm-group=www 
    --enable-ftp 
    --enable-zip
    

    #编译安装

    make -j8&&make install

    5、配置并启动php

    先从源码包拷贝php.ini文件到etc下

    cp /usr/local/src/php-5.6.29/php.ini-development  /usr/local/php/etc/php.ini

    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

    #启动php

    /usr/local/php/sbin/php-fpm

    四、web站点配置

    1、将web代码放置nginx配置文件指定目录下,并修改权限

    通常情况下需要将代码文件所属用户指定为nginx启动用户(www),不然会出现无访问访问权限导致报错

    chown -R www:www  /usr/local/nginx/html/abc

    2、创建库、数据库访问用户,并导入后端数据库

    mysql -uroot -p

    create database abc character set=utf8;

    grant all on abc.* to userabc@'localhost' identified by '123456';

    source  abc.sql

    flush privileges;

    3、将nginx、php-fpm重启,并访问站点。

    未至精疲力尽,不要怨天尤人。昨日因,今日果。今日为,明日果也!
  • 相关阅读:
    通道分离与合并
    opencv颜色表操作
    opencv trackbar
    像素操作
    opencv 像素读写
    py 时间与日期
    py 字典
    py 元组
    py 列表
    课后作业-阅读任务-阅读提问-3
  • 原文地址:https://www.cnblogs.com/ccit/p/10078288.html
Copyright © 2011-2022 走看看