1. 程式人生 > >超詳細搭建SVN+Nginx+PHP+MySQL+MFS服務構建社交網站

超詳細搭建SVN+Nginx+PHP+MySQL+MFS服務構建社交網站

int 系統管 賬戶 profile version 索引 script htm index

簡介

公司的社交網站采用PHP語言開發,為了管理PHP程序員開發的代碼,上級領導要求搭建SVN服務器進行版本控制。社交網站的第一個版本部署在LNMP平臺上,前端為Nginx,通過fastcgi協議訪問後端的PHP服務器。為了保證數據安全,要求搭建MySQL數據庫主從集群。

社交網站包含用戶的相冊功能,允許用戶上傳照片,上傳照片需要使用共享存儲來存放。公司決定使用MFS分布式文件系統,並將MFS掛載到PHP服務器的相關目錄下。
技術分享圖片

實驗環境

主機名稱 操作系統 IP地址 主要軟件
Nginx CentOS_7.4_x86_64 192.168.100.71 nginx-1.12.0.tar.gz
PHP CentOS_7.4_x86_64 192.168.100.72 php-5.5.38.tar.gz、mfs-1.6.27-5.tar.gz、fuse-2.9.2.tar.gz
MySQLMaster CentOS_7.4_x86_64 192.168.100.73 mysql-5.5.24.tar.gz
MySQLSlave CentOS_7.4_x86_64 192.168.100.74 mysql-5.5.24.tar.gz
MasterServer CentOS_7.4_x86_64 192.168.100.75 mfs-1.6.27-5.tar.gz
MetaLogger CentOS_7.4_x86_64 192.168.100.76 mfs-1.6.27-5.tar.gz
ChunkServer01 CentOS_7.4_x86_64 192.168.100.77 mfs-1.6.27-5.tar.gz
ChunkServer02 CentOS_7.4_x86_64 192.168.100.78 mfs-1.6.27-5.tar.gz
ChunkServer03 CentOS_7.4_x86_64 192.168.100.79 mfs-1.6.27-5.tar.gz
SVN CentOS_7.4_x86_64 192.168.100.79

一、搭建Nginx

1、安裝相應的工具包以及C語言編譯器

