天天看點

LNMP論壇搭建---(mysql,php,nginx源碼編譯)

nginx介紹:

nginx是一款高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。因它的穩定性。豐富的功能集,示例配置檔案和低系統資源的消耗而聞名。是一款輕量級的web伺服器/反向代理伺服器及電子郵件代理伺服器,同時nginx也是一個非常優秀的郵件代理伺服器。其特點為占有記憶體少,并發能力強,事實上nginx的并發能力确實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站的使用者有:百度,京東,新浪,騰訊,網易,淘寶等。

nginx和apache對比

1.nginx相對于apache的優點

輕量級,同樣的web伺服器,比apache占有更少的資源和記憶體

抗并發,nginx處理請求是異步非阻塞式,而apache則是阻塞式。在高并發下,nginx能保持弟子員,低消耗,高性能

高度子產品化設計,編寫高性能子產品資源豐富

代理功能強大

2.apache對于nginx的優點

比nginx的rewrite(服務其的重寫脈沖技術,支援URL重寫)更強大

子產品超多,現有的子產品基本能滿足所有需求

比nginx穩定,bug較少

3.nginx于apache應用場景對比

apache适合跑動态,而nginx時和跑靜态和反向,但若靜态檔案較少,apache的select子產品比nginx的epoll子產品更好

nginx适用于IO米即型服務,apache适合與CPU密集型服務

最好兩者結合,例如,lnmp架構,nginx做前端伺服器,處理靜态檔案請求,apache做後端伺服器,當客戶發出動态檔案請求時,nginx的反向代理功能将請求轉發到apache.

4.輕量級,高并發原因:

對于apache,每個請求都獨占一個工作線程,并發數在幾千,占用記憶體,CPU,降低性能

對于nginx,一個程序隻有一個主線程,通過異步非阻塞式時間處理機制,實作了循環處理多個準備好的事件,進而實作輕量級,高并發。

5.直接說明

apache屬于專一性服務

nginx屬于分階段進行,節省時間

Mysql是一個小型關系型資料庫管理系統。

PHP是一種在伺服器端執行的嵌入HTML文檔的腳本語言。

mysql,php,nginx源碼編譯安裝:

mysql

1)解壓安裝mysql

tar zxf mysql-boost-5.7.17.tar.gz

2)安裝cmake(相當于configure),用來編譯mysql

yum install -y cmake-2.8.12.2-4.el6.x86_64.rpm 同時解決依賴性

3)cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \ #安裝目錄

-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \ #資料庫存放目錄

-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \ #Unix socket 檔案路徑

-DWITH_MYISAM_STORAGE_ENGINE=1 \ #安裝 myisam 存儲引擎

-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安裝 innodb 存儲引擎

-DDEFAULT_CHARSET=utf8 \ #使用 utf8 字元

-DDEFAULT_COLLATION=utf8_general_ci \ #校驗字元

-DEXTRA_CHARSETS=all #安裝所有擴充字元集

4)根據提示解決依賴性問題

需要安裝包:yum install -y gcc gcc-c++ ncurses-devel

##報錯##

CMake Error at cmake/boost.cmake:81 (MESSAGE):

You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=

This CMake script will look for boost in . If it is not there,

it will download and unpack it (in that directory) for you.

If you are inside a firewall, you may need to use an http proxy:

export http_proxy=http://example.com:80

‘重新編譯時,需要清除原來的對象檔案和緩存資訊’

‘make clean;rm -fr CmakeCache.txt’

##解決##

缺少 -DWITH_BOOST= 參數 -DWITH_BOOST=boost/boost_1_59_0/ (可Tab補齊)

後面編譯會有一個warning:

CMake Warning at cmake/bison.cmake:20 (MESSAGE):

Bison executable not found in PATH

Call Stack (most recent call first):

sql/CMakeLists.txt:514 (INCLUDE)

##解決##

yum install -y bison

5)make && make install (過程較長) ##如果make還有問題,删除原來的目錄,重新解壓編譯

6)複制啟動腳本到/etc/init.d/

