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的安装

  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/10051526.html
Copyright © 2011-2022 走看看