[root@Nginx ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++

2、創建Nginx進程用戶

[root@Nginx ~]# useradd -M -s /sbin/nologin nginx

3、配置、編譯及編譯安裝Nginx源碼包

[root@Nginx ~]# tar xvf nginx-1.12.0.tar.gz -C /usr/src/
[root@Nginx ~]# cd /usr/src/nginx-1.12.0/
[root@Nginx nginx-1.12.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_stub_status_module
[root@Nginx nginx-1.12.0]# make && make install

4、優化路徑

[root@Nginx ~]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

5、編輯主配置文件

[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf

pid        logs/nginx.pid;   #打開註釋
 server {
…… 
      location / {
            root   html;
            index  index.html index.htm;
        }
#添加以下參數  
       location ~ \.php$ {
            root           /var/www/html/webphp;   #指定PHP服務器站點目錄
            fastcgi_pass   192.168.100.72:9000;    #指定PHP服務器地址及端口
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }
……
}

6、編輯啟動腳本

[root@Nginx ~]# vim /lib/systemd/system/nginx.service

[Unit]
Description=Nginx Server Control Script        
After=network.target                           

[Service]
Type=forking                                   
PIDFile=/usr/local/nginx/logs/nginx.pid        
ExecStart=/usr/local/nginx/sbin/nginx          
ExecReload=/usr/bin/kill -s HUP $PIDFile       
ExecStop=/usr/bin/kill -s QUIT $PIDFile        

[Install]
WanteBy=multi-user.target

7、啟動服務

[root@Nginx ~]# systemctl daemon-reload
[root@Nginx ~]# systemctl start nginx.service
[root@Nginx ~]# netstat -anpt | grep ‘:80‘

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4812/nginx: master  

8、訪問測試

http://192.168.100.71/
技術分享圖片

二、搭建PHP

1、安裝相關依賴包

[root@PHP ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++

2、安裝GD庫關聯軟件

[root@PHP ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel zlib-devel fontconfig-devel openssl-devel bzip2-devel

3、解壓配置安裝php

[root@PHP ~]# tar zxvf php-5.5.38.tar.gz -C /usr/src/
[root@PHP ~]# cd /usr/src/php-5.5.38/
[root@PHP php-5.5.38]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-config-file-path=/usr/local/php5 --enable-mbstring --with-jpeg-dir --with-openssl --disable-ipv6 --with-mysql --with-mysqli --with-pdo-mysq --enable-fpm
[root@PHP php-5.5.38]# make && make install

4、創建PHP配置文件

[root@PHP php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini

5、優化路徑

[root@PHP ~]# ln -s /usr/local/php5/bin/ /usr/local/bin/
[root@PHP ~]# ln -s /usr/local/php5/sbin/
/usr/local/sbin/

6、為PHP安裝加速器

[root@PHP ~]# tar xvfz ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
[root@PHP ~]# cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/
[root@PHP php-5.3.x]# cp ZendGuardLoader.so /usr/local/php5/lib/php/

7、配置PHP識別加速器

[root@PHP ~]# vim /usr/local/php5/php.ini

#末行添加以下參數
[Zend Guard Loader]
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1

8、開啟Nginx對PHP的支持

[root@PHP ~]# cd /usr/local/php5/etc/
[root@PHP etc]# cp php-fpm.conf.default php-fpm.conf
[root@PHP etc]# useradd -M -s /sbin/nologin php
[root@PHP etc]# vim php-fpm.conf

pid = run/php-fpm.pid     #約25行,去掉註釋,確定pid文件的位置
user = php                #約149行,指定用戶
group = php               #約150行,指定組
pm.max_children = 50      #約230行,最多擴延進程數量,先改為50,一個水桶,它代表桶的容積
pm.start_servers = 20     #約235行,開啟的進程數,改成20,啟動時,開啟的進程數
pm.min_spare_servers = 5  #約240行,最少空閑進程數是5,低於這個數,每秒鐘會產生一個新的進程
pm.max_spare_servers = 20 #約245行,最多允許的空間進程數,客戶不連接PHP,最多允許的空間進程數
listen = 0.0.0.0:9000     #約164行,監聽任意網段地址訪問

9、啟動進程管理工具

[root@PHP ~]# /usr/local/sbin/php-fpm
[root@PHP ~]# netstat -anpt | grep ‘9000‘
技術分享圖片

10、創建站點目錄

[root@PHP ~]# mkdir -p /var/www/html/webphp
[root@PHP ~]# cd /var/www/html/webphp/

11、編輯測試首頁

[root@PHP webphp]# vim index.php

<?php
phpinfo();
?>

技術分享圖片

三、搭建Mysql

1、搭建Mysql5.5.24

搭建MySQL請參考我之前寫的博文,有具體的詳細步驟 http://blog.51cto.com/11905606/2170903

2、添加遠程管理用戶

[root@localhost ~]# mysql -u root -p123
mysql> grant all privileges on . to ‘admin‘@‘%‘ identified by ‘123‘;

3、編輯測試頁面

[root@PHP ~]# cd /var/www/html/webphp/
[root@PHP webphp]# vim index.php

<?php
$link=mysql_connect(‘192.168.100.73‘,‘admin‘,‘123‘);
if($link) echo "Welcome to Mysql";
mysql_close();
?>

技術分享圖片

三、配置主從復制

1、兩臺主機安裝NTP服務

[root@MySQLMaster ~]# yum -y install ntp

2、Master主機編輯NTP配置文件

[root@MySQLMaster ~]# vim /etc/ntp.conf

末行添加:
server 127.127.100.0    #指定本地服務器,註意這裏設置的IP,我使用的是100網段
fudge 127.127.100.0 stratum 8 #指定層級,設為8級別 不需要跟別人同步,自己與自己同步

[root@MySQLMaster ~]# systemctl restart ntpd.service #重啟服務

3、從節點設置時間同步

[root@MySQLSlave ~]# yum -y install ntp ntpdate
[root@MySQLSlave ~]# /usr/sbin/ntpdate 192.168.100.73
技術分享圖片

4、Master服務器配置

1).修改主配置文件

[root@MySQLMaster ~]# vim /etc/my.cnf

#在[mysqld]標簽中編輯以下參數:
[mysqld]
log-bin=master-bin     #約49行,將二進制日誌修改為主服務器日誌文件。 
server-id  = 11        #約57行,修改Mysql服務器id
log-slave-updates=true #添加此行,允許同步,允許客戶機連接同步更新

2).重啟服務

[root@MySQLMaster ~]# systemctl restart mysqld.service

3).授權從服務器

[root@MySQLMaster ~]# mysql -u root -p
mysql> grant replication slave on . to ‘adm‘@‘192.168.100.%‘ identified by ‘123‘;
mysql> flush privileges; #更新權限
mysql> show master status; #查看服務器的狀態

+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 |      254 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> quit

4、Slave服務器配置

1).修改主配置文件

[root@MySQLSlave ~]# vim /etc/my.cnf

#在[mysqld]標簽中編輯以下參數:
[mysqld]
#log-bin=mysql-bin                     #將49行二進制日誌文件註釋掉,產生文件,造成浪費      
server-id = 22                         #約57行,設置服務器id,這裏註意不要和主服務器IP地址重復
relay-log=relay-log-bin                #添加此項,IO線程通過讀取日誌要放入relay-log中
relay-log-index=slave-relay-bin.index  #添加此項,索引日誌位置

2).重啟服務

[root@MySQLSlave ~]# systemctl restart mysqld.service

3).配置主從同步