[[email protected] support-files]# pwd

/root/mysql-5.7.17/support-files

[[email protected] support-files]# cp mysql.server /etc/init.d/mysqld

7)将原來的/etc/my.cnf備份,重新拷貝安裝包裡的過去

[[email protected] etc]# cp my.cnf my.cnf.bak

[[email protected] support-files]# cp my-default.cnf /etc/my.cnf

修改配置:

basedir = /usr/local/lnmp/mysql

datadir = /usr/local/lnmp/mysql/data

socket = /usr/local/lnmp/mysql/data/mysql.sock

8)添加使用者群組:

groupadd -g 27 mysql

useradd -u 27 -g 27 mysql (id=27是因為rpm預設安裝時mysql使用者的id為27,并非強制)

chown mysql.mysql /usr/local/lnmp/mysql -R (修改mysql目錄的權限,使其對mysql使用者可寫)

9)将mysql指令添加到環境變量

vim ~/.bash_profile

添加:

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin

生效:source ~/.bash_profile

初始化mysql:

mysqld --user=mysql --initialize(以mysql使用者身份初始化)

初始化會生成一個臨時密碼,用于登入mysql(要記住此密碼)

#如:‘2019-01-03T09:06:09.448851Z 1 [Note] A temporary password is generated for [email protected]: r#9VqAoA/au:’

10)為了安全,再将mysql目錄的所有者改為root

chown root /usr/local/lnmp/mysql -R

chown mysql /usr/local/lnmp/mysql/data -R ##資料目錄所有者必須是mysql,不然mysql使用者不能寫

11)啟動mysql:/etc/init.d/mysqld start

12)進入mysql:mysql -uroot -pr#9VqAoA/au: #使用剛才的臨時密碼

執行:show databases; 會報錯

需要執行:mysql_secure_installation,然後會提示是否啟用密碼檢測插件,直接回車不啟用,否則會要求密碼有大小寫和特殊字元等要求

剩餘全部選 y

mysql安裝配置完成

php

1)解壓:tar jxf php-5.6.35.tar.bz2

yum -y install bzip2

2)進入解壓後的目錄,開始編譯

./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp --with-gettext --with-pear --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash

–with-config-file-path=/etc 指定php.ini位置

–with-MySQL=mysql安裝目錄,對mysql的支援

–with-MySQLi=mysqli檔案目錄,優化支援

–enable-fpm

PHP-FPM是一個PHP FastCGI管理器,是隻用于PHP的,它其實是PHP源代碼的一個更新檔,旨在将Fast-CGI程序管理整合進PHP包中。必須将它patch到你的PHP源代碼中,在編譯安裝PHP後才可以使用。新版的PHP已經內建了php-fpm,在./configure的時候帶 –enable-fpm參數即可開啟PHP-FPM

#以上為php需要編譯的子產品,把剛才編譯mysql的參數要加進來,添加mysqlnd(這是mysql的驅動,php開發的)

–with-freetype-dir 打開對freetype字型庫的支援

–with-zlib 打開zlib庫支

#編譯時遇到的報錯就安裝:yum install -y libxml2-devel libcurl-devel

#沒有jpeglib.h檔案:yum whatprovides */jpeglib.h

#yum install -y libjpeg-turbo-devel-1.2.1-1.el6.x86_64

#yum install -y libpng-devel-1.2.49-1.el6_2.x86_64

#yum install -y freetype freetype-devel

#yum install -y net-snmp net-snmp-devel

3)編譯報錯,逐漸解決依賴性(rhel7可以向下相容6的包)

yum install -y re2c-0.13.5-1.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm libmcrypt-devel-2.5.8-9.el6.x86_64.rpm (系統鏡像沒有的3個包)

4)make && make install

5)編譯時添加了–with-fpm-user=nginx --with-fpm-group=nginx 參數

是以添加 nginx 使用者

6)拷貝更改配置檔案

[[email protected] etc]# pwd

/usr/local/lnmp/php/etc

