Lnmp环境搭建

Lnmp环境基础搭建

1. 关于linux


1.始祖为unix,后来衍生Unix-like OS 例如FreeBSD、OpenBSD、SUN公司的Solaris

2.常见的成熟商用的例如:redhat,centos(redhat再编译),suse(三大商用linux系统)

3.适合个人桌面学习使用的例如Ubuntu,Fedora(由于x-window更加友好)

4.中国自己开发的例如麒麟linux,红旗linux

2. linux优点

linux作为大多数企业用户选择的生产服务器,最大的优点运行稳定,资源占用少,接入安全。当然,由于继承自unix,所以几乎支持unix的所有操作命令。还有很多优点不做赘述

3. linux安装,使用,维护

1. 关于分区


在安装linux过程中,新手存在的疑惑位置在于分区结构的掌握。类比win平台下的逻辑卷。关于逻辑卷,不赘述。重点讲一下各个分区表示的意义。

以下内容以商用使用率比较高的centos为环境

标准分区文件格式ext4或者xfs

/Boot分区(引导,活动)(早期hp刀片机安装较新的linux是有efi分区bug,解决方式较为复杂)

/ 根分区(根)

/home分区(储存linux用户文件的,可类比win平台下user目录)

/usr 分区(系统软件存放区)

/bin 分区 (标准系统实用程序)

/opt分区(可选软件安装目录)

/var/log分区(系统日志)

标准分区文件格式swap

简称交换分区,开辟一块物理分区,帮助内存实现转存功能(类比win下的虚拟内存技术)

2. 用户(user)和组(group)的概念


Linux是个多用户多任务的系统,用户组有效管理和保证服务器运行的安全级别。用户对应权限概念

关于权限,体现在linux文件属性

LL或ls -al命令列出当前文件夹下的所有文件及文件夹所有属性

例如一个文件,hello.log

 
-rwxrwx--- 23 root root 4096 Sep 8 14:06 hello.log

-文件类型,r(读)w(写)x(执行)文件所有者的权限,rwx文件所属用户组权限,—其它人权限无权限
常见文件类型:-文件,d目录,i链接(linkfile)b可供存储接口设备,c串口设备(键盘,鼠标)
更改文件属性权限

Chgrp root hello.log
Chown root hello.log
Chmod 755 hello.log (r4,w2,x1)

3. 常见命令合集

  1. 通用基本命令,su,cd,pwd,cp,mv,mkdir,rmdir(rm),ls(ll),cat,tac,nl(添加行号),more,less(双向翻动)
  2. 常见工具命令,vi,nano,tar,zip,unzip,rpm,yum/apt,chkconfig,
    举例帮忙理解命令参数-r递归,其它参数通过help自行学习牢记

    服务器系统采用了CentOS,属于比较完善的高级的linux版本。再使用rmdir命令时,
    # rmdir theOld

    会有如下提示:

    rmdir: ‘theOld’: 目录非空

    由于已经习惯了长期使用rmdir命令,经常在删除某些目录时就手快不自觉打出这个命令,但是如果要删除的目录里跟了很多子目录,子目录里又有很多文件,这个命令就不好使了,就会蹦一个目录非空的提示,linux系统下为了提高给开发人员效率,提供了这样的一个命令以供使用,
    # rm -rf theOld
    成功删除

    这样就方便了很多,节省了很多时间,但是相应的我就想到了之前在做标准C和unix平台的系统调用都没有这样的一个函数可以用来删除非空的目录,其实这也是很多初学unix开发人员遇到的挺麻烦的问题,很多人会想到ftw


ftw只是遍历目录树而已吧,方向是从外层到里层的,而删除非空目录是要从里层到外层的。大部分代码还是要自己写。

所以要解决问题我觉得最好的办法还是用辅助栈

大概思路是这样吧:

遍历子目录,如果遇见非目录,就直接remove, 如果是目录,则放入栈中,然后继续搜索。
当最里层的目录为空时,退栈,逐个删除空目录。

 
rmdir ()
{
opendir();
while (readdir()) {
if (!dir)
rm;
else {
rmdir();
rm;
}
}
closedir();
}


我们再来看比较高级点的linux系统的这个命令
#rm -rf 目录名 


后面的-rf 表示的其实就是r为递归的删除子目录 f为强制执行。

4. 实例搭建


通过上述基本命令的学习,我们实例搭建一个lnmp生产环境。(随着技术的发展,由于Nginx 配置简洁,轻量级,同样起web 服务,比apache 占用更少的内存及资源,抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能,高度模块化的设计,编写模块相对简单,因此,Nginx已经逐渐替代Apache成为web服务器的首选)

1)开机进入BIOS,检查服务器硬盘模式,串口设备是否就绪,是否需要组建raid5,完整安装centos ,根据硬盘大小和功能进行分区。

2)设置好时区,语言,网络,关闭SELinux功能,一个很奇怪的想象,SELinux 是 2.6 版本的 Linux内核中提供的强制访问控制(MAC)系统。对于目前可用Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色控制的概念。可是我们在安装大部分的软件的时候(甚至包括诸如oracle这样的成熟标准的大产品),软件安装需求都要求我们要关闭SElinux功能,实际上,多数情况下是因为没有专业运维,没有多少非专职运维去读那个麻烦死的SELinux文档(不是一般的麻烦!),加上SElinux对本身服务器行为的出入异常敏感,因此除非极其专业的大型设备,基本SELinux不被使用。

