1. 程式人生 > >一篇博客讓你學會部署社交網站( SVN+nginx+PHP+MySQL+MFS 內含所有源碼包)

一篇博客讓你學會部署社交網站( SVN+nginx+PHP+MySQL+MFS 內含所有源碼包)

con 從服務器 etc ini support php 添加 php程序員 type

根據公司要求,實施過程大致如下:
1 部署SVN服務器,為PHP程序員創建repo目錄的訪問賬戶,通知程序員可以導入代碼
2 部署nginx服務器
3 部署PHP服務器
4 部署MySQL主從服務器,根據程序員的要求創建數據庫和表
5 部署MFS
6 發布上線

實驗拓撲圖如下:
技術分享圖片

實驗環境:
技術分享圖片
源碼包鏈接:https://pan.baidu.com/s/1JONQrVyqH0qMwVzKmwsoxA
提取碼:0zm8
實驗過程如下:
一 部署SVN

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

技術分享圖片

為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 #創建測試文件

技術分享圖片

導入webphp

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

技術分享圖片

二 部署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的歡迎首頁
技術分享圖片

三 部署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
<?php
phpinfo();
?>

在瀏覽器上訪問192.168.199.130/index.php
技術分享圖片

四 部署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; #查看二進制日誌狀態

技術分享圖片

mysql> grant all privileges on . to ‘php‘@‘192.168.199.%‘ identified by ‘123456‘; #給php用戶授權

在PHP服務器上創建測試腳本,測試MySQL能否連接PHP

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

在瀏覽器上訪問192.168.199.130/index.php
技術分享圖片

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; #查看狀態

技術分享圖片
測試同步:

mysql> create database school; #在MySQLmaster上創建school數據庫

在從服務器上進行查看,出現school數據庫表示主從同步成功
技術分享圖片

五 部署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服務器
技術分享圖片
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
技術分享圖片
vim mfshdd.cfg
/data
#在mfshdd文件下添加一行/data,在這裏/data是一個給MFS的分區
技術分享圖片
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服務器,註意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創建的賬戶登錄,即可部署代碼
認證領域: <svn://192.168.199.128:3690> a1d1bc57-8494-4a57-a50a-2b7ba1d75356
“root”的密碼:
認證領域: <svn://192.168.199.128:3690> a1d1bc57-8494-4a57-a50a-2b7ba1d75356
用戶名: alpha
“alpha”的密碼:

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

<svn://192.168.199.128:3690> a1d1bc57-8494-4a57-a50a-2b7ba1d75356

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

你可以通過在“/root/.subversion/servers”中設置選項“store-plaintext-passwords”為“yes”或“no”,
來避免再次出現此警告。

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

技術分享圖片

可以看到在nginx服務器上存在SVN的測試文件,PHP服務器的部署方式和nginx服務器類似。

一篇博客讓你學會部署社交網站( SVN+nginx+PHP+MySQL+MFS 內含所有源碼包)