1. 程式人生 > >LNMP網站架構

LNMP網站架構

nfs 知乎 war ans 安裝 概述 開機自啟動 gid mysql5.7

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
註意: fatcginginx連接php-fpm

之間的協議。

技術分享圖片

NginxFast-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網站架構