LNMP網站架構
LNMP架構概述
LNMP就是Linux+Nginx+MySQL+PHP,Linux作為服務器的操作系統,Nginx作為Web服務器、PHP作為解析動態腳本語言、MySQL即為數據庫。
Linux作為服務器的操作系統。
Nginx作為WebServer服務器。
PHP 作為動態解析服務(php)。
MySQL作為後端存儲數據庫服務。
Nginx
服務本身不能處理PHP的請求,那麽當用戶發起PHP動態請求, Nginx
又是如何進行處理的。
用戶-->http
協議-->Nginx
-->fastcgi
協議-->php-fpm
註意: fatcgi
是nginx
連接php-fpm
Nginx
與Fast-CGI
詳細工作流程如下:
1.用戶發起的所有請求會先抵達LNMP架構中的Nginx
2.如果用戶請求的是靜態內容,則Nginx直接響應並處理。
3.如果用戶請求的是動態內容,則通過fastcgi協議發送至php-fpm管理進程
4.php-fpm接收到請求後,會派生對應的warrap線程,來解析用戶請求的動態內容。
5.如果涉及到查詢數據庫操作,則需要php先連接數據庫,然後進行查詢操作。(php-mysql)
6.最終由mysql-->php-fpm->fastcgi->nginx->user
``
安裝LNMP架構
yum安裝 nginx1.14 php7.1 mysql5.7
1.安裝Nginx
#1.使用Nginx官方提供的rpm包 [root@nginx ~]# cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 #2.執行yum安裝 [root@nginx ~]# yum install nginx -y #3.修改Nginx的運行身份 [root@web01 ~]# groupadd -g 666 www [root@web01 ~]# useradd -u666 -g666 www [root@nginx ~]# sed -i ‘/^user/c user www;‘ /etc/nginx/nginx.conf #4.啟動並加入開機自啟動 [root@nginx ~]# systemctl start nginx [root@nginx ~]# systemctl enable nginx
2.使用第三方擴展epel源安裝php7.1
#1.移除舊版php
[root@nginx ~]# yum remove php-mysql-5.4 php php-fpm php-common -y
#2.安裝擴展源
[root@web01 nginx]# yum localinstall -y http://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#3.安裝php7.1版本
[root@nginx ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
#4.替換php-fpm運行的用戶和組身份
[root@web02 ~]# sed -i ‘/^user/c user = www‘ /etc/php-fpm.d/www.conf
[root@web02 ~]# sed -i ‘/^group/c group = www‘ /etc/php-fpm.d/www.conf
#5.啟動php-fpm管理進程, 並加入開機自啟
[root@nginx ~]# systemctl start php-fpm
[root@nginx ~]# systemctl enable php-fpm
?
3.安裝MySQL5.7版本數據庫
# 下載MySQL官方擴展源
[root@nginx ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
#2.安裝mysql5.7, 文件過大可能會導致下載緩慢
[root@nginx ~]# yum install mysql-community-server -y
#3.啟動數據庫, 並加入開機自啟動
[root@nginx ~]# systemctl start mysqld
[root@nginx ~]# systemctl enable mysqld
#4.由於mysql5.7默認配置了默認密碼, 需要過濾temporary password關鍵字查看對應登陸數據庫密碼
[root@nginx ~]# grep ‘temporary password‘ /var/log/mysqld.log
#5.登陸mysql數據庫[password中填寫上一步過濾的密碼]
[root@web02 ~]# mysql -uroot -p$(awk ‘/temporary password/{print $NF}‘ /var/log/mysqld.log)
#6.重新修改數據庫密碼
mysql> ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘RSX123.com‘;
配置LNMP架構
1.驗證Nginx是否能正常解析php動態請求
[root@nginx ~]# cat /etc/nginx/conf.d/php.conf
server {
server_name www.rsx.com;
listen 80;
root /code;
index index.php index.html;
location ~ \.php$ {
root /code;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2.創建info.php測試php是否正常解析
[root@nginx ~]# cat /code/info.php
<?php
phpinfo();
?>
?
2.測試php是否能連接mysql數據庫服務[無論是本地數據庫還是遠程數據庫,測試方式一致]
[root@nginx ~]# cat /code/mysql.php
<?php
$servername = "localhost";
$username = "root";
$password = "RSX123.com";
// 創建連接
$conn = mysql_connect($servername, $username, $password);
// 檢測連接
if (!$conn) {
die("Connection failed: " . mysql_connect_error());
}
echo "連接成功";
?>
檢測LNMP架構
1.通過瀏覽器訪問info.php文件, 如出現下圖則表示nginx與php能正常工作
info.php
2.訪問mysqli.php驗證php-mysqli模塊是否正常工作
mysql.php
?
部署博客系統Wordpress
1.配置Nginx虛擬主機站點,域名為blog.rsx.com
#1.nginx具體配置信息
[root@nginx ~]# cat /etc/nginx/conf.d/wordpress.conf
server {
listen 80;
server_name blog.rsx.com;
root /code/wordpress;
index index.php index.html;
location ~ \.php$ {
root /code/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
?
2.重啟nginx服務
[root@nginx ~]# systemctl restart nginx
?
3.下載wordpress產品,部署wordress並授權
#1.獲取wordpress代碼
[root@nginx ~]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
#2.解壓網站源碼文件,拷貝至對應站點目錄,並授權站點目錄
[root@nginx ~]# tar xf wordpress-4.9.4-zh_CN.tar.gz
[root@nginx ~]# cp -r wordpress /code/
[root@nginx ~]# chown -R www.www /code/wordpress/
4.由於wordpress產品需要依賴數據庫, 所以需要手動建立數據庫
#1.登陸數據庫
[root@http-server ~]# mysql -uroot -pRSX123.com
#2.創建wordpress數據庫
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> exit
?
5.通過瀏覽器訪問wordpress, 並部署該產品
blog.rsx.com/wp-admin
?
部署知乎系統Wecenter
1.配置Nginx虛擬主機站點,域名為zh.rsx.com
#1.nginx具體配置信息
[root@http-server ~]# cat /etc/nginx/conf.d/zh.conf
server {
listen 80;
server_name zh.rsx.com;
root /code/zh;
index index.php index.html;
location ~ \.php$ {
root /code/zh;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#2.重啟nginx服務
[root@http-server ~]# systemctl restart nginx
?
2.下載Wecenter產品,部署Wecenter並授權
[root@web02 ~]# wget http://ahdx.down.chinaz.com/201605/WeCenter_v3.2.1.zip
[root@web02 ~]# unzip WeCenter_v3.1.9.zip
[root@web02 ~]# mv UPLOAD/ /code/zh
[root@web02 ~]# chown -R www.www /code/zh/
3.由於wecenter產品需要依賴數據庫, 所以需要手動建立數據庫
#1.登陸數據庫
[root@http-server ~]# mysql -uroot -pRSX123.com
#2.創建wordpress數據庫
MariaDB [(none)]> create database zh;
MariaDB [(none)]> exit
3.通過瀏覽器訪問網站
zh.rsx.com
部署網校系統Edusohu
1.配置Nginx虛擬主機站點,域名為edu.rsx.com
#1.nginx具體配置信息
[root@http-server ~]# cat /etc/nginx/conf.d/edu.conf
server {
listen 80;
server_name edu.rsx.com;
root /code/edu;
index index.php index.html;
location ~ \.php$ {
root /code/edu;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#2.重啟nginx服務
[root@http-server ~]# systemctl restart nginx
?
2.下載edusohu產品,部署edusohu並授權
//獲取wordpress代碼
[root@http-server ~]# cd /soft/src/
[root@http-server /soft/src]# wget http://download.edusoho.com/edusoho-8.2.17.tar.gz
//解壓軟件網站源碼文件, 並授權站點目錄,不然會導致無法安裝
[root@http-server /soft/src]# tar xf edusoho-8.2.17.tar.gz
[root@http-server /soft/src]# cp -r edusoho /code/edu
[root@http-server ~]# chown -R www.www /code/edu/
[root@http-server ~]# chmod -R 777 /code/edu/{app,web}
//由於edusohu會自動創建數據庫, 所以無需創建數據庫
3.通過瀏覽器訪問網站
edu.rsx.com
遷移數據至獨立服務器
1.安裝好MySQL數據庫
#1.下載MySQL官方擴展源
[root@nginx ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
#2.安裝mysql5.7, 文件過大可能會導致下載緩慢
[root@nginx ~]# yum install mysql-community-server -y
#3.啟動數據庫, 並加入開機自啟動
[root@nginx ~]# systemctl start mysqld
[root@nginx ~]# systemctl enable mysqld
#4.由於mysql5.7默認配置了默認密碼, 需要過濾temporary password關鍵字查看對應登陸數據庫密碼
[root@nginx ~]# grep ‘temporary password‘ /var/log/mysqld.log
#5.登陸mysql數據庫[password中填寫上一步過濾的密碼]
[root@web02 ~]# mysql -uroot -p$(awk ‘/temporary password/{print $NF}‘ /var/log/mysqld.log)
#6.重新修改數據庫密碼
mysql> ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘RSX123.com‘;
2.備份原數據庫中的數據
#1.指定導出對應的數據庫文件。(RSX123.com是數據庫密碼)
[root@web02 ~]# mysqldump -uroot -p‘RSX123.com‘ --all-databases --single-transaction > `date +%F%H`-mysql-all.sql
#2.拷貝原數據庫備份文件至新的服務器
[root@web02 zh]# scp 2018-09-2109-mysql-all.sql [email protected]:~
#3.將數據導入進新的數據庫環境中
[root@db01 ~]# mysql -uroot -pRSX123.com <2018-09-2109-mysql-all.sql
#4.驗證是否導入成功
[root@db01 ~]# mysql -uroot -pRSX123.com
#5.登錄數據庫後,查看當前有多少個庫
mysql> show databases;
#6.使用客戶端測試連接遠端的mysql
[root@web01 ~]# mysql -h172.16.1.51 -uroot -pRSX123.com
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1130 (HY000): Host ‘172.16.1.7‘ is not allowed to connect to this MySQL server
#7.新的數據庫,配置允許遠程用戶連接
#授權所有權限 grant all privileges
#授權所有庫所有表 *.*
#將授權賦予給哪個用戶,這個用戶只能通過哪個網段過來(%所有) ‘all‘@‘%‘
#授權該用戶登錄的密碼 identified by
mysql> grant all privileges on *.* to ‘all‘@‘%‘ identified by ‘RSX123.com‘;
#8.再次使用客戶端測試連接遠端的mysql
[root@web01 ~]# mysql -h172.16.1.51 -uall -pRSX123.com
#如果其他機器想測試能否連接數據庫,可以先安裝mysql的客戶端軟件
[root@web02 ~]# yum install mariadb -y
[root@web02 ~]# mysql -h172.16.1.51 -uall -pRSX123.com
#9.停止web本地的數據庫,刷新網頁看看是否down機
[root@web01 ~]# systemctl stop mysqld
[root@web01 ~]# systemctl disable mysqld
#10.修改Wordpress產品代碼連接數據庫的配置文件
[root@web01 ~]# vim /code/wordpress/wp-config.php
#數據庫名稱
define(‘DB_NAME‘, ‘wordpress‘);
#數據庫用戶
define(‘DB_USER‘, ‘all‘);
#數據庫密碼
define(‘DB_PASSWORD‘, ‘RSX123.com‘);
#數據庫地址
define(‘DB_HOST‘, ‘172.16.1.51‘);
#11.修改wecenter產品代碼連接數據庫的配置文件
[root@web01 zh]# grep -iR "RSX123.com"|grep -v cache
system/config/database.php: ‘password‘ => ‘RSX123.com‘,
[root@web01 zh]# vim /code/zh/system/config/database.php
‘host‘ => ‘172.16.1.51‘,
‘username‘ => ‘all‘,
‘password‘ => ‘RSX123.com‘,
‘dbname‘ => ‘zh‘,
#12.修改edusogho產品代碼連接數據庫的配置文件
[root@web01 edu]# grep -iR "RSX123.com"|grep -v cache
app/config/parameters.yml: database_password: ‘RSX123.com‘
[root@web01 edu]# vim /code/edu/app/config/parameters.yml
parameters:
database_driver: pdo_mysql
database_host: 172.16.1.51
database_port: 3306
database_name: edu
database_user: all
database_password: ‘RSX123.com‘
#必須清理緩存
[root@web01 edu]# rm -rf /code/edu/app/cache/*
遷移圖片至獨立服務器
1.準備一臺新的服務器安裝NFS
[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 www
[root@nfs ~]# yum install nfs-utils -y
[root@nfs ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/edu 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
創建對應的共享目錄,並授權為www
[root@nfs ~]# mkdir /data/{blog,zh,edu} -p
[root@nfs ~]# chown -R www.www /data/
重啟NFS
[root@nfs ~]# systemctl restart nfs-server
2.WEB客戶端驗證NFS是否安裝成功
[root@web01 ~]# yum install nfs-utils -y
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/zh 172.16.1.0/24
/data/edu 172.16.1.0/24
/data/blog 172.16.1.0/24
==============================================================
3.獲取Wordpress產品的附件和圖片存放的位置
瀏覽器->右鍵->檢查->Network->選擇按鈕->點擊一下圖片
4.備份web服務器上的Wordpress圖片和附件
[root@web01 ~]# cd /code/wordpress/
[root@web01 wordpress]# cp -rp wp-content/ wp-content_back
5.客戶端執行掛載操作【Wordpress】
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content
6.恢復原web上存儲的(圖片、附件、語言、主題)
[root@web01 wordpress]# cp -rp wp-content_back/* wp-content/
==============================================================
1.獲取Edu產品的附件和圖片存放的位置
瀏覽器->右鍵->檢查->Network->選擇按鈕->點擊一下圖片
2.備份edu產品的視頻和圖片
視頻:/code/edu/app/data/udisk/
圖片:/code/edu/web/files/
3.備份原有的視頻和圖片
[root@web01 edu]# cp -rp web/files/ web/files_bak
[root@web01 edu]# cp -rp app/data/ app/data_bak
4.執行掛載操作【我僅掛載視頻,其他自行解決】
[root@web01 edu]# mount -t nfs 172.16.1.31:/data/edu /oldboy_code4/edu/app/data
5.恢復數據至NFS存儲
[root@web01 edu]# \cp -rp app/data_bak/* app/data/
LNMP網站架構