[root@MySQLSlave ~]# mysql -u root -p
mysql> change master to master_host=‘192.168.100.73‘,master_user=‘adm‘,master_password=‘123‘,master_log_file=‘master-bin.000002‘,master_log_pos=254;

#修改master指定主服務器主機名、用戶名、密碼、文件、位置
master_host:    #指定主服務器主機名
master_user:    #指定主服務器予權限的用戶
master_password:#指定主服務器予權限的密碼
master_log_fie: #指定主服務器二進制文件名稱
master_log_pos: #指定主服務器二進制文件位置

mysql> start slave; #啟動從服務器
mysql> show slave status\G; #查看服務器的狀態
技術分享圖片

5、主從復制效果測試

1).master服務器添加數據

[root@master ~]# mysql -u root -p
mysql> create database db_test;

2).查看slave服務器

技術分享圖片

四、配置MFS分布式文件系統

1、搭建Master Server

1).安裝相關編譯器、工具包

[root@masterserver ~]# yum -y install gcc gcc-c++ zlib-devel

2).創建進程用戶

[root@masterserver ~]# useradd -s /sbin/nologin mfs

3).安裝mfs軟件包

[root@masterserver ~]# tar xvfz mfs-1.6.27-5.tar.gz
[root@masterserver ~]# cd mfs-1.6.27/
[root@masterserver mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount

解析:
prefix                 #指定安裝目錄
with-default-user      #指定運行用戶
with-default-group     #指定運行組
disable-mfschunkserver #禁用mfs的chunk功能
disable-mfsmount       #禁言mfs的mount功能

[root@masterserver mfs-1.6.27]# make && make install #編譯及編譯安裝

4).修改相關文件信息

[root@masterserver ~]# cd /usr/local/mfs/etc/mfs/
[root@masterserver mfs]# cp mfsexports.cfg.dist mfsexports.cfg #掛載以及權限設定文件
[root@masterserver mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg #主配置文件
[root@masterserver mfs]# cp mfstopology.cfg.dist mfstopology.cfg #日誌文件

[root@masterserver ~]# cd /usr/local/mfs/var/mfs/
[root@masterserver mfs]# cp metadata.mfs.empty metadata.mfs #master元數據文件

5).優化路徑