Vi /etc/selinux/config
SELINUX = disabled Reboot或临时关闭
echo 0 > /selinux/enforce

3)设置防火墙iptables 放开对应端口,常见的诸如21,22,80,8080,3306等
vi /etc/sysconfig/iptables

4)检查lamp环境所需依赖包 gcc gcc-c++ ncurses ncurses-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel libmcrypt zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers pcre pcre-devel zlip zlip-devel

rpm –qa $以上包
如缺少yum方式安装
5)安装配置MySQL数据库 两种方式,yum方式最快捷方便,缺少网络环境用源码包,yum不做累赘,记录源码包安装
tar zxvf mysql-**.tar.gz 
./configure --prefix=路径 
make && make install

6)安装配置nginx

tar zxvf nginx-1.5.1.tar.gz
cd nginx-1.5.1
./configure --prefix=/usr/local/webserver/nginx
make && make install
加入系统服务脚本

vi /etc/init.d/nginx

    #!/bin/sh
    #
    # nginx - this script starts and stops the nginx daemin
    #
    # chkconfig:   - 85 15
    # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
    #               proxy and IMAP/POP3 proxy server
    # processname: nginx
    # config:      /usr/local/webserver/nginx/conf/nginx.conf
    # pidfile:     /usr/local/webserver/nginx/logs/nginx.pid

    # Source function library.
    . /etc/rc.d/init.d/functions

    # Source networking configuration.
    . /etc/sysconfig/network

    # Check that networking is up.
    [ "$NETWORKING" = "no" ] && exit 0

    nginx="/usr/local/webserver/nginx/sbin/nginx"
    prog=$(basename $nginx)

    NGINX_CONF_FILE="/usr/local/webserver/nginx/conf/nginx.conf"

    lockfile=/var/lock/subsys/nginx

    start() {
        [ -x $nginx ] || exit 5
        [ -f $NGINX_CONF_FILE ] || exit 6
        echo -n $"Starting $prog: "
        daemon $nginx -c $NGINX_CONF_FILE
        retval=$?
        echo
        [ $retval -eq 0 ] && touch $lockfile
        return $retval
    }

    stop() {
        echo -n $"Stopping $prog: "
        killproc $prog -QUIT
        retval=$?
        echo
        [ $retval -eq 0 ] && rm -f $lockfile
        return $retval
    }

    restart() {
        configtest || return $?
        stop
        start
    }

    reload() {
        configtest || return $?
        echo -n $"Reloading $prog: "
        killproc $nginx -HUP
        RETVAL=$?
        echo
    }

    force_reload() {
        restart
    }

    configtest() {
      $nginx -t -c $NGINX_CONF_FILE
    }

    rh_status() {
        status $prog
    }

    rh_status_q() {
        rh_status >/dev/null 2>&1
    }

    case "$1" in
        start)
            rh_status_q && exit 0
            $1
            ;;
        stop)
            rh_status_q || exit 0
            $1
            ;;
        restart|configtest)
            $1
            ;;
        reload)
            rh_status_q || exit 7
            $1
            ;;
        force-reload)
            force_reload
            ;;
        status)
            rh_status
            ;;
        condrestart|try-restart)
            rh_status_q || exit 0
                ;;
        *)
                echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
            exit 2
    esac
修改nginx脚本权限
 chmod +x /etc/init.d/nginx 
添加到系统服务
/sbin/chkconfig nginx on
使用以下命令对nginx操作
  
service nginx start
service nginx stop
service nginx restart
service nginx reload
7)安装配置PHP 安装freetype库

tar zxvf freetype-2.3.5.tar.gz
cd freetype
./configure --prefix=/usr/local/webserver/freetype/
make && make install
编译安装前的准备 提示:默认的php安装后gd不支持jpg,只支持gif、png、bmp。所以首先要安装gd库

wget http://www.boutell.com/gd/http/gd-2.0.35.tar.gz
tar zxvf gd-2.0.33.tar.gz
cd gd-2.0.33
./configure --prefix=/usr/local/webserver/gd2/
make && make install
tar zxvf php-5.3.26.tar.gz
cd php-5.3.26

./configure --prefix=/usr/local/webserver/php --enable-fpm --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-config-file-path=/usr/local/webserver/php  --with-openssl --enable-mbstring --with-zlib --enable-xml --with-freetype-dir=/usr/local/webserver/freetype/ --with-gd=/usr/local/webserver/gd2/ --with-jpeg-dir  --enable-bcmath --with-mcrypt --with-iconv --enable-pcntl --enable-shmop --enable-simplexml --enable-ftp
make && make install
cp php.ini-development /usr/local/webserver/php/php.ini
配置php
vi php.ini
date.timezone = prc 

配置php+nginx

vi nginx.conf

