公司的社交網站採用PHP語言開發,爲了管理PHP程序員開發的代碼,上級領導要求搭建SVN服務器進行版本控制。社交網站的第一個版本部署在LNMP平臺上,前端爲Nginx,經過fastcgi協議訪問後端的PHP服務器。爲了保證數據安全,要求搭建MySQL數據庫主從集羣。php
社交網站包含用戶的相冊功能,容許用戶上傳照片,上傳照片須要使用共享存儲來存放。公司決定使用MFS分佈式文件系統,並將MFS掛載到PHP服務器的相關目錄下。html
案例環境要求見下表前端
主機 | 操做系統 | IP地址 | 主要軟件 |
---|---|---|---|
Nginx | CentOS 7 x86_64 | 192.168.58.134 | nginx |
PHP | CentOS 7 x86_64 | 192.168.58.132 | php |
MySQL Master | CentOS 7 x86_64 | 192.168.58.130 | mysql-5.5.24 |
MySQL Slave | CentOS 7 x86_64 | 192.168.58.138 | mysql-5.5.24 |
SVN | CentOS 7 x86_64 | 192.168.58.140 | subversion |
首先安裝環境包,依賴包。node
[root@localhost opt]# yum -y install pcre-devel zlib-devel [root@localhost opt]# useradd -M -s /sbin/nologin nginx #添加管理nginx的用戶和組 [root@localhost mnt]# tar xf nginx-1.6.0.tar.gz -C /opt/ #將軟件包解壓到指定目錄 [root@localhost opt]# cd nginx-1.6.0/ #到解壓目錄中 [root@localhost nginx-1.6.0]# ./configure \ #開始配置 > --prefix=/usr/local/nginx \ #指定安裝目錄 > --user=nginx \ #指定管理用戶 > --group=nginx \ #指定管理組 > --with-http_stub_status_module #開啓stub_status狀態統計模塊 [root@localhost nginx-1.6.0]# make && make install #開始編譯和安裝 [root@localhost nginx-1.6.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ [root@localhost nginx-1.6.0]# nginx #開啓nginx服務 #創建軟連接,使系統識別nginx命令
到宿主機上訪問192.168.58.134,查看訪問成功。
mysql
這裏須要修改nginx配置文件中的fastcgi訪問接口,這樣才能訪問PHP頁面。linux
[root@localhost nginx-1.6.0]# vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { root /var/www/html/webphp; #指定PHP服務器站點家目錄 fastcgi_pass 192.168.58.132:9000; #指定PHP服務器地址及端口 fastcgi_index index.php; include fastcgi.conf; }
重啓Nginx服務nginx
安裝PHP,而且經過配置php-fpm進程監聽9000端口來接受Nginx的請求。首先安裝環境包和依賴包。程序員
[root@localhost ~]# yum -y install \ > gd \ > libxml2-devel \ > libjpeg-devel \ > libpng-devel \ > zlib-devel \ > fontconfig-devel \ > openssl-devel \ > bzip2-devel
添加php管理進程用戶web
useradd -M -s /sbin/nologin php
將php-5.4.5軟件包解壓到指定目錄。sql
[root@localhost mnt]# tar xf php-5.4.5.tar.bz2 -C /opt/
切換至php-5.4.5解壓包目錄下,進行配置。
[root@localhost mnt]# cd /opt/php-5.4.5 ./configure \ --prefix=/usr/local/php5 \ #指定安裝路徑 --with-gd \ #打開gd庫的支持 --with-zlib \ #開啓zlib庫的支持 --with-config-file-path=/usr/local/php5 \ #指定php配置文件所在路徑 --enable-mbstring \ #多字節,字符串的支持 --with-jpeg-dir \ #開啓對jpeg圖片的支持 --with-openssl \ #openssl的支持,加密傳輸會用到 --disable-ipv6 \ #關閉ipv6功能 --with-mysql \ #最後幾項都是讓php支持mysql模塊 --with-mysqli \ --with-pdo-mysq \ --enable-fpm #啓用fpm進程 [root@localhost php-5.4.5]# make #進行編譯
不過在編譯過程當中出現一個錯誤,以下圖,通過研究找到了解決辦法。
/opt/php-5.4.5/ext/dom/node.c: 在函數‘dom_canonicalization’中: /opt/php-5.4.5/ext/dom/node.c:1898:21: 錯誤:提領指向不徹底類型的指針
下面是解決辦法,須要打一個patch包。
[root@localhost opt]# curl -o php-5.2.17.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt #下載patch包 [root@localhost opt]# ls php-5.2.17.patch php-5.4.5 rh [root@localhost opt]# cd php-5.4.5/ [root@localhost php-5.4.5]# patch -p0 -b <../php-5.2.17.patch #將patch導入到php軟件包中。 patching file ext/dom/node.c patching file ext/dom/documenttype.c patching file ext/simplexml/simplexml.c #顯示導入成功 [root@localhost php-5.4.5]# make && make install #從新編譯和安裝
編譯安裝成功後,開始修改配置文件和進行一些優化。
[root@localhost php-5.4.5]# cp php.ini-development /usr/local/php5/php.ini #將配置文件模版複製出來 [root@localhost php-5.4.5]# ln -s /usr/local/php5/bin/* /usr/local/bin/ [root@localhost php-5.4.5]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/ #以上兩項都是讓系統可以識別php相關命令
爲PHP安裝加速器。
[root@localhost php-5.4.5]# tar xf /mnt/ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz -C /opt/ #將加速器解壓到指定目錄下 [root@localhost php-5.4.5]# cd /opt/ZendGuardLoader-php-5.3-linux-glibc23-x86_64/ [root@localhost ZendGuardLoader-php-5.3-linux-glibc23-x86_64]# cd php-5.3.x/ [root@localhost php-5.3.x]# cp ZendGuardLoader.so /usr/local/php5/lib/php #將加速器模塊放在可以識別的路徑下 [root@localhost php-5.3.x]#
配置PHP識別加速器。
[root@localhost php-5.3.x]# vim /usr/local/php5/php.ini [Zend Guard Loader] zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so zend_loader.enable=1 #將這段話加入到php.ini配置文件中
開啓nginx的php-fpm支持。
[root@localhost php-5.3.x]# cd /usr/local/php5/etc/ [root@localhost etc]# cp php-fpm.conf.default php-fpm.conf [root@localhost etc]# vim php-fpm.conf #修改配置文件的相關參數 pid = run/php-fpm.pid user = php group = php pm.max_children=50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 listen = 0.0.0.0:9000 #監聽端口修改下,監聽全部ip,若是隻是127.0.0.1,那麼php服務器沒法監聽到nginx服務器
啓動php-fpm進程,查看9000端口開啓。
[root@localhost etc]# /usr/local/sbin/php-fpm [root@localhost etc]# netstat -ntap | grep 9000 #9000端口已經開啓 tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 38234/php-fpm: mast
剛纔咱們在nginx配置文件中,配置的php服務器站點,咱們須要去建立站點目錄即index.php。
[root@localhost etc]# mkdir -p /var/www/html/webphp #建立站點目錄 [root@localhost etc]# cd /var/www/html/webphp/ [root@localhost webphp]# echo "123">index.php #建立站點首頁
測試,訪問
192.168.58.134/index.php,能夠看到php站點首頁。
安裝MySQL依賴包和環境包。
[root@localhost ~]# yum -y install ncurses-devel cmake #ncurses是字符終端下屏幕控制的基本庫
將軟件包解壓到指定目錄並配置
[root@localhost ~]# cd /mnt/ [root@localhost mnt]# tar xf mysql-5.5.24.tar.gz -C /opt/ [root@localhost mnt]# cd /opt/mysql-5.5.24/ [root@localhost 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/ \ > -DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \ > -DWITH_MYISAM_STORAGE_ENGINE=1 \ > -DWITH_INNOBASE_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 [root@localhost mysql-5.5.24]# make && make install #編譯後安裝
編譯安裝完後進行優化。
[root@localhost mysql-5.5.24]# cp support-files/my-medium.cnf /etc/my.cnf #複製配置文件到/etc中 cp:是否覆蓋"/etc/my.cnf"? y [root@localhost mysql-5.5.24]# cp support-files/mysql.server /etc/init.d/mysqld #方便mysqld被service服務管理 [root@localhost mysql-5.5.24]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile #更改環境變量 [root@localhost mysql-5.5.24]# source /etc/profile #使環境變量文件刷新生效 [root@localhost mysql-5.5.24]# useradd -s /sbin/nologin mysql #添加mysql服務用戶 [root@localhost mysql-5.5.24]# chown -R mysql.mysql /usr/local/mysql #更改主文件夾的屬主和屬組
初始化mysql。
[root@localhost mysql-5.5.24]# /usr/local/mysql/scripts/mysql_install_db \ > --user=mysql \ > --ldata=/var/lib/mysql \ > --basedir=/usr/local/mysql
將mysql.sock文件創建軟連接
[root@localhost mysql-5.5.24]# ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
修改mysql啓動腳本文件。
[root@localhost mysql-5.5.24]# vim /etc/init.d/mysqld basedir=/usr/local/mysql datadir=/home/mysql [root@localhost mysql-5.5.24]# chmod +x /etc/init.d/mysqld [root@localhost mysql-5.5.24]# service mysqld start Starting MySQL.. SUCCESS! [root@localhost mysql-5.5.24]# netstat -ntap | grep 3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 13702/mysqld #啓動成功
建立mysql的root用戶。
[root@localhost mysql-5.5.24]# mysqladmin -u root -p password 'abc123' [root@localhost mysql-5.5.24]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.24 Source distribution Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. #登陸成功
修改MySQL主服務器(192.168.58.130)配置文件。
[root@localhost mysql-5.5.24]# vim /etc/my.cnf server-id = 11 #server-id主從服務器不能同樣 log-bin=master-bin #主服務器日誌文件 log-slave-updates=true #從服務器更新二進制日誌 [root@localhost mysql-5.5.24]# service mysqld restart Shutting down MySQL. SUCCESS! Starting MySQL.. SUCCESS! #重啓數據庫 [root@localhost mysql-5.5.24]# mysql -u root -p Enter password: #登陸數據庫 MySQL [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.58.%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.06 sec) #受權給192.168.58.0網段的服務器同步權限 MySQL [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec) #刷新權限 MySQL [(none)]> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000001 | 338 | | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) #這兩個值很重要,下面要用到
修改MySQL從服務器配置文件
[root@localhost ~]# vim /etc/my.cnf server-id = 12 relay-log=relay-log-bin relay-log-index=slave-relay-bin.index [root@localhost ~]# service mysqld restart ERROR! MySQL server process #62735 is not running! Starting MySQL........ SUCCESS! #重啓數據庫 [root@localhost ~]# mysql -u root -p Enter password: mysql> change master to master_host='192.168.58.130',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=338 #指定主服務器,登陸帳號和密碼,同步文件和文件偏移量 mysql> start slave; Query OK, 0 rows affected (0.28 sec) #開啓slave同步功能 mysql> show slave status\G;
能夠看到主從同步成功,作個驗證在主數據庫上建立friend數據庫,在從數據庫上也自動生成。
[root@localhost ~]# yum install subversion -y #經過yum倉庫安裝 [root@localhost ~]# svnserve --version #查看版本信息 svnserve,版本 1.7.14 (r1542130) 編譯於 Apr 11 2018,02:40:28
[root@localhost ~]# mkdir -p /opt/svn/repo #建立一個目錄 [root@localhost ~]# svnadmin create /opt/svn/repo/ #將這個目錄做爲倉庫 [root@localhost ~]# cd /opt/svn/repo/ [root@localhost repo]# ls #查看倉庫目錄下的文件 conf db format hooks locks README.txt
[root@localhost repo]# vim /opt/svn/repo/conf/svnserve.conf anon-access = none #匿名用戶u沒有任何權限 auth-access = write #認證用戶具備寫的權限 password-db =/opt/svn/repo/conf/passwd #用戶的密碼文件 authz-db =/opt/svn/repo/conf/authz #用戶的信息文件
[root@localhost repo]# vim /opt/svn/repo/conf/passwd [users] # harry = harryssecret # sally = sallyssecret alpha=abc123 #格式:用戶名=密碼
[root@localhost repo]# vim /opt/svn/repo/conf/authz [/] alpha = r #在/opt/svn/repo目錄下有讀取權限 [/webphp] alpha = rw #對於webphp木有有讀寫權限,用於上傳下載代碼
[root@localhost repo]# svnserve -d -r /opt/svn/repo/ #關閉經過kill‘進程 [root@localhost repo]# netstat -ntap | grep svn* tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 3566/svnserve
[root@localhost repo]# cd webphp/ [root@localhost webphp]# ls [root@localhost webphp]# touch 123.txt 234.txt [root@localhost webphp]# svn import webphp file:///opt/svn/repo/webphp -m "initial" #初始化webphp目錄
這時候咱們切換到nginx服務器的/usr/local/nginx/html/webphp目錄下將svn服務器中更新內容下載下來 [root@localhost ~]# yum install subversion -y #安裝subversion [root@localhost html]# svn co svn://192.168.58.140/webphp #將svn服務器的webphp目錄下載下來 認證領域: <svn://192.168.58.140:3690> 07d793c7-c030-4485-8f7a-f531171e80ca 「root」的密碼: 認證領域: <svn://192.168.58.140:3690> 07d793c7-c030-4485-8f7a-f531171e80ca 用戶名: alpha 「alpha」的密碼: ----------------------------------------------------------------------- 注意! 你的密碼,對於認證域: <svn://192.168.58.140:3690> 07d793c7-c030-4485-8f7a-f531171e80ca 只能明文保存在磁盤上! 若是可能的話,請考慮配置你的系統,讓 Subversion 能夠保存加密後的密碼。請參閱文檔以得到詳細信息。 你能夠經過在「/root/.subversion/servers」中設置選項「store-plaintext-passwords」爲「yes」或「no」, 來避免再次出現此警告。 ----------------------------------------------------------------------- 保存未加密的密碼(yes/no)?yes A webphp/555.txt A webphp/1 A webphp/2 A webphp/3 A webphp/123.txt A webphp/4 A webphp/234.txt 取出版本 4。 [root@localhost html]# ls 50x.html index.html webphp [root@localhost html]# cd webphp/ [root@localhost webphp]# ls 1 123.txt 2 234.txt 3 4 555.txt
能夠看到將webphp倉庫中的內容都同步到nginx服務器的指定路徑下了。
詳細搭建過程查看轉載的博客,本次搭建的另一部分。
http://www.javashuo.com/article/p-htbdzqcs-s.html