[root@masterserver ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/

6).啟動服務

[root@masterserver ~]# mfsmaster start
[root@masterserver ~]# netstat -anpt | grep ‘mfs‘
技術分享圖片

2、搭建MetaLogger Server

1).安裝相關編譯器、工具包

[root@metalogger ~]# yum -y install gcc gcc-c++ zlib-devel

2).創建進程用戶

[root@metalogger ~]# useradd -s /sbin/nologin mfs

3).安裝mfs軟件包

[root@metalogger ~]# tar xvfz mfs-1.6.27-5.tar.gz
[root@metalogger ~]# cd mfs-1.6.27
[root@metalogger mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[root@metalogger mfs-1.6.27]# make && make install

4).修改主配置文件

[root@metalogger ~]# cd /usr/local/mfs/etc/mfs/
[root@metalogger mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@metalogger mfs]# vim mfsmetalogger.cfg
技術分享圖片

5).優化路徑

[root@metalogger ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/

6).啟動服務

[root@metalogger ~]# mfsmetalogger start
[root@metalogger ~]# netstat -anpt | grep ‘mfsmetalogger‘
技術分享圖片

3、搭建Chunk Server(三臺主機搭建步驟相同,其余兩臺搭建過程略……)

1).安裝相關編譯器、工具包

[root@chunkserver01 ~]# yum -y install gcc gcc-c++ zlib-devel

2).創建進程用戶

[root@chunkserver01 ~]# useradd -s /sbin/nologin mfs

3).安裝mfs軟件包

[root@chunkserver01 ~]# tar xvfz mfs-1.6.27-5.tar.gz
[root@chunkserver01 ~]# cd mfs-1.6.27
[root@chunkserver01 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount
[root@chunk01 mfs-1.6.27]# make && make install

4).修改相應配置文件

[root@chunkserver01 ~]# cd /usr/local/mfs/etc/mfs/
[root@chunkserver01 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@chunkserver01 mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[root@chunkserver01 mfs]# vim mfschunkserver.cfg
技術分享圖片

[root@chunkserver01 mfs]# vim mfshdd.cfg
技術分享圖片

5).創建MFS分區目錄

[root@chunkserver01 mfs]# mkdir /data
[root@chunkserver01 mfs]# chown -R mfs:mfs /data/

6).優化路徑

[root@chunkserver01 ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/

7).啟動服務

[root@chunkserver01 ~]# mfschunkserver start
[root@chunkserver01 ~]# netstat -anpt | grep ‘mfschunkserver‘
技術分享圖片

五、MFS掛載

1、安裝相關編譯器、工具包

[root@PHP ~]# yum -y install gcc gcc-c++ zlib-devel

2、安裝fuse軟件包

[root@PHP ~]# tar xvfz fuse-2.9.2.tar.gz
[root@PHP ~]# cd fuse-2.9.2
[root@PHP fuse-2.9.2]# ./configure && make && make install

3、設置環境變量

[root@PHP ~]# vim /etc/profile

#末行添加
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

[root@PHP ~]# source /etc/profile #重新加載系統環境變量配置文件

4、創建進程用戶

[root@PHP ~]# useradd -s /sbin/nologin -M mfs

5、安裝mfs軟件包

