基于Nfs和Samba的Lamp环境实现

Posted PyGoer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Nfs和Samba的Lamp环境实现相关的知识,希望对你有一定的参考价值。

一 系统环境
二 网络文件系统与web环境的结合
三 搭建lamp环境
四 实现nfs服务
五 实现samba服务
六 实现效果


一 系统环境

 系统平台:CentOS release 6.8 (Final)
 Lamp:httpd-2.2.15 mysql-server-5.1.73 php-5.3.3
 Nfs:nfs-utils-1.2.3 rpcbind-0.2.0
 Nfs Server IP:172.18.67.1
 Samba:samba-3.6.23 samba-client-3.6.23 samba-common-3.6.23
 Samba Server IP:172.18.67.1
 SELINUX=disabled


二 网络文件系统与web环境的结合

 1.企业网站建设必然离不开服务器运维,一个稳定高效的服务器环境是保证网站正常运行的重要前提。本文将会详细讲解Linux系统上如何搭建配置高效的lamp服务环境,并在lamp环境中搭建起企业自己的网站。

 2.NFS是Network File System的缩写,即网络文件系统。一种适用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。

 3.为了实现Windows主机与Linux服务器之间的资源共享,Linux操作系统提供了Samba服务,Samba服务为两种不同的操作系统架起了一座桥梁,使Linux系统和Windows系统之间能够实现互相通信,为广泛的Linux爱好者提供了极大方便。本文简要介绍如何在Linux操作系统上搭建Samba服务器和简单配置。

 4.如何将这三项技术完美的组合起来是本文将讨论的重点。


三 搭建lamp环境

 在IP地址为172.18.67.2的这台服务器上搭建lamp环境:

 1.准备工作:
  1).配置防火墙,开启80端口、3306端口

   # iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT        #允许80端口通过防火墙
   # iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT      #允许3306端口通过防火墙


  2).关闭SELINUX

   # vim /etc/selinux/config
    #SELINUX=enforcing                                     #注释掉
    #SELINUXTYPE=targeted                                   #注释掉
    SELINUX=disabled                                          #增加
    :wq                                                   #保存,关闭
   # shutdown -r now                                          #重启系统

 

 2.安装:
  1).安装httpd:
   在安装httpd亲需要安装两个apache的扩展包apr和apr-util:

    # yum install -y apr apr-util

  
   接下来安装httpd:

    # yum install -y httpd
    # /etc/init.d/httpd start                                    #启动Apache


     注:Apache启动之后会提示错误:

     正在启动 httpd:httpd: Could not reliably determine theserver’s fully qualif domain name, using ::1 for ServerName


     解决办法:

      # vim /etc/httpd/conf/httpd.conf                             #编辑


     找到

  #ServerName www.example.com:80


     修改为

     ServerName www.mrlapulga.com:80                           #这里设置为你自己的域名,如果没有域名,可以设置为localhost
      :wq!                                                #保存退出
    # chkconfig httpd on                                       #设为开机启动
    # /etc/init.d/httpd restart                                  #重启Apache


  2).安装MySQL:

    # yum install mysql mysql-server                              #询问是否要安装,输入Y即可自动安装,直到安装完成
    # /etc/init.d/mysqld start                                  #启动MySQL
    # chkconfig mysqld on                                      #设为开机启动
    # cp /usr/share/mysql/my-medium.cnf /etc/my.cnf                    #拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可)


   为root账户设置密码:

    # mysql_secure_installation


    回车,根据提示输入Y
    输入2次密码,回车
    根据提示一路输入Y
    最后出现:Thanks for using MySQL!
    MySql密码设置完成,重新启动 MySQL:

    /etc/init.d/mysqld restart                                 #重启
    /etc/init.d/mysqld stop                                   #停止
    /etc/init.d/mysqld start                                   #启动


  3).安装PHP:

    # yum install php


   根据提示输入Y直到安装完成
   安装PHP组件,使 PHP5 支持 MySQL

    # yum install php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pearphp-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt


   这里选择以上安装包进行安装
   根据提示输入Y回车

    # /etc/init.d/mysqld restart                              #重启MySql
    # /etc/init.d/httpd restart                               #重启Apche


  4).相关配置:
   1>.Apache配置

    # vim /etc/httpd/conf/httpd.conf                           #编辑文件
     ServerTokens OS
      #修改为:ServerTokensProd (在出现错误页的时候不显示服务器操作系统的名称)
     ServerSignature On
      #修改为:ServerSignatureOff (在错误页中不显示Apache的版本)
     Options Indexes FollowSymLinks
      #修改为:Options i n c l u d es e x e cCGI FollowSymLinks(允许服务器执行CGI及SSI,禁止列出目录)
     #AddHandler cgi-script .cgi
      #修改为:AddHandler cgi-script .cgi .pl (允许扩展名为.pl的CGI脚本运行)
     AllowOverride None
      #修改为:AllowOverrideAll (允许.htaccess)
     AddDefaultCharset UTF-8
      #修改为:AddDefaultCharset GB2312 (添加GB2312为默认编码)
     Options Indexes MultiViews FollowSymLinks
      #修改为 Options MultiViews FollowSymLinks(不在浏览器上显示树状目录结构)
     DirectoryIndex index.html index.html.var
      #修改为:DirectoryIndex index.html index.htm Default.html Default.htm
     index.php Default.php index.html.var
      #(设置默认首页文件,增加index.php)
     KeepAlive Off
      #修改为:KeepAliveOn (允许程序性联机)
     MaxKeepAliveRequests 100
      #修改为:MaxKeepAliveRequests 1000 (增加同时连接数)
    :wq!                                              #保存退出
    # /etc/init.d/httpd restart                           #重启
    # rm -f /etc/httpd/conf.d/welcome.conf /var/www/error/noindex.html     #删除默认测试页


   2>.php配置

    # vim /etc/php.ini                                     #编辑
     date.timezone = PRC
      #把前面的分号去掉,改为date.timezone = PRC
     disable_functions = p a s s t h r u,e x e c,s y s t e m,chroot,scandir,chgrp,chown,shell_e x e c, p r o c _ o p e n,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,pope p a s s t h r u,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,
     getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
      #列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。
     expose_php = Off
      #禁止显示php版本的信息
     magic_quotes_gpc = On
      #打开magic_quotes_gpc来防止SQL注入
     short_open_tag = ON
      #支持php短标签
     open_basedir = .:/tmp/
      #设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果改了之后安装程序有问题(例如:织梦内容管理系 统),可以注销此行,或者直接写上程序的目录/data/www.osyunwei.com/:/tmp/
    :wq! #保存退出
    # /etc/init.d/mysqld restart                             #重启MySql
    # /etc/init.d/httpd restart                              #重启Apche


    测试:

     # cd /var/www/html
     # vim index.php                                     #输入下面内容
      <?php
      phpinfo();
      ?>
      :wq!                                            #保存退出


    在客户端浏览器输入服务器IP地址,可以看到如下图所示相关的配置信息!
    其他:
     后续安装PDO_MySQL拓展模块,只需要: yum install php-mysql
     手动安装会出现错误(configure: error: mysql_query missing!?)


