根据公司要求,实施过程大致如下:
1 部署SVN服务器,为PHP程序员创建repo目录的访问账户,通知程序员可以导入代码
2 部署nginx服务器
3 部署PHP服务器
4 部署MySQL主从服务器,根据程序员的要求创建数据库和表
5 部署MFS
6 发布上线

实验拓扑图如下:
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第1张图片

实验环境:
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第2张图片
源码包链接:https://pan.baidu.com/s/1JONQrVyqH0qMwVzKmwsoxA
提取码:0zm8
实验过程如下:
一 部署SVN

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

一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第3张图片

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

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

调整SVN参数

vim /opt/svn/repo/conf/svnserve.conf 
[general]             #总体配置
anon-access = none    #匿名用户没有任何权限 19行
auth-access = write   #认证用户具有写的权限 20行
password-db = /opt/svn/repo/conf/passwd    #用户的密码文件 27行
authz-db = /opt/svn/repo/conf/authz    #用户的信息文件 34行

svnserve -d -r /opt/svn/repo/ #启动SVN服务,关闭通过kill PID``

为PHP程序员创建账户,配置对repo具有读写权限,并将账户信息及仓库目录信息反馈给PHP程序员

cd /opt/svn/repo/
vim conf/passwd #创建账户密码文件
[users]
alpha = 123456 #格式:用户名 = 用户密码
sysadmin = 123456

创建权限文件

[/] #表示当前目录下的根
sysadmin = r
alpha = r
[/webphp]
sysadmin = r #运维工程师账户具有读权限,用于部署
alpha = rw #alpha对此目录具有读写权限

mkdir webphp
echo "this is abc" > test.txt #创建测试文件

一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第4张图片

导入webphp

svn import webphp file:///opt/svn/repo/webphp -m "init web"

一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)

二 部署nginx服务器
安装

systemctl stop firewalld.service #关闭防火墙
setenforce 0
yum install gcc gcc-c++ pcre-devel zlib-devel -y #安装编译环境
useradd -M -s /sbin/nologin nginx #创建进程管理用户
tar zxvf nginx-1.2.8.tar.gz -C /opt
cd /opt/nginx-1.2.8/
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --user=nginx --group=nginx
make && make install #编译安装

修改配置
需要配置后端PHP程序的fastcgi访问接口

vim /usr/local/nginx/conf/nginx.conf
user nginx;
location / {
root html;
index index.html index.htm;
}

location ~ .php$ {
root /var/www/html/webphp; #定义数据存放位置
fastcgi_pass 192.168.199.131:9000; #转发的数据交友PHP服务器处理
fastcgi_index index.php;
include fastcgi.conf; #文件改为配置文件
}

建立软链接便于系统识别命令

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx #开启服务

在浏览器进行访问,可以看到显示了nginx的欢迎首页
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第5张图片

三 部署PHP服务器

systemctl stop firewalld.service #关闭防火墙
setenforce 0

安装PHP,并且通过配置php-fpm进程监听9000端口来接受nginx的请求

yum install gd libxml2-devel libjpeg-devel libpng-devel mysql-devel gcc gcc-c++ -y #安装编译环境

useradd -M -s /sbin/nologin php #创建进程管理用户
tar zxvf php-5.5.38.tar.gz -C /opt
cd /opt/php-5.5.38/
cp /usr/lib64/mysql/libmysqlclient.so /usr/lib/libmysqlclient.so #PHP默认去/usr/lib搜索libmysqlclient.so,所以要将文件复制到这个目录下

./configure --prefix=/usr/local/php --with-gd --with-zlib --with-mysql --with-mysqli --with-mysql-sock --with-config-file-path=/usr/local/php --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
make && make install 编译安装

进行优化

cp php.ini-development /usr/local/php/php.ini #复制一份配置文件模板
ln -s /usr/local/php/bin/ /usr/local/bin/ #建立软链接方便直接使用命令
ln -s /usr/local/php/sbin/ /usr/local/sbin/ #建立软链接方便直接使用命令

修改主配置文件
配置php-fpm进程

cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
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 #最大空闲进程数

开启php-fpm进程

/usr/local/php/sbin/php-fpm
netstat -ntap | grep 9000 #查看端口

创建PHP站点目录,并且编写测试脚本

mkdir -p /var/www/html/webphp
vim /var/www/html/webphp/index.php
phpinfo();
?>

在浏览器上访问192.168.199.130/index.php
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第6张图片

四 部署MySQL主从服务器
安装MySQLmaster服务器:

systemctl stop firewalld.service
setenforce 0

yum install gcc gcc-c++ cmake ncurses-devel bison libaio-devel -y

tar zxvf mysql-5.5.24.tar.gz -C /opt

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT-CHARSET=utf8 -DDFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc

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 /etc/init.d/mysqld
vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile
useradd -M -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql/
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql #初始化数据库
service mysqld start #开启MySQL
mysqladmin -u root password '123456' #设置MySQL用户和密码

时间同步

