LNMP編譯安裝部署文檔
系統和軟件要求
系統環境
CentOS Linux release 7.4.1708
軟件環境
軟件包位置(/opt)
nginx/1.12.2
PHP 7.1.1
Mysql5.6
Redis-4.0.9
phpMyAdmin-4.7.0
memcached-1.5.7
構建Nginx+MySQL+PHP平臺
(1)安裝lnmp所需依賴庫
\#yum -y install gcc automake autoconf libtool make gcc-c++ glibc libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel pcre pcre-devel libmcrypt libmcrypt-devel cmake gmp-devel readline-devel
創建www所屬組及用戶
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
設置系統資源限制
ulimit -SHn 65535
(2)安裝配置Nginx
Nginx 源碼安裝
\#cd /opt/
wget http://nginx.org/download/nginx-1.12.2.tar.gz
\#tar -xvf nginx-1.12.2.tar.gz
\#cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --user=www --group=www --with-http\_ssl\_module --with-http\_gzip\_static\_module --with-http\_stub\_status\_module
\#make && make install
nginx //啟動
nginx -s stop// 停止
nginx -s reload // 重新加載
為方便管理設置啟動腳本,配置開機啟動
vi /etc/rc.d/init.d/nginx
\#! /bin/bash
# chkconfig: 35 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
test -x $DAEMON || exit 0
d\_start(){
$DAEMON || echo -n " already running"
}
d\_stop() {
$DAEMON -s quit || echo -n " not running"
}
d\_reload() {
$DAEMON -s reload || echo -n " counld not reload"
}
case "$1" in
start)
echo -n "Starting $DESC:$NAME"
d\_start
echo "."
;;
stop)
echo -n "Stopping $DESC:$NAME"
d\_stop
echo "."
;;
reload)
echo -n "Reloading $DESC configuration..."
d\_reload
echo "reloaded."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d\_stop
sleep 2
d\_start
echo "."
;;
\*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
exit 3
;;
esac
exit 0
\#chmod +x /etc/rc.d/init.d/nginx (設置可執行權限)
\#chkconfig --add nginx (添加系統服務)
\#service nginx start
\#service nginx stop
\#service nginx restart
\#service nginx reload
瀏覽器訪問:http://公網ip/如能出現nginx頁面則表示成功

