Linux運維電商系統項目第一天:基於 LNMP 平臺進行架構與設計

一、LNMP概述

1、什麼是LNMP

LNMP是一個合成詞 = Linux + Nginx + MySQL + PHP LAMP區別就在於Web Server由Apache替換爲Nginx。

2、LNMP之間的關係

LNMP都屬於開源軟件,這也是其比較流行的原因。

Nginx已經被F5公司收購了,負載均衡器 => 最出名的硬件負載均衡F5 Nginx社區版 => 開源免費

Nginx Plus收費版

3、準備LNMP服務器

第一步:克隆LNMP服務器

第二步:更改網卡IP地址與UUID編號

IPADDR = 10.1.1.10

UUID更改編號的最後3位

第三步:設置主機名稱,然後綁定IP地址與主機名稱到/etc/hosts文件

# hostnamectl set-hostname lnmp.itcast.cn # su
# vim /etc/hosts
10.1.1.10 lnmp lnmp.itcast.cn # systemctl restart network

第四步:關閉防火牆與SELinux

# systemctl stop firewalld
# systemctl disable firewalld # setenforce 0
# sed -i '/SELINUX=enforcing/cSELINUX=disabled'
/etc/selinux/config

第五步:關閉NetworkManager服務

# systemctl stop NetworkManager
# systemctl disable NetworkManager

第六步:配置yum源

[aliyun] name=aliyun yum
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/ enabled=1
gpgcheck=0
baseurl=file:///mnt enabled=1
gpgcheck=0
yum
epel-release-latest-7.noarch.rpm
yum.repos.d]# cat server.repo
# rpm -ivh [root@db01 [local]
name=local

第七步:安裝ntpdate,進行時間同步

# mount /dev/sr0 /mnt
# yum install ntpdate -y # ntpdate cn.ntp.org.cn

二、LNMP軟件架構之MySQL

1、MySQL軟件包

mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

說明:通用linux下的二進制包,已編譯好,只需放到相應的安裝目錄裏即可

企業級數據庫部署中,常用的MySQL數據庫一共有兩種安裝方式:GLIBC 安裝與源碼安裝(二選一)

2、使用GLIBC安裝MySQL

默認選項:

套接字文件,負責客戶

mysql安裝目錄

mysql數據目錄

默認安裝路徑:/usr/local/mysql

默認數據目錄:/usr/local/mysql/data 默認端口:3306

默認socket文件存放路徑:/tmp/mysql.sock

端與服務器端進行網絡連接

3、MySQL詳細安裝步驟

上傳MySQL到Linux服務器:

mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

編寫mysql.sh腳本:

# vim mysql.sh #!/bin/bash
tar -zxf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql useradd -r -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql
cd /usr/local/mysql
yum remove mariadb-libs -y scripts/mysql_install_db --user=mysql
cp support-files/mysql.server /etc/init.d/mysql service mysql start
# 追加/usr/local/mysql/bin目錄到環境變量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >>
/etc/profile  source /etc/profile

設置完成後,使用source命令執行mysql.sh腳本

# source mysql.sh

4、MySQL後續配置

第一步:配置MySQL密碼以及安全策略

# mysql_secure_installation

注:在實際運維工作中,MySQL的密碼一定要越複雜越好。第二步:MySQL測試驗證

# mysql -uroot -p Enter password:123

遠程登錄:

# mysql -h 服務器IP地址 -P 端口號 -uroot -p Enter password:123

注:在實際運維工作中,遠程連接賬號儘量不要使用root。應該手工創建一個普通賬號,然後按需分配權限。

5、擴展:mysql.service腳本

CentOS6:service mysql start|restart|stop CentOS7:systemctl start|restart|stop mysql.service

第一步:創建一個mysql.service文件

# vim /usr/lib/systemd/system/mysql.service

第二步:寫入內容