yum install ntp -y
vim /etc/ntp.conf
server 127.127.1.0 #将本台主机定为时间同步服务器
fudge 127.127.1.0 stratum 8
systemctl start ntpd.service #启动ntp服务

主从同步:

vim /etc/my.cnf
server-id = 11
log-bin=master-bin #开启二进制文件
log-slave-update=true #允许从服务器进行同步

service mysqld restart

创建同步的账户和密码

mysql> grant replication slave on . to 'myslave'@'192.168.199.%' identified by '123456';

mysql> flush privileges; #刷新权限

mysql> show master status; #查看二进制日志状态

一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第7张图片

mysql> grant all privileges on . to 'php'@'192.168.199.%' identified by '123456'; #给php用户授权

在PHP服务器上创建测试脚本,测试MySQL能否连接PHP

$link=@mysql_connect ('192.168.199.132','php','123456');
if($link) echo "Welcome to mysql";
mysql_close();
?>

在浏览器上访问192.168.199.130/index.php
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第8张图片

MySQLslave:
时间同步:

yum install ntpdate -y
systemctl stop firewalld.service #关闭防火墙
setenforce 0
ntpdate 192.168.199.132 #进行时间同步

部署主从同步:

vim /etc/my.cnf
server-id = 22 #ID不能和MySQLmaster相同
relay-log=relay-log-bin
relay-log-index=slave-bin.index
service mysqld restart

指定同步服务器地址,同步所用的用户名和密码,以及同步的二进制日志文件和偏移量

mysql> change master to master master_host='192.168.199.132',master_user='myslave',master_password='123456',master_log_file='master-bin.000003',master_log_pos=257;

mysql> start slave; #开启同步

mysql> show slave status\G; #查看状态

一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第9张图片
测试同步:

mysql> create database school; #在MySQLmaster上创建school数据库

在从服务器上进行查看,出现school数据库表示主从同步成功
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第10张图片

五 部署MFS
MFSmaster:

yum install gcc gcc-c++ zlib-devel -y
#安装编译环境

useradd -s /sbin/nologin mfs
#创建进程用户

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-mfschunkserver \
--disable-mfsmount
#Master所以需要禁用chunkserver和mount两个模块

make && make install
#编译安装

systemctl stop firewalld.service
#关闭防火墙
setenforce 0

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

chown -R mfs.mfs /usr/local/mfs

/usr/local/mfs/sbin/mfsmaster start
#开启服务

MFSMetalogger:

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

useradd -s /sbin/nologin mfs

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-mfschunkserver \
--disable-mfsmount
#Log服务器需要禁用掉mfschunkserver和mfsmount两个模块

make && make install

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

vim mfsmetalogger.cfg
MASTER_HOST = 192.168.199.129
#指向master服务器
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第11张图片
chown -R mfs.mfs /usr/local/mfs/

/usr/local/mfs/sbin/mfsmetalogger start
#开启服务

ps -ef | grep mfs

systemctl stop firewalld.service
setenforce 0

搭建两台chunkserver,步骤一样:

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

useradd -s /sbin/nologin mfs

systemctl stop firewalld.service
setenforce 0

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-mfsmount
#本台服务器是Chunk Server,所以需要禁用掉mfsmaster和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 = 192.168.199.129
#地址指向master
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第12张图片
vim mfshdd.cfg
/data
#在mfshdd文件下添加一行/data,在这里/data是一个给MFS的分区
一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第13张图片
mkdir /data
#创建挂载目录
chown -R mfs.mfs /data

/usr/local/mfs/sbin/mfschunkserver start
#开启服务

六 在PHP服务器上进行挂载
安装fuse

yum install zlib-devel -y
yum install fuse fuse-devel -y

配置环境变量

vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
source /etc/profile

安装MFS

useradd -s /sbin/nologin mfs
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

挂载MFS

mkdir -p /var/www/html/webphp/ #创建挂载点
modprobe fuse
/usr/local/mfs/bin/mfsmount /var/www/html/webphp/ -H 192.168.199.129 -o nonempty
df -h #查看挂载

一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第14张图片

七 发布上线
通过在SVN服务器上创建的账户部署代码至nginx服务器和PHP服务器,注意nginx和PHP服务器的服务目录分别是/usr/local/nginx/html/webphp和/var/www/html/webphp/

cd /usr/local/nginx/html/
[root@localhost html]# svn co svn://192.168.199.128/webphp #根据提示使用在SVN创建的账户登录,即可部署代码
认证领域: a1d1bc57-8494-4a57-a50a-2b7ba1d75356
“root”的密码:
认证领域: a1d1bc57-8494-4a57-a50a-2b7ba1d75356
用户名: alpha
“alpha”的密码:

注意! 你的密码,对于认证域:

a1d1bc57-8494-4a57-a50a-2b7ba1d75356

只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。

保存未加密的密码(yes/no)?yes
A webphp/test.txt

一篇博客让你学会部署社交网站( SVN+nginx+PHP+MySQL+MFS 内含所有源码包)_第15张图片

可以看到在nginx服务器上存在SVN的测试文件,PHP服务器的部署方式和nginx服务器类似。