1. 程式人生 > >部署社交網站(SVN+PHP+NGINX+MYSQL+MFS)

部署社交網站(SVN+PHP+NGINX+MYSQL+MFS)

word dir ESS 目錄 支持php create make 控制 vpd

案例需求:社交網站采用PHP語言開發,為了管理開發代碼,搭建SVN服務器進行版本控制,社交網站的第一個版本部署在LNMP平臺上,前端為nginx服務器,通過fastcgi協議訪問後端的PHP服務器。這裏實現動靜分離,動態頁面交給PHP服務器來處理,靜態頁面交給nginx服務器來處理。為了保證數據安全,要求搭建Mysql數據庫主從集群。

社交網站項目包含用戶的相冊功能,允許用戶上傳照片,上傳照片需要使用共享存儲來存放,針對共享存儲采用MFS分布式文件系統來實現,並將MFS掛載在PHP服務器的相關目錄下。

本案例拓撲圖如圖所示:
技術分享圖片
案例實施
?部署SVN服務器,為PHP程序員創建repo目錄的訪問帳戶,通知程序員可以導入代碼

?部署Nginx服務器
?部署PHP服務器
?部署Mysql主從服務器,根據PHP程序員的要求創建數據庫與表
?部署MFS,將MFS文件系統掛載在前端PHP服務器的相關目錄下

案例部署環境:

主機 IP地址 操作系統 主要軟件包
SVN 172.20.10.4 CentOS7
Nginx 172.20.10.9 CentOS7 nginx-1.12.0.tar.gz
PHP 172.20.10.10 CentOS7 php-5.6.11.tar.bz2,mfs-1.6.27-5.tar.gz,fuse-2.9.2.tar.gz, ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
Mysql1 172.20.10.11 CentOS7 mysql-5.5.24.tar.gz
Mysql2 172.20.10.12 CentOS7 mysql-5.5.24.tar.gz
MFS master 172.20.10.13 CentOS7 mfs-1.6.27-5.tar.gz
metalogger 172.20.10.14 CentOS7 mfs-1.6.27-5.tar.gz
MFS chunk1 172.20.10.2 CentOS7 mfs-1.6.27-5.tar.gz
MFS chunk2 172.20.10.3 CentOS7 mfs-1.6.27-5.tar.gz

首先關閉所有主機的防火墻,selinux功能

systemctl stop firewalld.service
setenforce 0

部署SVN服務器:
?安裝SVN服務
yum install -y subversion #安裝SVN
svnserve --version #查看版本
技術分享圖片
為PHP程序員創建倉庫目錄repo
mkdir -p /opt/svn/repo
//創建目錄
svnadmin create /opt/svn/repo/
//創建一個新的倉庫
技術分享圖片
調整SVN參數
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服務
svnserve -d -r /opt/svn/repo/
netstat -tunpl|grep svnserve
技術分享圖片
為PHP程序員創建賬戶並賦權
vim /opt/svn/repo/conf/passwd
[users]
zhangsan = abc123
sysadmin = abc123
技術分享圖片
vim /opt/svn/repo/conf/authz
[/]
zhangsan = r //根目錄即/opt/svn/repo目錄下,sysadmin具有讀的權限
sysadmin = r //zhangsan用戶對根目錄有讀的權限
[/webphp]
zhangsan = rw //zhangsan用戶對此目錄有讀寫的權限,用戶導入PHP代碼
sysadmin = r //運維工程師具有讀的權限,用於部署
技術分享圖片
初始化php程序員目錄庫
mkdir /opt/svn/repo/webphp
svn import webphp/ file:///opt/svn/repo/webphp -m "初始化svn目錄"
技術分享圖片
SVN服務器部署完成,PHP程序員可以將寫好的代碼導入webphp項目中。
部署Nginx服務
?事先將需要的軟件包放到家目錄下,進行部署;
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支持php解析
(1)在nginx的主配置文件中的server{}配置段,將php的網頁請求轉給PHP服務器的fpm模塊處理
vi /usr/local/nginx/conf/nginx.conf
location ~ .php$ {
root /var/www/html/webphp; #php文件所在目錄
fastcgi_pass 172.20.10.10:9000; #php文件轉發給php-fpm模塊
fastcgi_index index.php; #默認文件是index.php
include fastcgi.conf; #包含fastcgi的配置文件
}
技術分享圖片
技術分享圖片
(2)重啟nginx服務

killall -1 nginx

部署PHP服務器
?事先將需要的軟件包放到家目錄下,進行部署;
(1)安裝php
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/

(2)配置安裝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
vim /usr/local/php5/php.ini

在php.ini文件末尾加入以下參數,開啟ZendGuardLoader模塊

技術分享圖片
(3)配置php-fpm進程

cd /usr/local/php5/etc/
cp php-fpm.conf.default php-fpm.conf
useradd -M -s /sbin/nologin php
vim php-fpm.conf
//找到這些內容,然後修改
pid = run/php-fpm.pid
user = php
group = php
listen = 0.0.0.0:9000
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
(4)啟動php-fpm進程
/usr/local/sbin/php-fpm
netstat -tnal | grep 9000
技術分享圖片
部署MySQL數據庫,部署主從復制
?事先將需要的軟件包放到家目錄下,進行部署;

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

優化調整

在mysql源碼目錄中的support-files文件夾下,根據實際需求建立mysql系統的配置文件my.cnf

將mysql服務的啟動腳本mysql.server添加為系統服務,並設置為開機自啟項
\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

設置環境變量

為了方便在任何目錄下使用mysql命令,需要在/etc/profile設置環境變量
echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
source /etc/profile