[Unit]
Description=MySQL Server After=network.target After=syslog.target
[Service] User=mysql Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults- file=/usr/local/mysql/my.cnf
LimitNOFILE = 5000
PrivateTmp=false
[Install]
WantedBy=multi-user.target

注:
Unit代表單元,啓動程序需要有單元信息After代表在某些服務啓動後在進行MySQL啓動

Service代表服務,最核心配置
User + Group代表將來以哪個用戶的身份運行此軟件ExecStart代表啓動腳本調用哪個程序(systemctl start mysql.service)
LimitNOFILE代表限制文件大小
PrivateTmp代表是否把MySQL的運行程序放入私有空間,比如pid,socket
文件

Install代表安裝模式,代表把MySQL服務運行在何種模式下

第三步:關閉原有的MySQL,使用systemctl啓動MySQL

# service mysql stop
# systemctl start mysql

擴展:關閉與重啓
# systemctl stop mysql
# systemctl restart mysql

第四步:把mysql.service添加到開機啓動項中

# systemctl enable mysql
擴展:關閉開機啓動項
# systemctl disable mysql

三、LNMP軟件架構之Nginx

1、Nginx概述

Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的http://Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0 發佈於2004年10月4日。

Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件

(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰 訊、淘寶等。

問題:怎麼判斷一個企業項目架構是否使用了Nginx

# curl -I 域名地址

Server:Nginx

2、Nginx應用場景

  1. web服務器軟件 httpd(apache)

同類型web服務器軟件:apache nginx(俄羅斯) iis(微軟) lighttpd(德國)

  1. 提供了IMAP/POP3/SMTP服務
  2. 充當反向代理服務器,實現負載均衡功能。LB=>Load Blance

3、Nginx特點

① 高可靠:穩定性 master進程 管理調度請求分發到哪一個worker=> worker進程 響應請求 一master多worker

Nginx --------- master進程 ----------------worker worker worker

② 熱部署 :(1)平滑升級 (2)可以快速重載配置 => 不停止業務的情況下實現軟件升級以及重載

③ 高併發:可以同時響應更多的請求 事件 epoll模型 幾萬

④ 響應快:尤其在處理靜態文件上,響應速度很快 sendfile

⑤ 低消耗:cpu和內存 1w個請求 內存2-3MB

⑥ 分佈式支持:反向代理 七層負載均衡,新版本也支持四層負載均衡 =>

把用戶請求進行分流

4、Nginx軟件安裝方式

常見安裝方式:

① yum安裝配置,需使用Nginx官方源或者EPEL源(不推薦 => 版本過低,沒辦法進行定製)

② 源碼編譯(強烈推薦)

5、Nginx編譯安裝

第一步:去Nginx的官網下載Nginx軟件包(1.12.2)

第二步:使用Shell腳本安裝Nginx軟件(配置 => 編譯 => 安裝) 安裝依賴庫:

# mount /dev/sr0 /mnt

# yum -y install pcre-devel zlib-devel openssl-devel

使用nginx.sh安裝Nginx軟件:

# vim nginx.sh #!/bin/bash

tar -zxf nginx-1.12.2.tar.gz cd nginx-1.12.2

useradd -r -s /sbin/nologin www

./configure --prefix=/usr/local/nginx --user=www -- group=www --with-http_ssl_module --with- http_stub_status_module --with-http_realip_module make && make install

注:

--prefix:安裝路徑

--user:以哪個用戶身份安裝初始化

--group:以哪個用戶組身份安裝初始化

--with-*:代表安裝哪些模塊(默認情況下只安裝基本模塊)

6、Nginx目錄介紹

conf:配置文件目錄,Nginx主配置文件nginx.conf。當Nginx啓動時,會自動加載nginx.conf文件

html:項目目錄,項目的源代碼就存放於此目錄下 logs:日誌目錄,error.log錯誤日誌與access.log訪問日誌sbin:二進制文件目錄,Nginx的主程序sbin/nginx

7、使用sbin/nginx -h求幫助

# cd /usr/local/nginx # sbin/nginx -h

-V :顯示Nginx的版本號與配置的選項信息(加載哪些模塊)

-t :在編寫nginx.conf時,非常重要。主要用於語法檢查

-s :發送信號,stop(停止)、quit(優雅的推出)、reopen(重新打開配置文件)、reload(熱重載配置文件)

說明:stop停止與quit優雅推出的區別

stop:代表立即停止所有請求

quit:代表其不會立即停止所有請求,等待所有請求處理完畢後,在進行停止

reopen 與 reload reopen:代表重新打開配置文件

reload:熱重載,就是在不停止業務的前提下,重新加載nginx.conf配置文件

-c :加載配置文件

8、啓動Nginx軟件

# cd /usr/local/nginx

# sbin/nginx -c /usr/local/nginx/conf/nginx.conf # ss -naltp |grep 80

設置完成後,在Windows端打開瀏覽器,使用服務器的IP+80訪問Nginx主頁面

9、擴展nginx.service腳本

第一步:停止原生的nginx

# cd /usr/local/nginx # sbin/nginx -s stop

第二步:創建nginx.service腳本

# vim /usr/lib/systemd/system/nginx.service

第三步:編寫腳本內容

[Unit]
Description=Nginx Web Server After=network.target

[Service] Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c
/usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true

[Install]
WantedBy=multi-user.target

注:
Type=forking,代表後臺運行

第四步:使用nginx.service程序啓動:

# systemctl start nginx

停止:

# systemctl stop nginx

熱重載:

# systemctl reload nginx

開機啓動項:

# systemctl enable nginx

開機不啓動:

# systemctl disable nginx

四、LNMP軟件架構之PHP

1、什麼是PHP

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言,主要應用於Web領域。

PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多

PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。(新特性)

2、PHP-FPM

Apache與PHP 和 Nginx與PHP有何不同:

# httpd.conf => LoadModule => AddType => .php文件

Apache與PHP的之間的關係:PHP是以模塊的形勢加載在Apache的內核中。在解析動態PHP代碼時,其效率較高。LoadModule

Nginx與PHP之間的關係:Nginx與PHP相對而言都是獨立的,只不過在應用過程中,解析動態腳本時,Nginx會自動源代碼發送給PHP-FPM程序。Nginx在處理靜態頁面時,效率較高。

3、PHP-FPM軟件安裝

第一步:安裝依賴庫

#	yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel

第二步:編寫配置文件

# tar -zxf php-7.2.12.tar.gz # cd php7.2.12
# ./configure --prefix=/usr/local/php --with-config-file- path=/usr/local/php/etc --enable-fpm --with-fpm-user=www -
-with-fpm-group=www --with-mysqli=mysqlnd --with-pdo- mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with- jpeg-dir --with-png-dir --with-zlib --with-libxml-dir -- enable-xml --disable-rpath --enable-bcmath --enable-shmop
--enable-sysvsem  --enable-inline-optimization --with-curl
--enable-mbregex --enable-mbstring --enable-ftp --with-gd
--with-openssl --with-mhash --enable-pcntl --enable- sockets --with-xmlrpc --with-libzip --enable-soap -- without-pear --with-gettext --disable-fileinfo --enable- maintainer-zts
# make && make install


注:
--prefix:安裝目錄
--with-config-file-path:配置文件目錄
--enable-fpm:開啓php-fpm功能
--with-fpm-user:代表以哪個用戶運行php-fpm
--with-fpm-group:代表以哪個用戶組運行php-fpm
--with-mysqli:php-mysqli擴展
--with-pdo-mysql:php-pdo-mysql擴展
--with-*:項目所需的額外的擴展庫(需要運維工程師安裝,但是由程序猿提供文檔)
php7.2:從php5.6開始,php鏈接mysql必須使用mysqli或pdo擴展。

4、PHP-FPM配置文件

使用php-fpm進行管理php服務,有兩個配置文件:

① php.ini #默認php配置文件(/root/php-7.2.12) PHP => redis.so => Redis

② php-fpm.conf #php-fpm相關的配置 (默認已存在)

③ www.conf #php-fpm主配置文件(默認已存在)

# ll /usr/local/php
etc文件夾:專門用於存放php-fpm啓動或運行過程中需要的配置文件

第一步:把php.ini移動到/usr/local/php/etc目錄

# cp /root/php-7.2.12/php.ini-development
/usr/local/php/etc/php.ini

第二步:加載php-fpm.conf主配置文件

# cd /usr/local/php/etc目錄
# cp /usr/local/php/etc/php-fpm.conf.default
/usr/local/php/etc/php-fpm.conf

第三步:加載php-fpm子配置文件www.conf文件

# cp /usr/local/php/etc/php-fpm.d/www.conf.default
/usr/local/php/etc/php-fpm.d/www.conf

PHP-FPM啓動 => php.ini => php-fpm.conf => www.conf文件

5、添加php-fpm啓動項

# 把php-fpm添加到/etc/init.d目錄下

# cp /root/php-7.2.12/sapi/fpm/init.d.php-fpm
/etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm # service php-fpm start

# 查看9000端口的佔用情況(Nginx中的PHP是以獨立進程的方式運行,佔用計算機的9000端口)
# ss -naltp |grep 9000

6、把php的bin目錄添加到環境變量

# echo 'export PATH=$PATH:/usr/local/php/bin' >>
/etc/profile
# source /etc/profile

五、讓Nginx關聯PHP-FPM

1、爲什麼需要關聯

我們在安裝Nginx與PHP時都是獨立安裝的。

Nginx佔用80端口、PHP-FPM佔用計算機的9000端口。

問題:請求過來後,都要先通過80端口的Nginx軟件。那如果是.php爲後綴的動態文件怎麼處理呢?

2、創建php腳本

# cd /usr/local/nginx/html # vim demo.php
<?php
echo 'hello php!';
?>

直接在瀏覽器中,訪問IP地址+demo.php,自動彈出下載

原因分析:正常情況下,Nginx不具備PHP代碼的解析功能。所以遇到PHP 代碼以後,會把其當做未知文件,自動調用下載器進行下載。

3、讓Nginx把.php文件轉發PHP-FPM

Nginx 識別.php代碼,然後轉發 PHP-FPM

所以核心就是更改Nginx的配置文件nginx.conf:

worker_processes 1;
events { 
worker_connections 1024; 
} 
http { 
include mime.types; 
default_type application/octet-stream; 
sendfile on; 
keepalive_timeout 65; 
server {
# 監聽端口 
listen 80; 
# 真實域名,localhost代表本機 
server_name localhost; 
# 項目目錄 
root html; 
# 任意請求 
 location / {
# 默認首頁(如果在html目錄發現默認首頁,直接運行) 
index index.html index.htm; 
}
# 添加PHP文件支持 
location ~ \.php$ { 
fastcgi_pass 127.0.0.1:9000; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME 
$document_root$fastcgi_script_name; 
include fastcgi_params; 
}
# 當訪問遇到錯誤時,返回50x.html頁面給用戶
error_page 500 502 503 504 /50x.html; 
location = /50x.html { 
root html; 
 } 
 } 
 } 
nginx.conf文件,主要由三部分組成: 
http {
server {} 
server {} 
}
一個nginx.conf對應一個http,代表http請求,所以一個頁面只有一個http
一個http可以包含多個server區塊,每個區塊就是一個項目(網站)=> 虛擬主機

配置讓Nginx可以識別.php文件,然後轉發:

設置完成後,一定要重載Nginx

# systemctl reload nginx

重載完成後一定要檢查一下9000端口是否啓用,否則請求過來之後無法進行轉發。

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