[root@PHP ~]# tar xvfz mfs-1.6.27-5.tar.gz
[root@PHP ~]# cd mfs-1.6.27
[root@PHP mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmaster --enable-mfsmount
[root@PHP mfs-1.6.27]# make && make install

6、掛載MFS文件系統

[root@PHP ~]# modprobe fuse #加載fuse模塊到內核
[root@PHP mfs-1.6.27]# rm -rf /var/www/html/webphp/* #清空站點
[root@PHP ~]# /usr/local/mfs/bin/mfsmount /var/www/html/webphp/ -H 192.168.100.75 #掛載MFS
[root@PHP ~]# df -h #查看掛載情況
技術分享圖片

六、部署SVN服務器

1、安裝SVN服務

[root@svn ~]# yum install subversion -y
[root@svn ~]# svnserve --version #查看版本信息
技術分享圖片

2、創建倉庫目錄

[root@svn ~]# mkdir -p /opt/svn/repo #創建目錄
[root@svn ~]# svnadmin create /opt/svn/repo/ #創建倉庫

[root@svn ~]# cd /opt/svn/repo/
[root@svn repo]# ls
技術分享圖片

3、修改主配置文件

[root@svn ~]# vim /opt/svn/repo/conf/svnserve.conf

anon-access = none                       #約19行,匿名用戶權限設置,可設置的值"red"、"write"、"none"
auth-access = write                      #約20行,認證用戶權限設置,可設置的值"red"、"write"、"none"
password-db = /opt/svn/repo/conf/passwd  #約27行,用戶密碼文件存放位置
authz-db = /opt/svn/repo/conf/authz      #約34行,用戶信息文件

4、啟動服務

[root@svn ~]# svnserve -d -r /opt/svn/repo/

-d:指定後臺運行
-r:指定倉庫路徑

技術分享圖片

5、修改用戶配置文件

[root@svn ~]# cd /opt/svn/repo/conf/
[root@svn conf]# vim passwd #編輯賬戶密碼文件

#在[users]選項中添加以下參數
[users]
alpha = 123          #PHP程序員設置的賬戶。格式:"用戶名 = 用戶密碼"
sysadmin = 123       #針對SVN服務器系統管理員賬戶

[root@svn conf]# vim authz    #編輯權限配置文件
#末行添加以下參數
[/]           #"/"指的是SVN倉庫目錄也就是"/opt/svn/repo"
sysadmin = rw  #管理員用戶擁有"讀寫"權限
alpha = rw     #PHP程序員擁有"讀寫"權限

[/webphp]
sysadmin = rw
alpha = rw

6、初始化目錄

[root@svn ~]# cd /opt/svn/repo/
[root@svn repo]# mkdir webphp
[root@svn repo]# touch webphp/abc.txt webphp/456.txt #創建測試文件
[root@svn repo]# svn import webphp file:///opt/svn/repo/webphp/ -m "初始化SVN目錄"
技術分享圖片

七、發布上線

1、上傳Nginx服務器

[root@Nginx ~]# yum install subversion -y
[root@Nginx ~]# svn co svn://192.168.100.80/webphp

認證領域: <svn://192.168.100.80:3690> d53608c3-fa15-4f46-bbaf-b949f18f4bff
“root”的密碼:    #root密碼
認證領域: <svn://192.168.100.80:3690> d53608c3-fa15-4f46-bbaf-b949f18f4bff
用戶名: alpha
“alpha”的密碼:    

-----------------------------------------------------------------------
註意!  你的密碼,對於認證域:

   <svn://192.168.100.80:3690> d53608c3-fa15-4f46-bbaf-b949f18f4bff

只能明文保存在磁盤上!  如果可能的話,請考慮配置你的系統,讓 Subversion
可以保存加密後的密碼。請參閱文檔以獲得詳細信息。

你可以通過在“/root/.subversion/servers”中設置選項“store-plaintext-passwords”為“yes”或“no”,
來避免再次出現此警告。
-----------------------------------------------------------------------
保存未加密的密碼(yes/no)?yes
A    webphp/abc.txt
A    webphp/456.txt
取出版本 2。

[root@Nginx ~]# cd webphp/
[root@Nginx webphp]# ls
技術分享圖片

2、上傳PHP服務器

註意:PHP與Nginx上傳相同,此處略……

超詳細搭建SVN+Nginx+PHP+MySQL+MFS服務構建社交網站