centos安装lnmp记录 2018-08-04

    首先给大家一键安装源。这种安装比较简单。


    我最先接触的是军哥的lnmp一键安装。。附上安装教程 https://lnmp.org/install.html


    当然最近流行的有宝塔这个工具,还有个web后台管理来着。 https://www.bt.cn/bbs/thread-1186-1-1.html


    这些都是挺好的一键安装源。本地开发环境如果懒得弄就这样一键搞下去,很简单的就安装好 php mysql nginx


    多看他里面的教程,还有教怎么安装其他扩展的。


    OK 这是一键安装篇。


    我们来搞个编译安装lnmp的把。编译安装可以使我们更能理解我们扩展了安装了啥,扩展了啥。。(安装过程中可能会漏掉一些插件 例如编译的时候需要gcc啥的,这些你们自行百度去下载 也就一条yum命令就能处理的。根据报错信息去处理。。。我这边是假设这些你都已经安装了。)



    注意 :我们操作linux命令时,前面都会加上#。 这代表linux命令  例如  # cd  /  这意思就是打开根目录,我这本书大部分get的源都是去阿铭分享的地址去下的,,例如mysql都是到他分享的地址下的,都是官方源。大家自己去看下:https://coding.net/u/aminglinux/p/resource/git/blob/master/README.md

    编译安装 - - mysql 

    # cd /usr/local/src/

    # wget  

    # tar zxvf http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz  

    # mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql

    # useradd -s /sbin/nologin mysql

    # cd /usr/local/mysql

    # mkdir -p /data/mysql

    # chown -R mysql:mysql /data/mysql

    # ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

    # cp support-files/my-default.cnf /etc/my.cnf

    # cp support-files/mysql.server /etc/init.d/mysqld

    # chmod 755 /etc/init.d/mysqld 

    # vim /etc/init.d/mysqld

    把datadir 给设置成  datadir=/data/mysql   (前面初始化定义的目录) 退出vim 


    把启动脚本加入系统服务 设定开机启动


    # chkconfig --add mysqld 

    # chkconfig mysqld on

    # service mysqld start 


    OK,我们启动了mysql 可以通过ps命令查看是否启动

    # ps aux |grep mysqld



    至此我们的mysql安装完毕。


    安装php 


    # cd /usr/local/src 

    # wget  http://cn2.php.net/distributions/php-5.6.32.tar.bz2

    # tar php-5.6.32.tar.bz2

    # useradd -s /sbin/nologin php-fpm

    # cd php-5.6.32



    OK 我们来编译安装,编译参数大家自己网上找一下,我是加了下面这些。大家自行需要就加入把。


    # ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 -with-pear --with-curl --with-openssl


    # make 

    在这一步通常会遇到很多问题,就是看报错信息,一个一个解决,百度都有。


    直到你处理完所有问题后我们安装php


    # make install


    注意:以上步骤建议做完一遍 我们使用命令 echo $? 来查看是否完成 如果结果为0代表没问题。再输入往下一步。否则百度解决问题。实在不行请喊我。。。。我的qq260275472


    修改配置文件


    # cp php.ini-production /usr/local/php-fpm/etc/php.ini

    # vim /usr/local/php-fpm/etc/php-fpm.conf

    把下面内容写进php-fpm的配置文件

    [global]

    pid = /usr/local/php-fpm/var/run/php-fpm.pid

    error_log = /usr/local/php-fpm/var/log/php-fpm.log


    [www]

    listen = /tmp/php-fcgi.sock

    listen.mode = 666

    user = php-fpm

    group = php-fpm

    pm = dynamic

    pm.max_children = 50

    pm.start_servers = 20

    pm.min_spare_servers = 5

    pm.max_spare_servers =35

    pm.max_requests = 500

    rlimit_files = 1024


    保存退出后检查是否有木有问题。


    # /usr/local/php-fpm/sbin/php-fpm -t 

    如果出现 successful 代表成功。否则就根据提示去修改把。。


    ok 配置完成我们来启动php 并设置开机启动把。。


    # cp /usr/local/src/php-5.6.32/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

    # chmod 755 /etc/init.d/php-fpm

    # service php-fpm start 

    # chkconfig php-fpm on


    检查是否启动 同样ps命令然后grep一下(有好多个进程)

    # ps aux |grep php-fpm


    安装nginx 


    # cd /usr/local/src/

    # wget http://nginx.org/download/nginx-1.8.0.tar.gz

    # tar zxvf nginx-1.8.0.tar.gz 


    # cd nginx-1.8.0

    # ./configure --prefix=/usr/local/nginx

    # make

    # make install

    # vim /etc/init.d/nginx

    写入一下脚本


    #! /bin/bash 
    #chkconfig: - 30 21
    #description: http service.
    # Source Function Library
    . /etc/init.d/functions
    #Nginx Settings
    NGINX_SBIN="/usr/local/nginx/sbin/nginx"
    NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
    NGINX_PID="/usr/local/nginx/logs/nginx.pid"
    PETVAL=0
    prog="Nginx"
    start()
    {
        echo -n $"Starting $prog:"
        mkdir -p /dev/shm/nginx_temp
        daemon $NGINX_SBIN -c $NGINX_CONF
        PETVAL=$?
        echo 
        return $RETVAL
    }
    stop()
    {
        echo -n $"Stopping $prog:"
        killproc -p $NGINX_PID $NGINX_SBIN -TERM
        rm -rf /dev/shm/nginx_temp
        RETVAL=$?
        echo 
        return $RETVAL
    }
    reload()
    {
        echo -n $"$Reloading $prog:"
        Killproc -p $NGINX_PID $NGINX_SBIN -HUP
        RETVAL=$?
        echo
        return $RETVAL
    }
    configtest()
    {
        $NGINX_SBIN -c $NGINX_CONF -t
        return 0
    }
    case "$1" in
      start)
             start
            ;;
    stop)
            stop
            ;;
    reload)
            reload
            ;;
    restart)
            restart
            ;;
    configtest)
            configtest
            ;;
    *) 
            echo $"Usage:$0{start|stop|reload|restart|configtest}"
            RETVAL=1
    esac
    exit $RETVAL


    设置权限,并加入开机启动

    # chmod 755 /etc/init.d/nginx

    # chkconfig --add nginx 

    # chkconfig nginx on


    清空原来的配置


    # > /usr/local/nginx/conf/nginx.conf

    # vim /usr/local/nginx/config/conf

    填充进去以下内容

    user nobody nobody;
    worker_processes 2;
    error_log /usr/local/nginx/logs/nginx_error.log crit;
    pid /usr/local/nginx/logs/nginx.pid;
    worker_rlimit_nofile 51200;
    events{
    use epoll;
    worker_connections 6000;
    }
    http{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxt_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm application/xml;
    server
    {
    listen 80;
    server_name localhost;
    index index.html index.htm index.php;
    root /usr/local/nginx/html;
    location ~ \.php$
    {
    include fastcgi_params;
    fastcgi_pass unix:/tmp/php-fcgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
    }
    }
    include vhost/*.conf;
    }


    检查是否正确

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

    看到ok 和succesful 代表成功,否则根据提示去解决问题把


    启动nginx

    # service nginx start

    检查一样用ps命令。我就不写出来了。。。。


    ok nginx创建完毕。上面我们配置文件加了include vhost/*.conf 就是加载 /usr/local/nginx/conf/vhost/ 下面 的.conf文件。

    所以我们每套代码都在vhost里面创建一个conf就成了。。。。



    至于怎么配置nginx 大家如果有看我文章,用过upupw那你应该会配。。实在不会请百度。。。还是不会,,那我只能给你我的其中一个简单点的配置,例如我这个网站,iasing.com

    那我就再vhost下面创建一个文件叫 iasing.conf

    写入如下内容

    server 
    {
    listen 80;
    server_name iasing.com alias www.iasing.com;
    index index.html index.htm index.php;
    root /data/wwwroot/iasing/public;
            location / {
            if ( !-e $request_filename){
                    rewrite ^/(.*)$ /index.php?s=$1 last;
                    break;
           }
            }
    location ~ \.php(.*)$ {
                    fastcgi_pass   unix:/tmp/php-fcgi.sock;
                    fastcgi_index  index.php;
                    fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
                    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                    fastcgi_param  PATH_INFO  $fastcgi_path_info;
                    fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
                    include        fastcgi_params;
            }
    }

    我这个是tp框架,所以规则大家能看懂则自己看看就成,哈哈哈。我代码是创建再根目录下的data目录下的wwwroot里面。iasing是我的代码了。。。tp5要指向public 所以我就指向public  


    再上面呢,就是监听80端口, 域名信息  iasing.com 别名 www.iasing.com  (解析域名请去万网啥的买个域名,然后自己解析,,你们的域名肯定和我不一样咯。。。)


    我现在还没记录什么错误日志,毕竟自己的服务器,谢谢博客能有什么错误日志。。。


    对了,一点安全小建议。。大家如果买云服务器,记得几个小点,,例如root关闭远程连接,要root你就给自己开个号,加入sudo权限,直接sudo,避免别人破解你服务器密码。。因为如果你root可以远程登陆的话,那不是账号写root,密码枚举破解就成了?? 如果是小号,他还得有小号的账号和密码才能登陆服务器,增加了黑客破解难度。。


    第二,ssh隧道开起来吧,,22端口不安全,大家都知道默认登陆服务器的端口是22,那如果我们改成其他的,例如12345,那别人破解也难度也就更大,毕竟还得找出你的端口号。。


    第三 防火墙把该开启的东西加入白名单把,,其他的都关掉。。。出入站规则啥的。。


    第四,mysql建议用隧道登陆,,也就是ssh,然后同样远程禁止root账号登陆。。


    这几点对于我们php开发比较有安全问题。。个人开发小网站的话比较无所畏惧。。。不过还是得悠着点,,我上次没写备份mysql脚本,,结果某一天mysql挂了,,,我差点不要这个博客了。。幸好之前服务器搭在windows上有那么一丢丢数据。。。。以后要写好备份,用linux自带的crontab做下定期备份就成。。数据无价!!