初始化數據庫

為了能夠正常使用mysql數據庫系統,應以運行用戶mysql的身份執行初始化
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

vim /etc/init.d/mysqld

...........

basedir=/usr/local/mysql

datadir=/home/mysql #修改服務啟動腳本,指定數據存放位置

............

啟動mysql服務
service mysqld start
netstat -anpt | grep 3306

配置主從復制;
?修改mysql master主服務器的配置文件,在配置文件中修改或增加以下選項

vim /etc/my.cnf

server-id = 1 //修改id
log-bin=master-bin //增加主服務器日誌文件//
log-slave-updates=true //增加從服務器更新二進制日誌//
技術分享圖片
重啟服務

service mysqld restart
技術分享圖片
登錄mysql程序,給mysql slave從服務器授權
技術分享圖片
mysql slave從服務器配置

?在配置文件中修改或增加以下選項

vim /etc/my.cnf

[mysqld]

server-id = 2 #與主服務器id不一樣

relay-log=relay-log-bin //從主服務器上同步日誌文件記錄到本地//

relay-log-index=slave-relay-bin.index //定義relay-log的位置和名稱//
技術分享圖片
service mysqld restart
技術分享圖片
登錄mysql配置同步

按主服務器結果更改下面命令中的master_log_file和master_log_pos的參數
技術分享圖片
在mysql master上給PHP服務器帳戶授權,並同時驗證主從同步;
技術分享圖片
在mysql slave上查看同步過來的數據庫daima;
技術分享圖片
映射SVN倉庫webphp服務目錄到Nginx和PHP服務器上;

在Nginx服務器上;
技術分享圖片
編輯nginx首頁文檔index.html,並在瀏覽器上進行測試
技術分享圖片
技術分享圖片

在PHP服務器上

mkdir -p /var/www/html/
技術分享圖片
在網站根目錄下編寫一個“.php”格式的測試頁面文件,使用PHP內建的“phpinfo()”函數顯示服務器的PHP環境信息,PHP代碼應包括在“<?php....?>”標記之間。
技術分享圖片
在網頁 測試“http://172.20.10.9/index.php”,若能夠看到PHP程序的版本號,配置命令,運行變量等相關信息,則表示web服務器已經能夠正常顯示PHP網頁。
技術分享圖片
測試PHP網頁能否訪問Mysql數據庫

?再編寫一個測試網頁文件mysql.php,添加簡單的數據庫操作命令,用於驗證與Mysql服務器的連接,查詢等操作。其中“mysql_connect()”函數用於連接Mysql數據庫,需要指定目標主機地址,以及授權訪問的用戶名,密碼。
技術分享圖片
通過瀏覽器訪問測試網頁,“http://172.20.10.9/mysql.php”,若能看到成功連接的提示信息,則表示能夠通過PHP頁面訪問Mysql數據庫。
技術分享圖片

部署MFS分布式文件系統

具體部署過程可參考另一篇文章《MFS分布式文件系統原理及環境搭建》

?搭建Master Server
yum install -y zlib-devel gcc gcc-c++
useradd mfs -s /sbin/nologin

tar xvf mfs-1.6.27-5.tar.gz
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

復制配置文件

在Master上需要用到的配置文件有兩個:mfsmaster.cfg(主配置文件)和mfsexports.cfg(被掛載目錄及權限配置文件)

cd /usr/local/mfs/etc/mfs/
cp mfsexports.cfg.dist mfsexports.cfg
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

cd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfs

/usr/local/mfs/sbin/mfsmaster start #開啟服務
?搭建MetaLogger server

yum install gcc gcc-c++ zlib-devel -y
useradd -s /sbin/nologin mfs

tar zxvf mfs-1.6.27-5.tar.gz
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

cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

修改配置文件
vi mfsmetalogger.cfg
MATER_HOST = 172.20.10.13 #指向master
技術分享圖片

/usr/local/mfs/sbin/mfsmetalogger start #開啟服務

?搭建chunk Server(兩臺節點服務配置一樣)

yum install -y zlib-devel gcc gcc-c++
useradd -s /sbin/nologin mfs
tar zxvf mfs-1.6.27-5.tar.gz
cd 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

修改配置文件

vi mfschunkserver.cfg
MASTER_HOST = 172.20.10.13
技術分享圖片
指定 MFS共享文件存儲目錄,
vi mfshdd.cfg
/data
技術分享圖片

mkdir /data
chown -R mfs:mfs /data

/usr/local/mfs/sbin/mfschunkserver start #啟動服務
?在PHP服務器上配置MFS客戶端。並掛載使用;

安裝fuse插件

yum install -y zlib-devel gcc gcc-c++

tar xzvf fuse-2.9.2.tar.gz
cd fuse-2.9.2

./configure
make && make install

vi /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
cd 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

將mfs文件系統掛載在PHP服務器的/var/www/html/webphp/uploads/photos目錄下
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
df –hT
技術分享圖片

優化客戶端

echo "export PATH=/usr/local/mfs/bin:$PATH" >>/etc/profile

source /etc/profile
技術分享圖片
mfssetgoal -r 2 /var/www/html/webphp/uploads/photos/ #設置文件被復制兩份
?在MASTER-server上啟動監控服務,通過瀏覽器可以監控MFS系統

/usr/local/mfs/sbin/mfscgiserv
技術分享圖片
下一篇《SVN客戶端配置及PHP程序員代碼導入》將講解在windows部署SVN客戶端及PHP程序員如何將代碼導入webphp項目中。

部署社交網站(SVN+PHP+NGINX+MYSQL+MFS)