[[email protected] etc]# cp php-fpm.conf.default php-fpm.conf

檢視配置檔案中以下幾項是否開啟:

user = nginx

group = nginx

pid = run/php-fpm.pid

7)拷貝更改php主配置檔案

[[email protected] php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini

修改時區:date.timezone = Asia/Shanghai

8)拷貝php啟動腳本至/etc/init.d/

[[email protected] fpm]# pwd

/root/lnmp/php-5.6.35/sapi/fpm

[[email protected] fpm]# cp init.d.php-fpm /etc/init.d/php-fpm

添加執行權限:chmod +x /etc/init.d/php-fpm

9)啟動php:/etc/init.d/php-fpm start

nginx

1)解壓nginx:tar zxf nginx-1.14.0.tar.gz

2)進入nginx解壓包:

vim src/core/nginx.h

修改:#define NGINX_VER “nginx/”(将此行末尾顯示nginx版本号的配置删除)

vim auto/cc/gcc

修改:

# debug
#CFLAGS="$CFLAGS -g" (将這2行注釋調,關閉debug)
           

3)編譯安裝nginx:

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx

根據提示解決依賴性 ##此處應該還需要安裝pcre-devel

4)make && make install

5)修改nginx配置檔案,開啟php子產品

vim

43 location / {

44 root html;

45 index index.php index.html index.htm; (添加php頁面)

46 }

65 location ~ .php$ {

66 root html;

67 fastcgi_pass 127.0.0.1:9000;

68 fastcgi_index index.php;

69 #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

70 include fastcgi.conf;

71 }

6)将nginx啟動腳本連結到/usr/local/sbin/

ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/

[[email protected] ~]# nginx -t ##檢測文法

[[email protected] ~]# nginx ##開啟nginx

7)嘗試通路:http://172.25.37.1 ##是nginx預設頁面

在nginx預設釋出目錄添加 index.php

vim /usr/local/lnmp/nginx/html/index.php

<?php phpinfo() ?>

#可以看到php的預設頁面

8)啟動nginx并通路:http://172.25.37.1

nginx安裝配置完成

Discuz論壇搭建

1)解壓 Discuz_X3.2_SC_UTF8.zip

unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/

#沒有unzip指令的話需要安裝:yum install -y unzip

2)将解壓後的upload目錄改名為bbs,便于通路

mv upload bbs

3)浏覽器通路:http://172.25.37.1/bbs

4)點選同意後會出現很多目錄不存在和不可寫的報錯

##解決##

[[email protected] bbs]# pwd

/usr/local/lnmp/nginx/html/bbs

chmod 777 config/ -R

chmod 777 data/ -R

chmod 777 uc_server/ uc_client/ -R

給以上目錄增權重限,再重新整理就可以了

5)選擇全新安裝—>填寫資料庫名(任意) 資料庫使用者名:root 資料庫密碼:自己設定的資料庫root使用者密碼

管理者帳号:admin 密碼:westos

6)下面會報資料庫連接配接錯誤:No such file or directory

##解決##

編輯php主配置檔案:vim /usr/local/lnmp/php/etc/php.ini

修改以下配置:

pdo_mysql.default_socket= /usr/local/lnmp/mysql/data/mysql.sock

mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock

mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock

以上路徑為mysql安裝的目錄,根據自己的路徑填寫

重新加載php

/etc/init.d/php-fpm reload

7)再次重新整理頁面,還是報錯:Permission denied

##解決##

由于 nginx使用者 對于 /usr/local/lnmp/mysql/data 目錄沒有權限

是以:chmod 755 data/

再次重新整理,成功安裝

8)點選頁面中“管理中心”,會出現報錯:Please delete install/index.php via FTP!

##解決##

[[email protected] bbs]# pwd

/usr/local/lnmp/nginx/html/bbs/install

[[email protected] install]# rm -fr index.php

再重新整理頁面,成功

‘如果把nginx配置檔案中php子產品注釋掉,再重新整理頁面,會讓你下載下傳,這就是打開php子產品的原因’

繼續閱讀