user  www www;
  worker_processes  1;
  events {
      worker_connections  1024;
  }
  http {
      include       mime.types;
      index  index.php index.html index.htm;
      root   /data/www;

      default_type  application/octet-stream;
      sendfile        on;
      keepalive_timeout  65;
      server {
          listen       80;
          server_name  192.168.51.101;
          if ( $host ~* (.*)\.(.*)\.(.*)){
              set $domain $1;
          }

          location ~ ^/(.*)/data/.*\.(php)?$
          {
              return 404;
              deny all;
          }

          location ~ ^/(.*)/public/.*\.(php)?$
          {
              return 404;
              deny all;
          }

          location ~ ^/(.*)/themes/.*\.(php)?$
          {
              return 404;
              deny all;
          }

          location ~ ^/(.*)/wap_themes/.*\.(php)?$
          {
              return 404;
              deny all;
          }

          #伪静态配置开始.....

          if ($request_uri ~ (.+?\.php)(|/.*)$ ){
              break;                                                                                                                                  
          }

          location / {
              autoindex  on;
              send_timeout 1800;
              fastcgi_buffers 8 128k;
              fastcgi_intercept_errors on;
              #伪静态配置
              if ( !-e $request_filename ) {
                  rewrite ^/(.*)$ /index.php/$1 last;
              }
          }

          location ~ ^/shopadmin {
              rewrite  ^/(.*)$  /index.php/$1 last;
              break;
          }

         #伪静态配置结束......

         error_page   500 502 503 504  /50x.html;
         location = /50x.html {
             root   html;
         }

         location ~ \.php {
             include        fastcgi_params;
             set $real_script_name $fastcgi_script_name;
             set $path_info "";
             set $real_script_name $fastcgi_script_name;
             if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
                 set $real_script_name $1;
                 set $path_info $2;
             }
             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
             fastcgi_pass   127.0.0.1:9000;
             fastcgi_index  index.php;
         }
    }
 }
配置php+pathinfo
vi php.ini

enable_dl = On
cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 1
cgi.rfc2616_headers = 1
allow_url_fopen = On

配置php-fpm启动脚本

vi /etc/init.d/php-fpm


    #! /bin/sh

    ### BEGIN INIT INFO
    # Provides:          php-fpm
    # Required-Start:    $remote_fs $network
    # Required-Stop:     $remote_fs $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts php-fpm
    # Description:       starts the PHP FastCGI Process Manager daemon
    ### END INIT INFO

    prefix=/usr/local/webserver/php

    php_fpm_BIN=${prefix}/sbin/php-fpm
    php_fpm_CONF=${prefix}/etc/php-fpm.conf
    php_fpm_PID=${prefix}/var/run/php-fpm.pid


    php_opts="--fpm-config $php_fpm_CONF"
    php_pid="--pid $php_fpm_PID"

    wait_for_pid () {
        try=0

        while test $try -lt 35 ; do

                case "$1" in
                        'created')
                        if [ -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;

                        'removed')
                        if [ ! -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                esac

                echo -n .
                try=`expr $try + 1`
                sleep 1

        done

    }

    case "$1" in
        start)
                echo -n "Starting php-fpm "

                $php_fpm_BIN $php_opts $php_pid

                if [ "$?" != 0 ] ; then
                        echo " failed"
                        exit 1
                fi

                wait_for_pid created $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;

        stop)
                echo -n "Gracefully shutting down php-fpm "

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi

                kill -QUIT `cat $php_fpm_PID`

                wait_for_pid removed $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed. Use force-exit"
                        exit 1
                else
                        echo " done"
                fi
                      ;;

        force-quit)
                echo -n "Terminating php-fpm "

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi

                kill -TERM `cat $php_fpm_PID`

                wait_for_pid removed $php_fpm_PID

                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;

        restart)
                $0 stop
                $0 start
        ;;

        reload)

                echo -n "Reload service php-fpm "

                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi

                kill -USR2 `cat $php_fpm_PID`

                echo " done"
        ;;

        *)
                echo "Usage: $0 {start|stop|force-quit|restart|reload}"
                exit 1
        ;;
esac
赋予脚本执行权限
cd /usr/local/webserver/php/etc && cp php-fpm.conf.default php-fpm.conf
chmod +x /etc/init.d/php-fpm

设置开机启动

 /sbin/chkconfig php-fpm on

服务启动关闭

service php-fpm start
service php-fpm stop
service php-fpm restart

8)检查php+nginx是否配置成功
在nginx.conf文件中我配置了我的php工作目录/www,在此目录下建立文件phpinfo.php,写入phpinfo();方法然后运行查看

运行检查是否有php信息

9)安装配置解密工具

 
tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
cd ZendGuardLoader-php-5.3-linux-glibc23-x86_64/
cp php-5.3.x/ZendGuardLoader.so /usr/local/webserver/php/ext/

vi php.ini
[Zend Guard]
;/usr/local/webserver/php/ext/ZendGuardLoader.so //这个是你当时指定的zend的目录
zend_extension=/usr/local/webserver/php/ext/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=

重启nginx 和 php-fpm,打开phpinfo查看
如信息正确,至此基础环境搭建完成。

你可能感兴趣的:(centos,LNMP)