zoukankan      html  css  js  c++  java
  • LNMP安装201812012237


    发表这篇文章最初的意愿是想做个最新版的zabbix使用,后来看了下好多“软件”都升级了(如nginx、mysql等),就想干脆做个最新版本的LNMP环境得了,再单独做zabbix的最新版本省得以后升级

    好了,废话不多说,上步骤.......


    cat /etc/centos-release
    CentOS Linux release 7.4.1708 (Core)
    uname -r
    3.10.0-693.el7.x86_64


    master IP 192.168.1.122


    所有软件包位置: /home/LNMP
    所有软件安装位置: /usr/loca/

    声明:该教程是在虚拟机下运行的,编译mysql时的机器配置是4G内存,双核。
    编译完mysql后正常使用时的配置是448M内存,单核CPU,仅供测试使用


    关闭防火墙:
    setenforce 0 #临时
    systemctl stop firewalld
    systemctl disable firewalld
    vim /etc/selinux/config
    SELINUX=disabled


    安装依赖:
    yum -y install gcc gcc-c++ ncurses ncurses-devel cmake

    添加mysql禁止登陆的用户
    groupadd mysql && useradd -r -g mysql -s /sbin/nologin mysql


    mysql目录规划
    mysql安装目录:/usr/local/mysql
    mysql数据目录:/var/lib/mysql
    mysql日志目录:/var/log/mysql
    mkdir /usr/local/mysql && chown -R mysql.mysql /usr/local/mysql
    mkdir /var/lib/mysql && chown -R mysql.mysql /var/lib/mysql
    mkdir /var/log/mysql && chown -R mysql.mysql /var/log/mysql


    下载包,解压MySQL并编译安装:
    注:mysql-boost-5.7.20.tar.gz此版本带有boost
    cd /home/LNMP
    wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.24.tar.gz
    tar -zxvf mysql-boost-5.7.24.tar.gz
    cd mysql-5.7.24
    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
    -DMYSQL_DATADIR=/var/lib/mysql
    -DDOWNLOAD_BOOST=1
    -DWITH_BOOST=/home/LNMP/mysql-5.7.24/boost
    -DSYSCONFDIR=/etc
    -DWITH_INNOBASE_STORAGE_ENGINE=1
    -DWITH_PARTITION_STORAGE_ENGINE=1
    -DWITH_FEDERATED_STORAGE_ENGINE=1
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1
    -DWITH_MYISAM_STORAGE_ENGINE=1
    -DENABLED_LOCAL_INFILE=1
    -DENABLE_DTRACE=0
    -DDEFAULT_CHARSET=utf8
    -DDEFAULT_COLLATION=utf8_general_ci
    -DWITH_EMBEDDED_SERVER=1

    make -j 4 && make install
    (此过程比较长)


    配置my.cnf文件     (手动添加并编辑该文件)
    vim /etc/my.cnf
    [client]
    port=3306
    socket=/var/lib/mysql/mysql.sock
    default-character-set=utf8

    [mysqld]
    port=3306
    user=mysql
    datadir=/var/lib/mysql/data
    socket=/var/lib/mysql/mysql.sock
    log-error=/var/log/mysql/mysql.err
    pid-file=/var/run/mysql/mysql.pid
    character-set-server=utf8
    server-id=1
    slow_query_log=ON
    long_query_time=2
    slow_query_log_file=/var/log/mysql/query_log
    log_queries_not_using_indexes=ON
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    character-set-server = utf8
    init-connect = 'SET NAMES utf8'
    collation-server = utf8_general_ci
    explicit_defaults_for_timestamp=true

    [mysqld_safe]
    log-error=/var/log/mysql/mysql.err
    pid-file=/var/run/mysql/mysql.pid

    touch /var/log/mysql/{mysql.err,query_log}
    chown -R mysql.mysql /var/log/mysql/
    chown -R mysql.mysql /usr/local/mysql/
    mkdir /var/run/mysql
    chown -R mysql.mysql /var/run/mysql

    mkdir -p /var/lib/mysql/data

    chown -R mysql.mysql /var/lib/mysql

    初始化数据库:
    cd /usr/local/mysql/bin/      #mysql安装的位置
    ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql/data
    ######################################################################################
    坑1:[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    解决1:在/etc/my.cnf中的mysqld的段中添加explicit_defaults_for_timestamp=true
    再执行上面的初始化命令即可
    ######################################################################################
    ./mysql_ssl_rsa_setup    #生成秘钥类似的东西,具体是什么还没去细究。该步按需操作


    启动数据库:
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    启动mysql:
    /etc/init.d/mysqld start
    ######################################################################################
    坑2:
    Starting MySQL. ERROR! The server quit without updating PID file (/var/run/mysql/mysql.pid).
    解决:/etc/init.d/mysqld status
    ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
    rm -rf /var/lib/mysql/data/*    #删除数据目录下的所有
    chown mysql.mysql /var/lib/mysql/    #修改数据目录的权限
    mkdir /var/run/mysql
    chown -R mysql.mysql /var/run/mysql
    /etc/init.d/mysqld start   #还有一种可能就是要重新初始化数据库

    坑3:

    日志中显示:

    2019-05-01T09:39:41.098841Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
    2019-05-01T09:39:41.098966Z 0 [ERROR] Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files.

    解决: rm -rf /var/lib/mysql/* && cd /usr/local/mysql/bin && ./mysqld --initialize-insecure              #单独执行,后面什么都不加

    [root@node1 bin]# /etc/init.d/mysqld start
    Starting MySQL. SUCCESS!

    ######################################################################################
    修改数据库mysql用户的密码:
    vim /etc/my.cnf
    skip-grant-tables    #手动添加该行

    /etc/init.d/mysqld restart

    登录数据库:
    /usr/local/mysql/bin/mysql #此时登录数据库是将不要密码,直接按回车即可

    修改密码:
    use mysql;
    update mysql.user set authentication_string=password('123456') where user='root';
    查看:
    select user,host,authentication_string from mysql.user;
    刷新:
    flush privileges;
    修改完毕后exit退出mysql,并再次打开/etc/my.cnf把skip-grant-tables行删除后重启下mysql后即可登录


    修改环境变量
    vim /etc/profile
    PATH=/usr/local/mysql/bin/:$PATH
    export PATH

    数据库备份:
    mysqldump --defaults-extra-file=/etc/my.cnf database > /data/mysql_bak/bak_test.sql    //备份导出数据库
    mysql --defaults-extra-file=/etc/my.cnf database < test_db.sql    //导入数据库


    问题总结:
    mysql -uroot -p123456 -e"grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by '123456';"
    提示:mysql: [Warning] Using a password on the command line interface can be insecure.
    解释:mysql5.7不能-p直接输入密码,把-p后面的密码去掉其他不变即可


    nginx安装
    参考地址:https://www.cnblogs.com/zhang-shijie/p/5294162.html
    下载地址:http://nginx.org/download/
    cd /home/LNMP/
    groupadd nginx && useradd -r -g nginx -s /sbin/nologin nginx
    yum -y install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel
    wget http://nginx.org/download/nginx-1.15.7.tar.gz
    tar -zxvf nginx-1.15.7.tar.gz
    cd nginx-1.15.7
    ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx
    --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log
    --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid
    --lock-path=/var/lock/nginx.lock --group=nginx --with-http_ssl_module
    --with-http_stub_status_module --with-http_gzip_static_module
    --http-client-body-temp-path=/var/tmp/nginx/client/ --user=nginx
    --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
    --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre

    make && make install

    启动前的修改:
    vim /usr/local/nginx/conf/nginx.conf
    user nginx nginx;    #修改启动关闭ngixn的用户
    error_log /var/log/nginx/error.log;    #修改错误日志位置
    listen 8001;    #修改监听端口,避免和其他发生冲突

    mkdir -p /var/tmp/nginx/client/
    mkdir /var/run/nginx    #nginx.pid的存放位置

    /usr/local/nginx/sbin/nginx    #启动nginx
    /usr/local/nginx/sbin/nginx/nginx -s reload    #不停止服务重读配置文件
    /usr/local/nginx/sbin/nginx/nginx -s stop    #停止服务
    ln -s /usr/local/nginx/sbin/nginx /usr/bin/    #做个软连接
    ########################################################################
    支持的信号:
    kill -QUIT 13337    #平缓关闭Nginx,即不再接受新的请求,但是等当前请求处理完毕后再关闭Nginx。
    kill -TERM 21665    #快速停止Nginx服务
    kill -HUP 21703    #使用新的配置文件启动进程然后平缓停止原有的nginx进程,即平滑重启。
    kill -USR1 21703    #重新打开配置文件,用于nginx 日志切割
    ########################################################################
    日期切割的脚本:
    #!/bin/bash
    PID=`cat /var/run/nginx/nginx.pid`
    mv /var/log/nginx/access.log /var/log/nginx/`date +%Y_%m_%d:%H:%M:%S`.access.log
    kill -USR1 $PID
    [root@Server1 nginx]# kill -USR2 21703      #使用新版本的nginx文件启动服务,然后在平缓停止原有的nginx服务,即平滑升级。
    [root@Server1 nginx]# kill -WINCH 21703    #平滑停止nginx的工作进程,用于nginx平滑升级。
    ########################################################################


    PHP安装:
    cd /home/LNMP
    安装依赖:
    yum -y install libxml2 libxml2-devel curl-devel libjpeg-devel libpng-devel freetype-devel
    libxslt libxslt-devel cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib
    m4 autoconf gcc gcc-c++ openssl openssl-devel pcre pcre-devel zlib zlib-devel wget net-tools zip

    创建组群:
    groupadd php-fpm && useradd -s /sbin/nologin -g php-fpm -M php-fpm

    下载包:
    wget http://cn2.php.net/distributions/php-7.2.12.tar.gz
    tar -zxvf php-7.2.12.tar.gz
    cd php-7.2.12

    ./configure --prefix=/usr/local/php7.2
    --with-config-file-path=/usr/local/php7.2/etc
    --with-curl --with-gd --with-gettext --with-iconv-dir
    --with-kerberos --with-libdir=lib64 --with-libxml-dir=/usr/                            
    --with-openssl --with-pcre-regex --with-pdo-sqlite
    --with-pear --with-xmlrpc --with-xsl --with-zlib
    --enable-fpm --enable-bcmath --enable-libxml
    --enable-inline-optimization --enable-mbregex
    --enable-mbstring --enable-opcache --enable-pcntl
    --enable-shmop --enable-soap --enable-sockets
    --enable-sysvsem --enable-xml --enable-zip
    --enable-static --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
    --with-freetype-dir --with-jpeg-dir --with-png-dir
    --disable-debug --disable-fileinfo --enable-fpm

    注: --with-libxml-dir=/usr 这个参数在centos7.5上会报 collect2: error: ld returned 1 exit status make: *** [sapi/cli/php] 错误 1 加上/usr即可

    make && make install

    /usr/local/php7.2/bin/php -v      #查看php版本,也是查看安装是否安装成功

    cd /usr/local/php7.2/etc/
    cp /home/LNMP/php-7.2.12/php.ini-production php.ini
    cp php-fpm.conf.default php-fpm.conf

    配置php-fpm
    cd php-fpm.d/
    [root@localhost php-fpm.d]# pwd
    /usr/local/php7.2/etc/php-fpm.d
    cp www.conf.default www.conf
    find / -name php-fpm
    /home/LNMP/php-7.2.12/sapi/fpm/php-fpm
    /var/spool/mail/php-fpm
    /usr/local/php7.2/sbin/php-fpm
    cp /home/LNMP/php-7.2.12/sapi/fpm/php-fpm /etc/init.d/
    chmod +x /etc/init.d/php-fpm

    启动php:
    /etc/init.d/php-fpm
    查看php-fpm启动状况
    ps -ef | grep php-fpm
    修改php.ini相关参数
    vim /usr/local/php7.2/etc/php.ini
    expose_php = On    #防止Web服务器签名,防止在http头里暴露X-Powered-By:PHP/7.2这样的敏感信息
    short_open_tag = On    #启用php短标签
    max_execution_time = 120    #PHP程序处理请求的最大时间,单位“秒”
    max_input_time = 60    #此变量可以以“秒”为单位对通过POST、GET以及PUT方式接收数据时间进行限制
    memory_limit = 128M    #允许使用内存的最大值限制。设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存
    file_uploads = On    #确定服务器上的PHP脚本是否可以接受HTTP文件上传
    post_max_size = 8M   #限制通过POST方法可以接受的信息最大量
    upload_max_filesize = 7M    #限制PHP处理上传文件的最大值,此值必须小于post_max_size值
    date.timezone = Asia/Shanghai    #设置PHP执行的默认时间的时区规则
    mbstring.func_overload=2
    常用的substr()会被自动替换为 mb_substr()
    0:代表不重载任何函数(默认值)
    1:代表重载mail()函数
    2:代表重载str系列字符串处理函数
    4:代表重载ereg系列正则处理函数
    7:代表重载所有以上提及的函数


    修改www.conf相关参数
    vim /usr/local/php7.2/etc/php-fpm.d/www.conf
    user = nginx   #启动进程的帐户
    group = nginx    #启动进程的组
    listen = 127.0.0.1:9000    #该项必须开启
    pm = dynamic    #默认即可
    pm.max_children = 180      #子进程最大数
    pm.start_servers = 50      #启动时的进程数
    pm.min_spare_servers = 50    #前提是pm = dynamic,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
    pm.max_spare_servers = 180    #前提是pm = dynamic,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
    pm.max_requests = 500    #设置每个子进程重生之前服务的请求数,如为0则一直接受请求
    request_terminate_timeout = 180   #设置单个请求的超时中止时间
    ###############################################################################
    FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到
    ;pm.status_path = /status
    FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。
    ;ping.path = /ping
    用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.
    ;ping.response = pong
    设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用.
    设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项
    request_terminate_timeout = 180
    当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中,0为关闭
    ;request_slowlog_timeout = 10
    慢请求的记录日志,配合request_slowlog_timeout使用
    ;slowlog = log/$pool.log.slow
    设置文件打开描述符的rlimit限制,默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改
    ;rlimit_files = 1024
    设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值
    ;rlimit_core = 0
    启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用
    ;chroot =
    设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录
    ;chdir = /var/www
    重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空
    ;catch_workers_output = yes
    ###############################################################################


    配置php-fpm.conf
    vim /usr/local/php7.2/etc/php-fpm.conf
    pid = /usr/local/php7.2/run/php-fpm.pid
    ;error_log = log/php-fpm.log    #按需打开,这里未开启
    ;log_level = notice    #错误级别,alert(必须立即处理)error(错误情况)warning(警告情况)notice(一般重要信息)debug(调试信)
    ;emergency_restart_interval = 0

    #在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过这个数,php-fpm就会重启。一般保持默认值


    启动php-fpm:
    /usr/local/php7.2/sbin/php-fpm
    添加开机启动php-fpm
    echo "/usr/local/php7.2/sbin/php-fpm">>/etc/rc.local


    修改nginx解析php页面:
    vim /usr/local/nginx/conf/nginx.conf
    ....
      .....
        location / {
        root html;
        index index.php index.html index.htm;
        }
    ....
      ....
        location ~ .php$ {
        root html;      #指定php的根目录
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        }


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

    浏览器访问: IP + Port/index.php

    zabbix安装(接上面的环境)
    #如果直接在以下命令中加上密码会输出一条类似错误的信息,mysql5.7的一种机制

    mysql -uroot -p -e"create database zabbix character set utf8;"
    mysql -uroot -p -e"grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by '123456';"
    mysql -uroot -p -e"grant all privileges on zabbix.* to 'zabbix'@'%' identified by '123456';"
    mysql -uroot -p -e"grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by '123456';"
    /etc/init.d/mysqld restart
    rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
    yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
    导入数据库:
    zcat /usr/share/doc/zabbix-server-mysql-4.0.2/create.sql.gz |mysql -uroot -p zabbix

    为Zabbix服务器配置数据库:
    vim /etc/zabbix/zabbix_server.conf
    LogFile=/var/log/zabbix/zabbix_server.log    #保持默认
    LogFileSize=0    #保持默认
    PidFile=/var/run/zabbix/zabbix_server.pid    #保持默认
    SocketDir=/var/run/zabbix    #保持默认
    DBHost=localhost    #待测试改变成IP形式
    DBName=zabbix    #保持默认
    DBUser=zabbix    #保持默认
    DBPassword=123456    #登录数据库的zabbix用户的密码

    启动zabbix:

    groupadd apache && useradd -s /sbin/nologin -g php-fpm -M apache
    service zabbix-server start
    service zabbix-agent start
    systemctl enable zabbix-server
    systemctl enable zabbix-agent
    chkconfig --level 2345 zabbix-server on
    chkconfig --level 2345 zabbix-agent on

    Zabbix前端配置
    vim /etc/httpd/conf.d/zabbix.conf
      php_value date.timezone Asia/Shanghai      #所有都不用改,仅取消该行注释并修改为亚洲时区

    修改httpd的端口:

    vim /etc/httpd/conf/httpd.conf

      Listen 8002

    启动httpd:service httpd start

    访问zabbix:http://ip:8002/zabbix

    账/密:Admin/Zabbix

          zabbix配置版块可以参照我的上几篇文章


    统一启动:
    /usr/local/nginx/sbin/nginx
    service httpd start
    /etc/init.d/mysqld restart
    /usr/local/php7.2/sbin/php-fpm
    报错1:
    Unable to create the PID file (/usr/local/php7.2/run/php-fpm.pid).: No such file or directory (2)
    解决:
    mkdir /usr/local/php7.2/run    #再启动php-fpm


    最后配置zabbix,这里不做详细解释....
    这样就实现了我的最新版的LNMP和最新版的zabbix的安装

  • 相关阅读:
    phpcms中常用代码总结
    jQuery学习:用按键移动方块
    <item.../>元素可指定如下常用属性
    Microsoft.Office.Interop.Excel的用法
    科技与健康
    计算机系统的分类
    Android中的一些小知识
    android项目中各个文件的介绍
    Activity和Servlet的相似之处和区别
    在Activity的生命周期中,会被系统回调的方法
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/10051526.html
Copyright © 2011-2022 走看看