概述:

社交网站的第一个版本部署在LNMP平台之上,前段为Nginx服务器,通过fastcgi协议访问后端的PHP服务器。为了保证数据安全,要求搭建MySQL数据库主从集群。

项目介绍:

本项目案例结合SVN、LNMP和MySQL三种环境,部署一个社交网站,本社交网站采用PHP语言开发,搭建SVN服务器进行版本控制和集中管理PHP程序员开发的代码,以Nginx作为前端服务器,通过fastcgi协议访问后端的PHP服务器,调用PHP页面;为保证数据安全,搭建MySQL主从复制环境存储用户重要数据;另外搭建MFS分布式文件系统来存储用户照片。

项目实验图解:

项目案例拓扑图:

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第1张图片

网络关系原理如下图所示:

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第2张图片

案例实施步骤:

* 部署SVN服务器,为PHP程序员创建repo目录的访问账户,通知程序员可以导入代码。
* 部署MySQL主从服务器,根据PHP程序员的要求创建数据库与表。
* 部署Nginx服务器。
* 部署PHP服务器。
* 部署MFS,将MFS文件系统挂载在前端PHP服务器的相关目录下。
* 通知上线部署人员可以发布上线。
* 保证数据库服务、PHP服务、Nginx服务依次启动,并通知测试人员开始测试,网站维护人员检查Nginx、PHP与数据库服务器是否正常工作。

接下来部署实验:

环境准备:

主机 操作系统 IP地址 主要软件
Nginx CentOS7.5 x86_64 172.20.10.9 nginx-1.12.0.tar.gz
PHP CentOS7.5 x86_64 172.20.10.10 php-5.6.11.tar.bz2/ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz/ mfs-1.6.27-5.tar.gz/fuse-2.9.2.tar.gz
MySQL Master CentOS7.5 x86_64 172.20.10.11 mysql-5.5.24.tar.gz
MySQL Slave CentOS7.5 x86_64 172.20.10.12 mysql-5.5.24.tar.gz
Master Server CentOS7.5 x86_64 172.20.10.13 mfs-1.6.27-5.tar.gz
MetaLogger CentOS7.5 x86_64 172.20.10.14 mfs-1.6.27-5.tar.gz
Chunk Server01 CentOS7.5 x86_64 172.20.10.2 mfs-1.6.27-5.tar.gz
Chunk Server02 CentOS7.5 x86_64 172.20.10.3 mfs-1.6.27-5.tar.gz
SVN CentOS7.5 x86_64 172.20.10.4 subversion 1.7.14

实验过程:

注意:1. 所有下载好需要安装的软件包都存放在根目录下;2.每次服务配置文件改完即重启服务确保实验顺利。

  • 部署SVN服务器

安装SVN:

*  systemctl stop firewalld.service
* setenforce 0
* yum install -y subversion    #安装SVN
* svnserve --version  #查看版本

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第3张图片

为PHP程序员创建仓库 目录repo:

* mkdir -p /opt/svn/repo/           #创建目录
* svnadmin create /opt/svn/repo/        #创建一个新的仓库

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第4张图片
调整SVN参数:

* [general]    #总体配置
* vim /opt/svn/repo/conf/svnserve.conf        #   修改配置
* anon-access = none          #匿名用户没有任何权限
* auth-access = write            #认证用户具有写权限
* password-db = /opt/svn/repo/conf/passwd       #用户的密码文件
* authz-db = /opt/svn/repo/conf/authz                 #用户信息文件,主要是权限内容

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第5张图片

* svnserve -d -r /opt/svn/repo/
* netstat -tunlp | grep svnserve  
#监听端口3690

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线
接下来为PHP程序员创建账户并赋权:

* vim /opt/svn/repo/conf/passwd
* [users]
* zhangsan = abc123         #格式:用户名=用户密码
* sysadmin = abc123

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第6张图片

* vim /conf/authz
* [/]
* zhangsan = r          #根目录即/opt/svn/repo目录下,zhangsan和sysadmin具有读的权限
* sysadmin = r
* [/webphp]
* zhangsan = rw      #zhangsan和sysadmin用户对此目录有读写的权限,用户导入PHP代码
* sysadmin =  rw        

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第7张图片