四 实现nfs服务

 在IP地址为172.18.67.1的这台服务器上搭建nfs:

 1).安装nfs:

  # yum install -y nfs-util rpcbind
  # service nfs start


 2).Server端配置:

  # mkdir /data


  将下载好的wordpress解压至/data

  # vim /etc/exports
   /data/wordpress 172.18.67.2(rw,async)
   :wq                                               #保存退出
  # /etc/init.d/nfs start                                  #启动服务


 3).在172.18.67.2这台服务器上编辑/etc/fstab追加如下内容:

  # vim /etc/fstab
   172.18.67.1:/data/wordpress /var/www/html nfs defaults 0 0
   :wq                                               #保存退出
  # reboot                                             #重启系统


 4).以上只是配置了nfs的最基本的功能,接下来详细介绍nfs的Server端配置文件:

  /etc/exports或  /etc/exports.d/*
   /PATH/TO/SOME_DIR  clients1(export_options, ...)  clients2(export_options, ...)
    clients:
     single host:ipv4, ipv6:                              #FQDN
     network:address/netmask                               #同时长短格式的掩码
     wildcards:                                        #主机名通配,例如:*.magedu.com; 
     netgroups:                                        #NIS域内的主机组;@group_name;
     anonymous:                                        #使用*通配所有主机;     
    General Options(常用选项):
     ro:                                            #只读
     rw:                                            #读写
     sync:                                           #同步模式,内存数据实时写入磁盘
     async:                                          #异步模式,把内存中的数据定期写入磁盘
    User ID Mapping(用户映射选项):
     root_squash:
      #压缩root用户,一般指将其映射为nfsnobody, 这个选项不允许 root 用户访问挂载上来的 NFS 卷
     no_root_squash:
      #不压缩root用户,这个选项允许 root 用户访问挂载上来的 NFS 卷。
     all_squash:
      #压缩所有用户,这个选项对于公共访问的 NFS 卷来说非常有用,它会限制所有的 UID 和 GID,只使用匿名用户。缺省设置是 no_all_squash。
     anonuid and anongid:
      #这两个选项将匿名 UID 和 GID 修改成特定用户和组帐号。

    注意:
     每个共享文件系统需要独立定义一行
     客户端主机之间需要使用空格隔开
     客户端主机的定义可以是一个网段,单台主机,主机名
  服务器端:

   # exportfs -ar                                         #全部重新挂载配置文件里面的到内核,也可以理解为测试文件
   # exportfs -au                                         #全部卸载配置文件,即便客户端已经挂载
   # export -u FS:                                        #关闭指定的导出的文件系统


  服务器端查看:

   # showmount -a                                         #显示被客户端加载的文件系统以及ip 
   # showmount -d                                         #显示被客户端加载的目录
   # exportfs                                             #可以直接查看被挂载的文件系统


 5).此时我们已经利用nfs服务实现了网站目录的远程共享服务.

五 实现samba服务

 
 在IP地址为172.18.67.1的这台服务器上搭建samba:

 1).安装samba:

  # yum install -y samba samba-common


 2).samba的配置:
  samba的配置:
   /etc/samba/smb.conf
   两类配置段:

    全局配置
     [global]
      Network-Related Options
       workgroup =
       server string = 
       interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
       hosts allow = 127.  192.168.12.  192.168.13.
      hosts allow = 127.  192.168.12.  192.168.13.
       白名单:允许那些ip使用访问
        网络,空格隔开
         127.
         192.168.12.
         192.168.13.
      hosts deny= 
       黑名单:禁止哪些用户访问
     Logging Options:日志选项
      log file = /var/log/samba/log.%m                          #日志文件
      max log size = 50                                    #日志最大大小,满额就会新建日志文件
     Standalone Server Options
      security = user                                  #安全级别
       设定安全级别:取值有四个;
        share:匿名共享;
        user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是系统用户,但密码非为/etc/shadow中的密码,而由samba自行管理的文件,其密码文件的格式由passdb backend进行定义;
        server:由第三方服务进行统一认证;
        domain:使用DC进行认证;基于kerberos协议进行;
      passdb backend = tdbsam                               #用户账户放到tdbsam加密的文件里面
     Printing Options(打印选项):
      load printers = yes                                  #是否加载打印机
      cups options = raw                                   #通用unix打印服务的选项接口,默认都是raw
     Domain Members Options(域控制选项,无需修改):
     Domain Controller Options(域控制选项,无需修改):
     Browser Control Options(浏览器控制选项,默认值即可): 


    共享文件系统配置
     [SHARED_NAME]     
     有三类:
      [homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录;
      [printers]:定义打印服务;
      [shared_fs]:定义共享的文件系统;       
     常用指令:

      [shared_name]
       path = /path/to/share_directory                          #开放路径
       comment = Comment String                                 #描述信息,注释
       guest ok = {yes|no}                                      #是否允许来宾用户访问
       public = {yes|no}                                        #是否公开给所有人访问
       browseable = no                                          #如果和用户属主属组无关的时候,是否允许看到目录内容
       writable = {yes|no}                                      #共享权限,是否拥有写权限,还需要本地文件系统的权限
       read only = {yes|no}                                     #是否可以写入
       write list = +GROUP_NAME                                 #拥有写权限的用户、组列表
        +groupname  组名
        @groupname  组名
        username    用户名字


 3).将主机172.18.67.2与samba服务联系起来,需如下配置:

  # vim smb.conf
   [mysqldata]
    comment = mysql data directory
    path = /data/wordpress
    public = yes
    browseable = yes
    writeable = yes
    write list = mrlapulga
    :wq                                                #保存退出


  检测:testparm
  重启:

  # /etc/init.d/smb restart


 4).建立相应目录并授权:

  # mkdir -p /data/eordpress


  赋予本地权限:

  # chmod a+w /data/wordpress


 5).创建samba账号:

  # useradd -d /data/wordpress mrlapulga
  # chown R mrlapulga:mrlapulga /data/wordpress
  # smbpasswd -a mrlapulga


   接着输入两次密码
 6).启动samba:

  # /etc/init.d/smb start
  # /etc/init.d/nmb start


 7).在172.18.67.2这台服务器上安装samba客户端并实现访问172.18.67.1:
  安装samba:

   # yum install -y samba-client


  客户端实现连接: 

   # smbclinet -L 172.18.67.1 -U mrlapulga
    Enter mrlapulga\'s password: 
    Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-33.el6]
     Sharename       Type      Comment
     ---------       ----      -------
     IPC$            IPC       IPC Service (Samba Server Version 3.6.23-33.el6)
     mrlapulga       Disk      Home Directories
    Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-33.el6]
     Server               Comment
     ---------            -------
     Workgroup            Master
     ---------            -------


  也可实现挂载连接:

   # mount -t cifs //172.18.67.1/data/wordpress  /var/www/html/ -o username=mrlapulga,password=******


 6).此时我们已经利用samba服务实现了网站目录的远程共享服务.


六 实现效果


 

以上是关于基于Nfs和Samba的Lamp环境实现的主要内容,如果未能解决你的问题,请参考以下文章

基于NFS实现lamp的负载均衡之五: 部署httpd+php

Samba基础配置

基于NFS实现lamp的负载均衡之一: 实验拓扑

Linux-Samba或NFS实现文件共享

基于NFS实现lamp的负载均衡之四: 部署mariadb

基于NFS实现lamp的负载均衡之六: 部署discuz论坛