文章目錄
前言:
-
LNMP是指一組通常一起使用來運行動態網站或者服務器的自由軟件名稱首字母縮寫。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python
-
LNMP代表的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。
Linux是一類Unix計算機操作系統的統稱,是目前最流行的免費操作系統。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器。
Mysql是一個小型關係型數據庫管理系統。
PHP是一種在服務器端執行的嵌入HTML文檔的腳本語言。
這四種軟件均爲免費開源軟件,組合到一起,成爲一個免費、高效、擴展性強的網站服務系統
一、LNMP架構部署(理論)
1.1 LNMP架構簡介
-
LNMP平臺就是 Linux、 Ngnix、 My SQL、PHP的組合架構,需要 Linux服務器、MysαL數據庫、PHP解析環境
-
Ngnix特長:高併發,低資源,處理靜態網絡訪問請求非常強
Apache:靜態處理和動態處理都可以做,更適合做動態處理
Nginx將動態資源請求交給PHP當中的fpm處理動態請求
PHP主配置文件:php.ini
Nginx將動態資源分配給FPM(處理進程)或Apache
1.2 MySQL安裝配置
- 爲了與 Nginx、PHP環境保持一致,此處選擇採用源代碼編譯的方式安裝 My SQL組件
- MySQL部署的方法
- 編譯安裝 MySQL
- 優化調整初始化數據庫
- 啓動mysq服務並設置root數據庫賬號的密碼
1.3:PHP解析環境的安裝
-
配置網頁動靜分離,解析PHP,有兩種方法可以選擇:
- 使用PHP的FPM模塊
- 將訪問PHP頁面的Web請求轉交給 Apache服務器去處理
-
較新版本的PHP已經自帶FPM模塊,用來對PHP解析實例進行管理、優化解析效率
- FastCGI將 Http Server和動態腳本語言進行分離
- Nginx專門處理靜態請求,轉發動態請求
- PHP FPM專門解析PHP動態請求
FastCGI :通用網關接口,除了可以將Http Server和動態腳本語言分離之外還具有:跨平臺(即可作用在微軟也可以作用在linux系統)、支持多種語言。
- 單服務器的LNMP架構通常使用FPM的方式來解析PHP
- PHP編譯安裝步驟
- 編譯安裝PHP
- 編譯選項時添加"- enable-fpm”以啓用此模塊
- 安裝後的調整,主要是配置文件的建立與相應命令工具的路徑優化
- 安裝 Zend Guardloader(提高PHP解析效率),並進行加載配置
- CGI還有跨平臺的功能
1.4 配置Nginx支持PHP環境
-
調用本機的php-fpm進程配置方法
- 建立FPM配置文件php- fpm. conf,修改配置選項,如:PD文件運行用戶、服務進程數等
- 啓動php-pm進程
-
在Ngnx的配置文件中的 Server{} 配置段將PHP的網頁請求轉給FPM模塊處理
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_index SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
1.5 常見的PHP開源產品介紹
-
Discuz論壇
康盛創想(北京困技有限公司推出的一套通用的社區論壇軟件系統,如001年6月面世以來,是全球成熟度最高、覆蓋率最大的論壇軟件系統之一
-
PHPWind
PHPWind(簡稱:PW)是一個基於PHP和 MySQL的論壇程序,是國內最受歡迎的通用型論壇程序之一。 PHPWind的前身是onstar,發佈於2004年, PHPWind由杭州德天信息技術有限公司開發,軟件全面開源免費
二:LNMP應用部署(實驗)
2.1 nginx配置、
2.1.1 Nginx編譯安裝
- 安裝環境依賴包
[root@localhost ~]# yum -y install gcc gcc-c++ pcre-devel zlib-devel
- 創建程序性用戶管理nginx
[root@localhost LNMP-C7]# useradd -M -s /sbin/nologin nginx
- 編譯Nginx
[root@localhost ~]# mount.cifs //192.168.181.1/LAMP-C7 /mnt
Password for root@//192.168.181.1/LAMP-C7:
cd[root@localhost ~]# cd /mnt/LNMP-C7/
[root@localhost LNMP-C7]# ls
Discuz_X3.4_SC_UTF8.zip mysql-boost-5.7.20.tar.gz nginx-1.12.2.tar.gz php-7.1.10.tar.bz2 php-7.1.20.tar.gz
jdk-6u14-linux-x64.bin ncurses-5.6.tar.gz php-5.6.11.tar.bz2 php-7.1.20.tar.bz2 zend-loader-php5.6-linux-x86_64_update1.tar.gz
[root@localhost LNMP-C7]# tar zxvf nginx-1.12.2.tar.gz -C /opt/
......................省略部分內容
[root@localhost LNMP-C7]# cd /opt/nginx-1.12.2/
[root@localhost nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module
.....省略部分內容
[root@localhost nginx-1.12.2]# make && make install
.....省略部分內容
- 便於系統管理
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.12.2]# nginx -t #檢查語法
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2.1.2 使用systemctl控制
[root@localhost nginx-1.12.2]# cd /lib/systemd/system
[root@localhost system]# vim nginx.service
[Unit]
Description=nginx #描述
After=network.target #描述服務類別
[Service]
Type=forking #後臺運行形勢
PIDFile =/usr/local/nginx/logs/nginx.pid #PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx #啓動服務
ExecReload=/usr/bin/kill -S HUP $MAINPID #根據PID重載配置
ExecStop=/usr/bin/kill -S QUIT $MAINPID #根據PID終止進程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
------》wq
[root@localhost system]# chmod 754 /lib/systemd/system/nginx.service
#754權限可以一定程度的進行安全優化
- 關閉防火牆、開啓服務
[root@localhost system]# systemctl stop firewalld.service
[root@localhost system]# setenforce 0
[root@localhost system]# systemctl start nginx.service
[root@localhost system]# netstat -natp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5923/nginx: master
2.2 MySQL配置
2.2.1 安裝Mysql環境依賴包
[root@localhost system]# yum -y install \
> gcc \
> gcc-c++ \
> ncurses \ #字符終端的包,方便中斷操作
> ncurses-devel \
> bison \ #含數據
> cmake #編譯工具,(mysql使用的是cmake而不是configure
.............省略部分內容
- 創建程序用戶管理mysql
[root@localhost system]# useradd -s /usr/sbin/nologin mysql
#不加M是因爲之後有數據文件保存在家目錄 -M是不創建家目錄
2.2.2 編譯Mysql
[root@localhost system]# cd /mnt/LNMP-C7/
[root@localhost LNMP-C7]# ls
Discuz_X3.4_SC_UTF8.zip php-5.6.11.tar.bz2
jdk-6u14-linux-x64.bin php-7.1.10.tar.bz2
mysql-boost-5.7.20.tar.gz php-7.1.20.tar.bz2
ncurses-5.6.tar.gz php-7.1.20.tar.gz
nginx-1.12.2.tar.gz zend-loader-php5.6-linux-x86_64_update1.tar.gz
[root@localhost LNMP-C7]# tar zxvf mysql-boost-5.7.20.tar.gz -C /opt #boost是支持底層C++的運營庫(mysql5.7的特性)
.........省略部分內容
[root@localhost LNMP-C7]# cd /opt/mysql-boost-5.7.20
[root@localhost mysql-boost-5.7.20]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定安裝路徑(目錄)
> -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定通信文件,連接數據庫,通訊協議的載體
> -DSYSCONFDIR=/etc \ #配置文件目錄指向/etc
> -DSYSTEMD_PID_DIR=/usr/local/mysql \ #指定pid目錄文件
> -DDEFAULT_CHARSET=utf8 \ #字符集設定
> -DDEFAULT_COLLATION=utf8_general_ci \ #字符集設定
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #以下三行均爲存儲引擎ENGINE
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
> -DMYSQL_DATADIR=/usr/local/mysql/data \ #指定數據存放位置
> -DWITH_BOOST=boost \ #底層C++運營庫
> -DWITH_SYSTEMD=1 #守護進程id
.............省略部分內容
[root@localhost mysql-boost-5.7.20]# make && make install
.............省略部分內容
2.2.3 調整數據庫工作目錄權限
[root@localhost mysql-boost-5.7.20]# chown -R mysql:mysql /usr/local/mysql
2.2.4 調整配置文件
[root@localhost mysql-boost-5.7.20]# cd /etc
[root@localhost etc]# vim my.cnf
#刪除原有內容,添加以下內容
[client] #client 用戶程序
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql] #mysql 軟件內容
port = 3306 #端口
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld] #以後對msql配置時 更多的會針對於mysqld進行配置
user = mysql #程序用戶
basedir = /usr/local/mysql #工作目錄
datadir = /usr/local/mysql/data #數據文件目錄
port = 3306 #端口
character_set_server=utf8 #服務的字符集
pid-file = /usr/local/mysql/mysqld.pid #PID文件沐浴露
socket = /usr/local/mysql/mysql.sock #通訊文件
server-id = 1 #服務id,在之後的mysql集羣中用於標識mysql服務器
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
#模塊,默認加載
#PS:跳過數據庫權限驗證的命令爲:skip-grant-tables
-------》wq
- 修改配置文件權限(屬主、屬組)
[root@localhost etc]# chown mysql:mysql /etc/my.cnf
2.2.5 設置環境變量
[root@localhost etc]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
[root@localhost etc]# echo 'export PATH' >> /etc/profile
[root@localhost etc]# source /etc/profile
以上作用爲:設置環境變量,讓系統能夠識別命令文件和函數庫文件 “source /etc/profile” 讓其生效
2.2.6 初始化數據庫
[root@localhost etc]# cd /usr/local/mysql/
[root@localhost mysql]# bin/mysqld \
> --initialize-insecure \
> --user=mysql \
> --basedir=/usr/local/mysql \
> --datadir=/usr/local/mysql/data
........省略部分內容
2.2.7 開啓數據庫
- 將啓動腳本放到systemd目錄下便於systemctl管理
[root@localhost mysql]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
- 開啓服務、檢查狀態
[root@localhost mysql]# systemctl start mysqld
[root@localhost mysql]# netstat -natp | grep mysqld
tcp6 0 0 :::3306 :::* LISTEN 25573/mysqld
[root@localhost mysql]# systemctl enable mysqld #設置爲開機自啓
2.2.8 設置數據庫密碼
[root@localhost mysql]# mysqladmin -uroot -p password
Enter password: #無初始密碼
New password: #設置新密碼
Confirm new password:
2.2.9 登錄檢查數據庫
[root@localhost mysql]# mysql -uroot -p #登錄數據庫
Enter password: #輸入密碼
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.20 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases; #查看數據庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
2.3 PHP配置
2.3.1 安裝環境依賴包
[root@localhost mysql]# yum -y install \
> libjpeg \ #jpg圖片依賴
> libjpeg-devel \
> libpng libpng-devel \ #png圖片依賴
> freetype freetype-devel \ #字體
> libxml2 \ #支持xml
> libxml2-devel \
> zlib zlib-devel \ #壓縮格式
> curl curl-devel \ #識別url
> openssl openssl-devel
##xml 支持擴展性標記語言,用於承載數據 url 網址 openssl 安全性訪問
......省略部分內容
2.3.2 編譯安裝
[root@localhost mysql]# cd/mnt/LNMP-C7
[root@localhost LNMP-C7]# tar jxvf php-7.1.10.tar.bz2 -C /opt
[root@localhost LNMP-C7]# cd /opt/php-7.1.10/
[root@localhost php-7.1.10]# ./configure \
> --prefix=/usr/local/php \ #PHP文件路徑
> --with-mysql-sock=/usr/local/mysql/mysql.sock \ #sock通訊文件(需要與mysql指定的路徑一致)
> --with-mysqli \ #with(支持各項功能)
> --with-zlib \
> --with-curl \
> --with-gd \
> --with-jpeg-dir \
> --with-png-dir \
> --with-freetype-dir \
> --with-openssl \
> --enable-fpm \ #開啓fpm模塊
> --enable-mbstring \ #開啓多字段模塊
> --enable-xml \ #開啓擴展性標記語言模塊
> --enable-session \ #會話
> --enable-ftp \ #文本傳輸協議
> --enable-pdo \ #函數庫
> --enable-tokenizer \ #令牌解釋器
> --enable-zip #ZIP壓縮格式
..............省略部分內容
[root@localhost php-7.1.10]# make && make install
..............省略部分內容
2.3.3 調整PHP配置文件
-
PHP有三個配置文件:
php.ini 核心配置文件
php-fpm.conf 進程服務配置文件
www.conf 擴展配置文件
-
調整核心配置文件
[root@localhost php-7.1.10]# cp php.ini-development /usr/local/php/lib/php.ini
[root@localhost php-7.1.10]# cd /usr/local/php/lib/
[root@localhost lib]# ls
php php.ini
[root@localhost lib]# vim php.ini
mysqli.default_socket = /usr/local/mysql/mysql.sock
#搜索 /mysqli.default_socket(1170行)在“=” 添加sock文件路徑
date.timezone = Asia/Shanghai
#搜索/date.timezone (939行) 去掉“;”註釋符號,添加=後方內容
-------->wq
[root@localhost lib]# /usr/local/php/bin/php -m #檢查已安裝/加載的模塊
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
..............省略部分內容
- 調整進程服務配置文件
[root@localhost lib]# cd /usr/local/php/etc
[root@localhost etc]# ls
pear.conf php-fpm.conf.default php-fpm.d
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf #拷貝進程服務配置文件模板
[root@localhost etc]# vim php-fpm.conf
pid = run/php-fpm.pid
#17行,只需要去掉";"註釋符號即可
--------》wq
- 調整擴展配置文件
[root@localhost etc]# cd php-fpm.d/
[root@localhost php-fpm.d]# ls
www.conf.default
[root@localhost php-fpm.d]# cp www.conf.default www.conf
[root@localhost php-fpm.d]# ls
www.conf www.conf.default
2.3.4 開啓服務
[root@localhost php-fpm.d]# /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
[root@localhost php-fpm.d]# netstat -natp | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 70897/php-fpm: mast
- 使系統識別PHP命令
[root@localhost php-fpm.d]# ln -s /usr/local/php/bin/* /usr/local/bin
2.3.5 讓nginx支持php功能
[root@localhost conf]# vim nginx.conf
#搜索/.php 找到配置模板(65行)
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #將/scripts修改爲nginx的站點目錄即可
include fastcgi_params;
}
--------》wq
- 重啓nginx服務
[root@localhost conf]# systemctl stop nginx.service
[root@localhost conf]# systemctl start nginx.service
- 修改nginx網頁站點
[root@localhost conf]# cd /usr/local/nginx/html/
[root@localhost html]# ls
50x.html index.html
[root@localhost html]# mv index.html index.php
[root@localhost html]# vim index.php
<?php
phpinfo();
?>
#刪除原有內容,添加以上內容
2.3.5 訪問測試
配置完成後我們的LNMP架構已搭建完成,下面搭建Discuz論壇
三、Discuz論壇搭建
3.1 創建數據庫
- 爲論壇創建數據庫,同時給與權限
[root@localhost html]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.20 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database dis;
Query OK, 1 row affected (0.08 sec)
mysql> grant all on dis.* to 'disuser'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.04 sec)
mysql> grant all on dis.* to 'disuser'@'localhost' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| dis |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> quit
Bye
[root@localhost html]#
3.2 安裝Discuz論壇
- 解壓Discuz壓縮包
[root@localhost html]# cd /mnt/LNMP-C7/
[root@localhost LNMP-C7]# ls
Discuz_X3.4_SC_UTF8.zip php-5.6.11.tar.bz2
jdk-6u14-linux-x64.bin php-7.1.10.tar.bz2
mysql-boost-5.7.20.tar.gz php-7.1.20.tar.bz2
ncurses-5.6.tar.gz php-7.1.20.tar.gz
nginx-1.12.2.tar.gz zend-loader-php5.6-linux-x86_64_update1.tar.gz
[root@localhost LNMP-C7]# unzip Discuz_X3.4_SC_UTF8.zip -d /opt
.........省略部分內容
- 進入解壓到的目錄,將目錄內容複製到dis站點中
[root@localhost LNMP-C7]# cd /opt/dir_SC_UTF8/
[root@localhost dir_SC_UTF8]# ls
readme upload utility
[root@localhost dir_SC_UTF8]# cp -r upload/ /usr/local/nginx/html/dis
- 進入站點目錄,調整權限
[root@localhost dis]# cd /usr/local/nginx/html/dis/
[root@localhost dis]# chown -R root:nginx ./config/
[root@localhost dis]# chown -R root:nginx ./data/
[root@localhost dis]# chown -R root:nginx ./uc_client/
[root@localhost dis]# chown -R root:nginx ./uc_server/
[root@localhost dis]# chmod -R 777 ./config/ #給與所有權限
[root@localhost dis]# chmod -R 777 ./data/
[root@localhost dis]# chmod -R 777 ./uc_client/
[root@localhost dis]# chmod -R 777 ./uc_server/
[root@localhost dis]#
- 安裝論壇
安裝成功
總結
LNMP架構在現網環境中使用的還是比較頻繁,相對於LAMP,nginx的靜態網頁處理能力大於Apache的靜態處理,之後會介紹nginx與apache組合實現動靜分離的羣集架構。