* mkdir /opt/svn/repo/webphp
* svn import webphp/ file:///opt/svn/repo/webphp -m "初始化svn目录"

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第8张图片

  • 部署MySQL主从服务器
    这里安装两台MySQL服务器直接用如下写好的shell脚本执行自动安装启动:

    #!/bin/bash
    yum -y install ncurses-devel cmake gcc gcc-c++ ncurses bison libaio-devel
    cd ~/
    tar xzvf mysql-5.5.24.tar.gz
    cd mysql-5.5.24/
    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc -DMYSQL_DATADIR=/home/mysql/ -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=system -DMYSQL_TCP_PORT=3306 -DENABLE_DOWNLOADS=1 -DWITH_SSL=bundled 
    make && make install
    \cp support-files/my-medium.cnf /etc/my.cnf
    cp support-files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld       
    chkconfig --add mysqld
    chkconfig --level 35 mysqld on 
    echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
    source /etc/profile
    useradd -s /sbin/nologin mysql
    chown -R mysql.mysql /usr/local/mysql
    /usr/local/mysql/scripts/mysql_install_db --user=mysql --ldata=/var/lib/mysql --basedir=/usr/local/mysql --datadir=/home/mysql 
    sed -i '46c basedir=/usr/local/mysql' /etc/init.d/mysqld
    sed -i '47c datadir=/home/mysql' /etc/init.d/mysqld
    service mysqld start
    netstat -anpt | grep 3306

    执行脚本安装完成、启动之后查看监听端口:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线
    修改MySQL主服务器配置文件:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第9张图片
    登录MySQL程序,给从服务器授权:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第10张图片
    主服务器上给PHP授权:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第11张图片
    接下来修改MySQL从服务器配置文件:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第12张图片
    启动从服务器之后查看监听端口:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线
    登录MySQL从服务器配置同步:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第13张图片
    在从服务器中可以验证,可以查看到从主服务器上同步过来的库daima:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第14张图片

  • 部署Nginx服务器
    这里安装Nginx服务器直接用如下写好的shell脚本执行自动安装启动:

    #!/bin/bash
    yum -y install pcre-devel zlib-devel gcc gcc-c++ make
    useradd -M -s /sbin/nologin nginx
    tar xzvf nginx-1.12.0.tar.gz -C /opt
    cd /opt/nginx-1.12.0/
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module 
    make && make install
    ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
    nginx   
    netstat -antp | grep nginx

    安装完成之后修改nginx配置文件:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第15张图片
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第16张图片

  • 部署PHP服务器
    这里安装配置PHP服务器直接用如下写好的shell脚本执行自动安装启动:
    #!/bin/bash
    yum -y install gd libxml2-devel libjpeg-devel libpng-devel zlib-devel fontconfig-devel openssl-devel bzip2-devel
    cd ~/
    tar xjvf php-5.6.11.tar.bz2 
    cd php-5.6.11/
    ./configure --prefix=/usr/local/php5 --with-gd --with-zlib -with-config-file-path=/usr/local/php5 --enable-mbstring --with-jpeg-dir=/usr/lib --with-openssl --disable-ipv6 --enable-fpm 
    make && make install
    cp php.ini-development /usr/local/php5/php.ini
    ln -s /usr/local/php5/bin/* /usr/local/bin/
    ln -s /usr/local/php5/sbin/* /usr/local/sbin/
    #配置php识别加速器
    cd ~/
    tar xzvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
    cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x
    cp ZendGuardLoader.so /usr/local/php5/lib/php
    sed -i '$a [Zend Guard Loader]\nzend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so\nzend_loader.enable=1'  /usr/local/php5/php.ini
    #开启nginx的php支持
    cd /usr/local/php5/etc/
    cp  php-fpm.conf.default php-fpm.conf
    useradd -M -s /sbin/nologin php 
    sed -i '25s/;//g' /usr/local/php5/etc/php-fpm.conf
    sed -i '149,150s/nobody/php/g' /usr/local/php5/etc/php-fpm.conf
    sed -i '235s/5/50/g' /usr/local/php5/etc/php-fpm.conf
    sed -i '240s/2/20/g' /usr/local/php5/etc/php-fpm.conf
    sed -i '245s/1/5/g' /usr/local/php5/etc/php-fpm.conf
    sed -i '250s/3/35/g' /usr/local/php5/etc/php-fpm.conf
    sed -i '/^listen/c listen = 0.0.0.0:9000' /usr/local/php5/etc/php-fpm.conf
    /usr/local/sbin/php-fpm
    netstat -tnal | grep 9000
    mkdir -p /var/www/html

    提示:安装完成之后shell脚本执行已经改好了配置,我们可以通过以下图示看一下:
    部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第17张图片

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第18张图片
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第19张图片
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第20张图片
配置加速器:
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第21张图片

启动PHP-fpm进程 /usr/local/php/sbin/php-fpm 然后查看监听端口:
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线

  • 部署MFS
*  安装环境包:
* yum install -y zlib-devel gcc gcc-c++              #安装所需的环境包
* useradd mfs -s /sbin/nologin                          #创建用户mfs
* 解压下载好的软件包并进行手工编译安装:
* * tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
* cd mfs-1.6.27                     #切换到opt/mfs-1.6.27下插入如下配置
* ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \           
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
* make && make install
* 切换到配置文件下复制并去掉模板的dist后缀,开启配置文件:
* cd /usr/local/mfs/etc/mfs/    
  cp mfsmaster.cfg.dist mfsmaster.cfg    
  cp mfsexports.cfg.dist mfsexports.cfg
  cp mfstopology.cfg.dist mfstopology.cfg
* cd /usr/local/mfs/var/mfs/
  cp metadata.mfs.empty metadata.mfs
*   关闭防火墙、关闭增强性安全功能:
* systemctl stop firewalld.service
* setenforce 0
*  /usr/local/mfs/sbin/mfsmaster start    #开启服务
* ps -ef | grep mfs        #查看监听状态
* /usr/local/mfs/sbin/mfsmaster -s  #停止

到此master server已经搭建完成,接下来搭建metalogger server:

* 安装编译环境、关闭防火墙、关闭增强性安全功能:
*  yum install -y zlib-devel gcc gcc-c++
* systemctl stop firewalld.service
* setenforce 0

创建mfs用户,解压软件包进行手工编译:

* useradd -s /sbin/nologin mfs
* tar xzvf mfs-1.6.27-5.tar.gz -C /opt/
* cd mfs-1.6.27
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
* make && make install

切换到配置文件下复制并去掉模板的dist后缀,开启配置文件:

* cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
* vim mfsmetalogger.cfg
MASTER_HOST = 172.20.10.13     去掉#注释 添加主机地址

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第22张图片

* cd /usr/local/mfs/var/mfs
  mv metadata.mfs.empty metadata.mfs
* /usr/local/mfs/sbin/mfsmetalogger start    #开启服务

到此metalogger server已经搭建完成,接下来搭建两台节点服务器 chunk server
先搭建第一台chunk server:

* systemctl stop firewalld.service
* setenforce 0
* yum install -y zlib-devel gcc gcc-c++
* useradd -s /sbin/nologin mfs
* tar xzvf mfs-1.6.27-5.tar.gz -C /opt/
* cd /opt/mfs-1.6.27
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount
* make && make install
* cd /usr/local/mfs/etc/mfs/
  cp mfschunkserver.cfg.dist mfschunkserver.cfg
  cp mfshdd.cfg.dist mfshdd.cfg
* vim mfschunkserver.cfg
    MASTER_HOST = 172.20.10.13      去掉#注释 添加主机地址
* vim mfshdd.cfg
   /data               #末尾添加`` 提供存储空间
* mkdir /data
* chown -R mfs:mfs /data
* /usr/local/mfs/sbin/mfschunkserver start
* netstat -ntap 
* 提示: 第一台 chunk server搭建完成,第二台和第一台安装配置是一样的,这里就不再写了。

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第23张图片
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第24张图片

接下来配置PHP客户端:

* systemctl stop firewalld.service
* setenforce 0
* yum install -y zlib-devel
* tar xzvf fuse-2.9.2.tar.gz -C /opt/
* cd /opt/fuse-2.9.2
  ./configure
* make && make install 
* vim /etc/profile
  export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH  #末尾插入
* source /etc/profile
* 安装mfs客户端:
* useradd mfs -s /sbin/nologin
* tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
* cd /opt/mfs-1.6.27
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount

* make && make install 
*mkdir -p /var/www/html/webphp/uploads/photos
* modprobe fuse  #加载fuse模块到内核
*/usr/local/mfs/bin/mfsmount /var/www/html/webphp/uploads/photos -H 172.20.10.13
   #指向master主机
* df -hT   #查看挂载

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第25张图片

* 优化客户端:
* vim /etc/profile
* export PATH=/usr/local/mfs/bin:$PATH       #设置环境变量 在末尾插入
* cd /opt/mfs(可在mfs里写入内容进行验证:echo "this is test" > test.txt)
* source /etc/profile    #重新加载
* mfsgetgoal -r 2 /opt/mfs/        #复制2份文件

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第26张图片
最后一步在master server启动监控程序:

* /usr/local/mfs/sbin/mfscgiserv
* http://172.20.10.13:9425        #客户端浏览器上进行访问测试

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第27张图片

最后映射SVN仓库webphp服务目录到Nginx和PHP服务器的webphp目录上:

Nginxf服务器上:
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第28张图片
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第29张图片
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第30张图片

PHP服务器上:
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第31张图片
测试PHP、解析MySQL:
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第32张图片
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第33张图片
部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第34张图片

部署社区网站,搭建SVN、nginx、PHP,部署MFS并挂载,发布上线_第35张图片