常用查詢
查看nginx進程
ps -ef | grep nginx
查看進程個數 去掉首位的
ps -ef | grep nginx | wc -l
查看80端口
netstat -tlupn|grep nginx
(3)安裝配置php(多線程)
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 安裝多線程擴展PHP \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
PHP 7.2 安裝 [http://zpblog.cn/linux/PHP7\_pthreads.html](http://zpblog.cn/linux/PHP7_pthreads.html)
\#cd /opt/
\#wget <http://php.net/distributions/php-7.2.11.tar.gz>
\#tar xvzf php-7.2.11.tar.gz
\#cd php-7.2.11
\#groupadd www && useradd -g www www
\#./configure --prefix=/usr/local/php7 --enable-maintainer-zts --with-config-file-path=/usr/local/php7/etc --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip --with-fpm-user=www --with-fpm-group=www
\#make clean && make && make install
\#cp php.ini-production /usr/local/php7/etc/php.ini
\#cp sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm
\#chmod 755 /etc/init.d/php7-fpm
\#cd /usr/local/php7/etc/
\#cp php-fpm.conf.default php-fpm.conf
\#cd php-fpm.d
\#cp www.conf.default www.conf
\#/etc/init.d/php7-fpm start
pthreads 安裝
\#wget https://codeload.github.com/krakjoe/pthreads/zip/master
\#unzip master
\#cd pthreads-master
\#/usr/local/php7/bin/phpize
\#./configure --with-php-config=/usr/local/php7/bin/php-config
\#make && make install
由于pthreads v3只支持cli模式,所以加入php配置文件如下:
\#cd /usr/local/php7/etc/
\#cp php.ini php-cli.ini
編輯 php-cli.ini 加入以下:
extension="pthreads.so"
找到date.timezone選項,刪除前面的注釋符,并將其值設置為 PRC
查看安裝是否成功
運行
\#/usr/local/php7/bin/php -m
\#export LD\_LIBRARY\_PATH=/lib/:/usr/lib/:/usr/local/lib
另外還需要設置環境變量 :
修改/etc/profile文件使其永久性生效,并對所有系統用戶生效,在文件末尾加上如下兩行代碼
PATH=$PATH:/usr/local/php7/bin:/usr/local/nginx/sbin
export PATH
最后使用php -m檢驗安裝情況,如果有pthreads模塊就滿足需求
然后執行 命令 source /etc/profile
php -v 就可以看到PHP版本信息了。
啟動php-fpm:
/etc/init.d/php7-fpm start
如果出現錯誤:ERROR: \[pool www\] cannot get uid for user 'nginx'
則新建www-data 用戶組:
useradd nginx
然后再啟動php-fpm
php-fpm參數:
\--start 啟動
\--stop 強制終止
\--quit 平滑終止
\--restart 重啟
\--reload 重新平滑加載php的php.ini
\--logrotate 重新啟用log文件
查看php版本
\#php -v
(4)配置nginx支持php解析
在nginx的配置文件中添加
vi /usr/local/nginx/conf/nginx.conf
location ~ \\.php$ {
root /usr/local/nginx/html/;
fastcgi\_pass 127.0.0.1:9000;
fastcgi\_index index.php;
fastcgi\_param SCRIPT\_FILENAME $document\_root$fastcgi\_script\_name;
include /usr/local/nginx/conf/fastcgi\_params;
}
注釋:/usr/local/nginx/html/ nginx的web目錄
/usr/local/nginx/conf/fastcgi\_params fastcgi處理文件
重啟nginx
service nginx restart
啟動php解析管理器fastcgi
service php-fpm start
編寫測試頁面
<?php
phpinfo();
?>
測試:
http://47.98.97.98/index.php

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* 測試多線程擴展支持 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
編寫測試頁面:
<?php
/\*\*
\* Created by PhpStorm.
\* User: WJD
\* Date: 2019/3/4
\* Time: 17:21
\*/
class test\_thread\_run extends Thread
{
public $url;
public $data;
public function \_\_construct($url)
{
$this->url = $url;
}
public function run()
{
if(($url = $this->url))
{
$this->data = model\_http\_curl\_get($url);
}
}
}
function model\_thread\_result\_get($urls\_array)
{
foreach ($urls\_array as $key => $value)
{
$thread\_array\[$key\] = new test\_thread\_run($value\["url"\]);
$thread\_array\[$key\]->start();
}
foreach ($thread\_array as $thread\_array\_key => $thread\_array\_value)
{
while($thread\_array\[$thread\_array\_key\]->isRunning())
{
usleep(10);
}
if($thread\_array\[$thread\_array\_key\]->join())
{
$variable\_data\[$thread\_array\_key\] = $thread\_array\[$thread\_array\_key\]->data;
}
}
return $variable\_data;
}
function model\_http\_curl\_get($url,$userAgent="")
{
$userAgent = $userAgent ? $userAgent : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)';
$curl = curl\_init();
curl\_setopt($curl, CURLOPT\_URL, $url);
curl\_setopt($curl, CURLOPT\_RETURNTRANSFER, 1);
curl\_setopt($curl, CURLOPT\_TIMEOUT, 5);
curl\_setopt($curl, CURLOPT\_USERAGENT, $userAgent);
$result = curl\_exec($curl);
curl\_close($curl);
return $result;
}
for ($i=0; $i < 10; $i++)
{
$urls\_array\[\] = array("name" => "baidu", "url" => "http://www.baidu.com/s?wd=".mt\_rand(10000,20000));
}
$t = microtime(true);
$result = model\_thread\_result\_get($urls\_array);
$e = microtime(true);
echo "More Thread used time:".($e-$t)."\\n";
$t = microtime(true);
foreach ($urls\_array as $key => $value)
{
$result\_new\[$key\] = model\_http\_curl\_get($value\["url"\]);
}
$e = microtime(true);
echo "For Loops used time:".($e-$t)."\\n";
?>
以php-cli模式啟動:
\#php thread\_test.php

