一篇博客讓你學會部署社交網站( SVN+nginx+PHP+MySQL+MFS 內含所有源碼包)
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 0yum 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 0cd /usr/local/mfs/etc/mfs/
cp mfsexports.cfg.dist mfsexports.cfg
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsmetalogger.cfg.dist mfsmetalogger.cfgcd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfschown -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.cfgvim 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 0tar 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.cfgvim 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-mfsmountmake && 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 內含所有源碼包)