部署社交網站

部署社交網站

案例概述

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

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

案例環境

案例環境要求見下表

主機 操作系統 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

搭建LNMP服務器

部署Nginx服務器

首先安裝環境包,依賴包。

[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,查看訪問成功。

修改Nginx配置

這裏需要修改nginx配置文件中的fastcgi訪問接口,這樣才能訪問PHP頁面。

[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服務
部署社交網站

部署PHP服務器

安裝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管理進程用戶

useradd -M -s /sbin/nologin php

將php-5.4.5軟件包解壓到指定目錄。

[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服務器

安裝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主從數據庫

修改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數據庫,在從數據庫上也自動生成。
部署社交網站部署社交網站

部署SVN服務器

安裝SVN服務

[root@localhost ~]# yum install subversion -y   #通過yum倉庫安裝
[root@localhost ~]# svnserve --version    #查看版本信息
svnserve,版本 1.7.14 (r1542130)
   編譯於 Apr 11 2018,02:40:28

創建倉庫目錄repo

[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

配置svnserve.conf文件

[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              #用戶的信息文件

配置passwd文件

[root@localhost repo]# vim /opt/svn/repo/conf/passwd 
[users]
# harry = harryssecret
# sally = sallyssecret
alpha=abc123      #格式:用戶名=密碼

配置authz文件

[root@localhost repo]# vim /opt/svn/repo/conf/authz 
[/]
alpha = r                       #在/opt/svn/repo目錄下有讀取權限

[/webphp]
alpha = rw                      #對於webphp木有有讀寫權限,用於上傳下載代碼

啓動SVN服務

[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       

導入webphp文件夾

[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目錄

測試svn服務

這時候我們切換到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服務器的指定路徑下了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章