可見多線程所用時間比完成同樣邏輯的for循環快。
(5)nginx配置虛擬主機(參考)
web.test.com
server {
listen 80;
server\_name web.test.com;
location ~ \\.php$ {
root /usr/local/nginx/html/web.test.com;
fastcgi\_pass 127.0.0.1:9000;
fastcgi\_index index.php;
fastcgi\_param SCRIPT\_FILENAME $document\_root$fastcgi\_script\_name;
include /usr/local/nginx/conf/fastcgi\_params;
}
location / {
root /usr/local/nginx/html/web.test.com;
index index.php;
}
}
(6)MySQL5.6安裝配置
\#cd /opt
\#yum -y install libaio libaio-devel
\#wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.26.tar.gz#groupadd mysql
\#useradd -r -g mysql -s /bin/false mysql 創建mysql用戶并加入到mysql組 不允許mysql用戶登錄系統
\#tar -xvf mysql-5.6.35-linux-glibc2.5-x86\_64.tar.gz
\# cd mysql-5.6.35-linux-glibc2.5-x86\_64
\# cmake -DCMAKE\_INSTALL\_PREFIX=/usr/local/mysql -DMYSQL\_UNIX\_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT\_CHARSET=utf8 -DDEFAULT\_COLLATION=utf8\_general\_ci -DWITH\_INNOBASE\_STORAGE\_ENGINE=1 -DWITH\_ARCHIVE\_STORAGE\_ENGINE=1 -DWITH\_BLACKHOLE\_STORAGE\_ENGINE=1 -DMYSQL\_DATADIR=/usr/local/mysql/data -DMYSQL\_TCP\_PORT=3306 -DMYSQL\_USER=mysql -DENABLE\_DOWNLOADS=1
\#make && make install
\#mv mysql-5.6.35-linux-glibc2.5-x86\_64 /usr/local/mysql
\#chown -R mysql:mysql /usr/local/mysql
\#rm -rf /etc/my.cnf
\#cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
修改文件為
\[mysqld\]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/mysql.pid
log-error=/usr/local/mysql/data/mysql.err
max\_connections=200
default-storage-engine=INNODB
lower\_case\_table\_names=1
max\_allowed\_packet=20M
初始化數據庫
\#cd /usr/local/mysql/scripts
\# ./mysql\_install\_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
\# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
啟動數據庫
\# service mysqld start
添加環境變量
\#echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
\#source /etc/profile
\#原數據庫密碼為空 修改數據庫密碼為admin123@
mysqladmin -uroot password admin123@
Mysql為了安全性,在默認情況下用戶只允許在本地登錄,可是在有此情況下,還是需要使用用戶進行遠程連接,因此為了使其可以遠程需要進行如下操作:
一、允許root用戶在任何地方進行遠程登錄,并具有所有庫任何操作權限,
具體操作如下:
在本機先使用root用戶登錄mysql: mysql -u root -p"youpassword" 進行授權操作:
mysql>GRANT ALL PRIVILEGES ON \*.\* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
重載授權表:
FLUSH PRIVILEGES;
退出mysql數據庫:
exit
二、允許root用戶在一個特定的IP進行遠程登錄,并具有所有庫任何操作權限,具體操作如下: 在本機先使用root用戶登錄mysql: mysql -u root -p"youpassword" 進行授權操作: GRANT ALL PRIVILEGES ON \*.\* TO root@"172.16.16.152" IDENTIFIED BY "youpassword" WITH GRANT OPTION; 重載授權表: FLUSH PRIVILEGES; 退出mysql數據庫: exit
三、允許root用戶在一個特定的IP進行遠程登錄,并具有所有庫特定操作權限,具體操作如下: 在本機先使用root用戶登錄mysql: mysql -u root -p"youpassword" 進行授權操作: GRANT select,insert,update,delete ON \*.\* TO root@"172.16.16.152" IDENTIFIED BY "youpassword"; 重載授權表: FLUSH PRIVILEGES; 退出mysql數據庫: exit
四、刪除用戶授權,需要使用REVOKE命令,具體命令格式為: REVOKE privileges ON 數據庫\[.表名\] FROM user-name; 具體實例,先在本機登錄mysql: mysql -u root -p"youpassword" 進行授權操作: GRANT select,insert,update,delete ON TEST-DB TO test-user@"172.16.16.152" IDENTIFIED BY "youpassword"; 再進行刪除授權操作: REVOKE all on TEST-DB from test-user; \*\*\*\*注:該操作只是清除了用戶對于TEST-DB的相關授權權限,但是這個“test-user”這個用戶還是存在。 最后從用戶表內清除用戶: DELETE FROM user WHERE user="test-user"; 重載授權表: FLUSH PRIVILEGES; 退出mysql數據庫: exit
5、 MYSQL權限詳細分類: 全局管理權限: FILE: 在MySQL服務器上讀寫文件。 PROCESS: 顯示或殺死屬于其它用戶的服務線程。 RELOAD: 重載訪問控制表,刷新日志等。 SHUTDOWN: 關閉MySQL服務。 數據庫/數據表/數據列權限: ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。 CREATE: 建立新的數據庫或數據表。 DELETE: 刪除表的記錄。 DROP: 刪除數據表或數據庫。 INDEX: 建立或刪除索引。 INSERT: 增加表的記錄。 SELECT: 顯示/搜索表的記錄。 UPDATE: 修改表中已存在的記錄。 特別的權限: ALL: 允許做任何事(和root一樣)。 USAGE: 只允許登錄--其它什么也不允許做。
6、 centos安裝Mariadb
yum -y install mariadb mariadb-server
安裝完成MariaDB,首先啟動MariaDB
systemctl start mariadb
設置開機啟動
systemctl enable mariadb
接下來進行MariaDB的相關簡單配置
mysql\_secure\_installation
(7)Redis安裝配置
\#cd /opt/
\#wget <http://download.redis.io/releases/redis-4.0.9.tar.gz>
\#tar -xvf redis-4.0.9.tar.gz
\#cd redis-4.0.9
\# /usr/local/php/bin/phpize # php安裝后的路徑
\# ./configure --with-php-config=/usr/local/php7/bin/php-config
\#make
\#make install
\#cp redis.conf /etc/
配置文件修改
vi /etc/redis.conf
Daemonize yes
pidfile /var/run/redis.pid
編寫啟動腳本
vi /etc/init.d/redis
\#!/bin/sh
\#
\# redis - this script starts and stops the redis-server daemon
\#
\# chkconfig: - 85 15
\# description: Redis is a persistent key-value database
\# processname: redis-server
\# config: /etc/redis.conf
\# config: /etc/sysconfig/redis
\# pidfile: /var/run/redis.pid
\# Source function library.
. /etc/rc.d/init.d/functions
\# Source networking configuration.
. /etc/sysconfig/network
\# Check that networking is up.
\[ "$NETWORKING" = "no" \] && exit 0
redis="/usr/local/bin/redis-server"
prog=$(basename $redis)
REDIS\_CONF\_FILE="/etc/redis.conf"
\[ -f /etc/sysconfig/redis \] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
\[ -x $redis \] || exit 5
\[ -f $REDIS\_CONF\_FILE \] || exit 6
echo -n $"Starting $prog: "
daemon $redis $REDIS\_CONF\_FILE
retval=$?
echo
\[ $retval -eq 0 \] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
\[ $retval -eq 0 \] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading $prog: "
killproc $redis -HUP
RETVAL=$?
echo
}
force\_reload() {
restart
}
rh\_status() {
status $prog
}
rh\_status\_q() {
rh\_status >/dev/null 2>&1
}
case "$1" in
start)
rh\_status\_q && exit 0
$1
;;
stop)
rh\_status\_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh\_status\_q || exit 7
$1
;;
force-reload)
force\_reload
;;
status)
rh\_status
;;
condrestart|try-restart)
rh\_status\_q || exit 0
;;
\*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
配置PHP支持redis
vi php.ini
增加如下內容:
extension\_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20090626"
extension=redis.so
重啟php-fpm服務,php -m查看是否支持redis擴展
配置開機啟動腳本
\#chmod +x /etc/init.d/redis
\#chkconfig --add redis
\#chkconfig --level 35 redis on
\#啟動服務
service redis restart
測試

(8)Memcached安裝配置
\#yum install gcc libevent libevent-devel
\#wget <http://www.memcached.org/files/memcached-1.5.7.tar.gz>
\#tar -xvf memcached-1.5.7.tar.gz
\#cd memcached-1.5.7
\#./configure --prefix=/usr/local/memcached && make && sudo make install
啟動服務
/usr/local/memcached/bin/memcached -d -u root -l 172.16.177.69 -p 11211 -m 10 -c 1000 -P /tmp/memcached.pid
啟動參數詳解
\#選項說明,這里只列出比較重要的選項,具體選項說明使用memcached -h來查閱
-p TCP端口,默認為11211,可以不設置
-U UDP端口,默認為11211,0為關閉
-l 監聽的ip地址
-d 守護進程(daemon)
-u 指定用戶,如果當前為 root ,需要使用此參數指定用戶
-m 最大內存,單位MB。默認64MB,32位操作系統,每個進程最多只能使用2GB,64位無限制
-M 禁止LRU策略,內存耗盡時返回錯誤,而不是刪除數據
-c 最大連接數,默認是1024
-vv 查看日志
-P memcache的pid文件,結束memcache進程:kill `cat /tmp/memcached\_32054.pid`
-f 增長因子,默認1.25
-n 初始chunk=key+suffix+value+32結構體,默認48字節
-L 啟用大內存頁,可以降低內存浪費,改進性能
-t 線程數,默認4。由于memcached采用NIO,所以更多線程沒有太多作用
-R 每個event連接最大并發數,默認20
-C 禁用CAS命令(可以禁止版本計數,減少開銷)
-I 每次申請內存的頁的大小(page),默認1M,最小1k,最大128M
-F 禁用flush\_all
(9) **phpadmin安裝配置**
#wget <https://files.phpmyadmin.net/phpMyAdmin/4.7.0/phpMyAdmin-4.7.0-all-languages.tar.gz>
\#tar -xvf phpMyAdmin-4.7.0-all-languages.tar.gz
\#mv phpMyAdmin-4.7.0-all-languages /usr/local/nginx/html/phpMyAdmin
測試界面
http://47.98.97.98/phpMyAdmin/

Ubuntu環境下的LNMP搭建
安裝Nginx
$ sudo apt-get update`
$ sudo apt-get install nginx
1
2
安裝Nginx完成后可查看版本號,輸入:
$ /usr/sbin/nginx -v
1
Nginx安裝完成,此時訪問IP可以看到Welcome Nginx的界面。
安裝MySQL
$ sudo apt-get install mysql-server-5.7 mysql-client-5.7
1
中途會提示輸入數據庫密碼,請輸入較為復雜的密碼并牢記
MySQL安裝完成后,輸入以下登錄驗證
mysql -uroot -p
1
密碼就是剛才設置的密碼
安裝PHP及相應擴展
$ sudo apt-get install php7.0-fpm php7.0-mysql php7.0-common php7.0-curl php7.0-cli php7.0-mcrypt php7.0-mbstring php7.0-dom
1
配置PHP
sudo vim /etc/php/7.0/fpm/php.ini
1
按/輸入cgi.fix\_pathinfo尋找該值
解除注釋并把值設置為0
啟動
sudo phpenmod mcrypt
1
sudo service php7.0-fpm restart
1
配置Nginx
修改user
vim /etc/nginx/nginx.conf
1
將user改為 www-data
因為PHP默認是這個user
端口-代碼映射
vim /etc/nginx/sites-available/default
1
鍵入
server {
#監聽端口
listen 81;
server\_name demo;
#相應記錄可不填
access\_log /home/www/81.log;
error\_log /home/www/81.error.log;
#項目地址
root /home/www/demo;
index index.php index.html;
#fastcgi\_pass為fpm地址,可查看/etc/php/7.0/fpm/pool.d/www.conf中的listen確定
location ~ \\.php$ {
include fastcgi\_params;
fastcgi\_pass unix:/run/php/php7.0-fpm.sock;
fastcgi\_param PATH\_INFO $fastcgi\_script\_name;
fastcgi\_param SCRIPT\_FILENAME $document\_root$fastcgi\_script\_name;
fastcgi\_read\_timeout 10000;
}
}
重啟Nginx
nginx -s reload
1
開放端口
sudo ufw allow 81
1
如果是云服務器,記得修改安全配置,以開放相應端口
至此,就可以進行測試了
本地訪問 120.0.0.1:81
服務器訪問 你的外網IP:81