環(huán)境
- nginx-1.8.0
- mysql-5.6.25
- php-5.6.11
所需的軟件包如圖所示:
注意:可將這些軟件包和mysql配置文件my.cnf(配置已經(jīng)設(shè)定好)以及php配置文件php-fpm.conf(配置已經(jīng)設(shè)定好)一并打包泻肯,整合成一個(gè)tar包。
注:這次的安裝是通過(guò)腳本進(jìn)行安裝比驻,通過(guò)分發(fā)服務(wù)器實(shí)現(xiàn),腳本及所需工具以及配置文件都是提前配置好睛约,在安裝過(guò)程中捞高,配置文件直接放到指定目錄下,從而實(shí)現(xiàn)快捷高效的配置迫摔。(配置中并不是特別詳細(xì)劝枣,有很多地方可以?xún)?yōu)化汤踏,后續(xù)進(jìn)行更改)
scp分發(fā)所需文件
這里略去分發(fā)腳本:scp -P端口 所需文件 用戶(hù)名@hosts:放置目錄
一般目錄單獨(dú)創(chuàng)建,我這里的目錄為/home/tools/
一臺(tái)服務(wù)器上搭建環(huán)境
如果多帶服務(wù)器組成集群舔腾,需在配置文件中更改溪胶,lnmp注意要點(diǎn):
各版本的兼容以及php所需依賴(lài)庫(kù)的下載,如果mysql在單獨(dú)的一臺(tái)服務(wù)器稳诚,雖然可以在編譯php的時(shí)候添加一條參數(shù)來(lái)獲取mysql的庫(kù)哗脖,但不建議。最好將mysql編譯進(jìn)行到make install完成扳还,無(wú)需初始化即可才避。
下面來(lái)進(jìn)行安裝~~~~~~開(kāi)始嘍!0本唷IJ拧!
部署腳本
if [ ! -d /home/tools ]
then
mkdir /home/tools -p
fi
cd /home/tools
PING=`ping -c 1 www.baidu.com |grep ttl=|wc -l`
if [ "$PING" -eq 0 ]
then
echo "Network does not work"
exit 1
fi
if [ -e /home/tools/pcre-8.30.tar.gz ]
then
tar xf pcre-8.30.tar.gz
else
echo "no file /home/tools/pcre-8.30.tar.gz"
fi
cd pcre-8.30 &&\
./configure
if [ $? -ne 0 ]
then
echo "pcre configure is false"
exit 1
fi
make && make install
if [ $? -ne 0 ]
then
echo "pcre make install is false"
exit 1
fi
cd ..
RPM=`rpm -qa|grep "openssl-"|wc -l`
if [ $RPM -ne 2 ]
then
yum -y install openssl openssl-devel
else
echo "yum install openssl openssl-devel is error"
exit 1
fi
cd /home/tools
if [ ! -e nginx-1.8.0.tar.gz ]
then
echo " nginx-1.8.0.tar.gz is false"
exit 1
fi
tar xf nginx-1.8.0.tar.gz
cd nginx-1.8.0
NGINXUSER=`cat /etc/passwd |grep nginx|wc -l`
if [ "$NGINXUSER" -eq 0 ]
then
useradd nginx -s /sbin/nologin -M
fi
./configure --user=nginx --group=nginx --prefix=/home/nginx-1.8.0 --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
if [ $? -eq 0 ]
then
make
else
echo "nginx configure is error"
exit 1
fi
if [ $? -eq 0 ]
then
make install
else
echo "nginx make is error"
exit 1
fi
if [ $? -ne 0 ]
then
echo "nginx make install is error"
exit 1
fi
cd ..
if [ -d /home/nginx-1.8.0/ ]
then
ln -s /home/nginx-1.8.0 /home/nginx
else
echo "no directory /home/nginx-1.8.0/"
exit 1
fi
if [ -f /etc/ld.so.conf ]
then
echo "/usr/local/lib/" >>/etc/ld.so.conf
else
echo "no file /etc/ld.so.conf"
exit 1
fi
if [ -d /lib64 ]
then
ln -s /usr/local/lib/libpcre.so.1 /lib64
else
echo "no directory /lib64"
exit 1
fi
/home/nginx/sbin/nginx -t
if [ $? -eq 0 ]
then
echo "nginx is ok"
else
echo "nginx is false"
exit 1
fi
/home/nginx/sbin/nginx
chown -R nginx.nginx /home/nginx/*
clear
echo "==================nginx install is all finish=================="
sleep 2
cd /home/tools
echo "=====================starting cmake install======================="
tar xf cmake-3.2.3.tar.gz
cd cmake-3.2.3
./configure
if [ $? -ne 0 ]
then
echo "cmake configure is error"
exit 1
fi
gmake
if [ $? -ne 0 ]
then
echo " cmake gmake is error"
exit 1
fi
gmake install
if [ $? -ne 0 ]
then
echo " cmake gmake install is error"
exit 1
fi
cd ../
PING=`ping -c 1 www.baidu.com |grep ttl=|wc -l`
if [ "$PING" -ne 1 ]
then
echo "Network does not work"
exit 1
fi
echo "=====================starting ncurses-devel install======================="
RPM=`rpm -qa |grep ncurses-devel |wc -l`
if [ $RPM -ne 1 ]
then
yum install ncurses-devel -y
fi
echo "=====================next is install mysql...======================="
cd /home/tools/
if [ -e /home/tools/mysql-5.6.25.tar.gz ]
then
tar zxf mysql-5.6.25.tar.gz
else
echo "no file /home/tools/mysql-5.6.25.tar.gz"
fi
NGINXUSER=`cat /etc/passwd |grep mysql|wc -l`
if [ "$NGINXUSER" -eq 0 ]
then
useradd mysql -s /sbin/nologin -M
fi
cd mysql-5.6.25
cmake . -DCMAKE_INSTALL_PREFIX=/home/mysql-5.6.25 \
-DMYSQL_DATADIR=/home/mysql-5.6.25/data \
-DMYSQL_UNIX_ADDR=/home/mysql-5.6.25/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0
if [ $? -ne 0 ]
then
echo "mysql cmake is error"
exit 1
fi
make
if [ $? -ne 0 ]
then
echo "mysql make is error"
exit 1
fi
make install
if [ $? -ne 0 ]
then
echo "mysql make install is error"
exit 1
fi
echo "=====================configuration mysql======================="
if [ -d /home/mysql-5.6.25 ]
then
ln -s /home/mysql-5.6.25/ /home/mysql
else
echo "no directory /home/mysql-5.6.25/"
exit 1
fi
cd /home/mysql
cp /home/tools/my.cnf /etc/my.cnf
chown -R mysql.mysql /home/mysql/
chown -R mysql.mysql /tmp
echo "=====================mysql is INIT======================="
/home/mysql/scripts/mysql_install_db --basedir=/home/mysql --datadir=/home/mysql/data --user=mysql
INIT=`/home/mysql/scripts/mysql_install_db --basedir=/home/mysql --datadir=/home/mysql/data --user=mysql|grep OK|wc -l`
if [ "$INIT" -eq 2 ]
then
echo "=====================mysql INIT is ok====================="
fi
if [ -f /home/mysql/support-files/mysql.server ]
then
cp /home/mysql/support-files/mysql.server /etc/init.d/mysqld
else
echo "no file /home/mysql/support-files/mysql.server"
fi
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start
echo 'PATH=/home/mysql/bin/:$PATH' >>/etc/profile
. /etc/profile
chkconfig mysqld on
mysqladmin -u root password '123456'
MYSQLLOGIN=`mysql -uroot -p123456 -e "select version();"|wc -l`
if [ $MYSQLLOGIN -ne 0 ]
then
echo "mysql is installed and mysql login is ok..."
else
echo "mysql don't login..."
fi
clear
echo "Pls input user@localhost and password login!!!!!"
sleep 1
clear
echo "==============other installation package=============="
cd /home/tools/
yum install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel libtool-ltdl-devel -y
yum install libxslt libxslt-devel -y
YUM=`rpm -qa zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel|wc -l`
if [ $YUM -lt 3 ]
then
echo "yum bag is error,bag is lack..."
exit 1
fi
if [ ! -e libiconv-1.14.tar.gz ]
then
echo "no gz libiconv-1.14.tar.gz"
exit 1
fi
tar zxf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
if [ $? -ne 0 ]
then
echo "libiconv-1.14 configure is error"
exit 1
fi
make&&make install
if [ $? -ne 0 ]
then
echo "libiconv-1.14 make&&make install is error"
exit 1
fi
cd ../
if [ ! -e libmcrypt-2.5.8.tar.gz ]
then
echo "no gz libmcrypt-2.5.8.tar.gz"
exit 1
fi
tar zxf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
if [ $? -ne 0 ]
then
echo "libmcrypt-2.5.8 configure is error"
exit 1
fi
make&&make install
if [ $? -ne 0 ]
then
echo "libmcrypt-2.5.8 make&&make install is error"
exit 1
fi
sleep 2
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
if [ $? -ne 0 ]
then
echo "libmcrypt-2.5.8/libltdl configure is error"
exit 1
fi
make&&make install
if [ $? -ne 0 ]
then
echo "libmcrypt-2.5.8/libltdl make&&make install is error"
exit 1
fi
cd ../../
if [ ! -e mhash-0.9.9.9.tar.gz ]
then
echo "no gz mhash-0.9.9.9.tar.gz"
exit 1
fi
tar zxf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
if [ $? -ne 0 ]
then
echo "mhash-0.9.9.9 configure is error"
exit 1
fi
make&&make install
if [ $? -ne 0 ]
then
echo "mhash-0.9.9.9 make&&make install is error"
exit 1
fi
sleep 2
cd ../
rm -f /usr/lib64/libmcrypt.*
rm -f /usr/lib64/libmhash*
ln -s /usr/local/lib64/libmcrypt.la /usr/lib64/libmcrypt.la
ln -s /usr/local/lib64/libmcrypt.so /usr/lib64/libmcrypt.so
ln -s /usr/local/lib64/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4
ln -s /usr/local/lib64/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8
ln -s /usr/local/lib64/libmhash.a /usr/lib64/libmhash.a
ln -s /usr/local/lib64/libmhash.la /usr/lib64/libmhash.la
ln -s /usr/local/lib64/libmhash.so /usr/lib64/libmhash.so
ln -s /usr/local/lib64/libmhash.so.2 /usr/lib64/libmhash.so.2
ln -s /usr/local/lib64/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
if [ ! -e mcrypt-2.6.8.tar.gz ]
then
echo "no gz mcrypt-2.6.8.tar.gz"
exit 1
fi
tar zxf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure LD_LIBRARY_PATH=/usr/local/lib
if [ $? -ne 0 ]
then
echo "mcrypt-2.6.8 configure is error"
exit 1
fi
make&&make install
if [ $? -ne 0 ]
then
echo "mcrypt-2.6.8 make&&make install is error"
exit 1
fi
cd ../
clear
echo "==============other installation package is ok=============="
sleep 2
echo "==================starting install php===================="
if [ ! -e php-5.6.11.tar.gz ]
then
echo "no gz php-5.6.11.tar.gz"
exit 1
fi
tar xf php-5.6.11.tar.gz
cd php-5.6.11
echo "/home/mysql-5.6.25/lib/" >>/etc/ld.so.conf
ldconfig
./configure \
--prefix=/home/php-5.6.11 \
--with-mysql=/home/mysql \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-ftp
if [ $? -ne 0 ]
then
echo "php-5.6.11.tar.gz configure is error"
exit 1
fi
make
if [ $? -eq 0 ]
then
make install
else
echo "make is error"
exit 1
fi
ln -s /home/php-5.6.11/ /home/php
cp php.ini-production /home/php/lib/php.ini
cd /home/php/etc/
cp /home/tools/php-fpm.conf ./
CONF=`ls php-fpm.conf|wc -l`
if [ $CONF -ne 1 ]
then
echo "no file /home/php/etc/php-fpm.conf"
exit 1
fi
clear
echo "=====================php install is ok========================"
sleep 1
/home/php/sbin/php-fpm
PHPSTART=`ss -luntp |grep php-fpm|wc -l`
if [ $PHPSTART -eq 0 ]
then
echo "php-fpm is stopped..."
fi
clear
echo "===========lnmp all install is ok============="
echo "==============!!!!happy!!!!================"
echo " * * * * "
echo " * * * * * * "
echo " ***** * * * * "
echo " * * * * * * "
echo " * * * * * "
echo "==============!!!!happy!!!!================"
上述是執(zhí)行的腳本衔蹲,如果需要分開(kāi)各個(gè)軟件包的操作,請(qǐng)參考:http://www.lmyw.net.cn/?p=883
各配置文件及參數(shù)解釋
nginx.conf配置
worker_processes 1; #啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等
#worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile 65535; #更改worker進(jìn)程的最大打開(kāi)文件數(shù)限制
user nginx; #指定用戶(hù)
events {
use epoll; #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能
worker_connections 10240; #單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)鏈接數(shù)
}
http {
include mime.types; #設(shè)定mime類(lèi)型,類(lèi)型由mime.type文件定義
default_type application/octet-stream;
#sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來(lái)輸出文件
#對(duì)于普通應(yīng)用,必須設(shè)為 on
#如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用舆驶,可設(shè)置為 off
#以平衡磁盤(pán)與網(wǎng)絡(luò)I/O處理速度橱健,降低系統(tǒng)的uptime
sendfile on;
tcp_nopush on;
keepalive_timeout 60; #連接超時(shí)時(shí)間
tcp_nodelay on;
client_header_timeout 15;
client_body_timeout 15;
send_timeout 15;
client_max_body_size 10m;
#設(shè)定日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server_tokens off;
#######gzip##############
gzip on; #開(kāi)啟gzip壓縮
gzip_min_length 1k; #當(dāng)返回內(nèi)容大于此值時(shí)才會(huì)使用gzip進(jìn)行壓縮,以K為單位,當(dāng)值為0時(shí),所有頁(yè)面都進(jìn)行壓縮
gzip_buffers 4 32k; #設(shè)置gzip申請(qǐng)內(nèi)存的大小,其作用是按塊大小的倍數(shù)申請(qǐng)內(nèi)存空間
gzip_http_version 1.1; #用于識(shí)別http協(xié)議的版本沙廉,早期的瀏覽器不支持gzip壓縮拘荡,用戶(hù)會(huì)看到亂碼,所以為了支持前期版本加了此選項(xiàng),目前此項(xiàng)基本可以忽略
gzip_comp_level 2; #設(shè)置gzip壓縮等級(jí)撬陵,等級(jí)越底壓縮速度越快文件壓縮比越小珊皿,反之速度越慢文件壓縮比越大
gzip_types text/html text/css text/xml application/javascript; #設(shè)置需要壓縮的MIME類(lèi)型,非設(shè)置值不進(jìn)行壓縮
gzip_vary off; #隱藏Vary頭信息
#########################
include web/*.conf; #配置了一個(gè)server標(biāo)簽存放目錄,方便管理
}
*.conf配置文件
server {
root /home/www/phpmyadmin;
listen 80;
server_name www.haoruijing.cn xxtao.admin.cn;
location / {
root /home/www/phpmyadmin;
index index.php index.html index.htm;
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#########expires###### 靜態(tài)資源控制頁(yè)面緩存時(shí)間
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 3650d;
}
location ~ .*\.(js|css)?$
{
expires 30d;
}
######################
access_log /home/log/admin_access.log main;
}
}
php-fpm.conf配置
pid = run/php-fpm.pid #pid設(shè)置巨税,默認(rèn)在安裝目錄中的var/run/php-fpm.pid蟋定,建議開(kāi)啟
error_log = /home/log/php-fpm.log #錯(cuò)誤日志,默認(rèn)在安裝目錄中的var/log/php-fpm.log
log_level = error #錯(cuò)誤級(jí)別. 可用級(jí)別為: alert(必須立即處理), error(錯(cuò)誤情況), warning(警告情況), notice(一般重要信息), debug(調(diào)試信息). 默認(rèn): notice.
rlimit_files = 32768
events.mechanism = epoll
listen.owner = nginx
listen.group = nginx
pm.max_children = 1024 #子進(jìn)程最大數(shù)
pm.start_servers = 16 #啟動(dòng)時(shí)的進(jìn)程數(shù)
pm.min_spare_servers = 5 #保證空閑進(jìn)程數(shù)最小值草添,如果空閑進(jìn)程小于此值驶兜,則創(chuàng)建新的子進(jìn)程
pm.max_spare_servers = 20 #保證空閑進(jìn)程數(shù)最大值,如果空閑進(jìn)程大于此值远寸,此進(jìn)行清理
pm.process_idle_timeout = 15s;
pm.max_requests = 2048 #設(shè)置每個(gè)子進(jìn)程重生之前服務(wù)的請(qǐng)求數(shù). 對(duì)于可能存在內(nèi)存泄漏的第三方模塊來(lái)說(shuō)是非常有用的. 如果設(shè)置為 '0' 則一直接受請(qǐng)求. 等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量. 默認(rèn)值: 0.
slowlog = /home/log/$pool.log.slow #慢請(qǐng)求的記錄日志,配合request_slowlog_timeout使用
request_slowlog_timeout = 10 #當(dāng)一個(gè)請(qǐng)求該設(shè)置的超時(shí)時(shí)間后抄淑,就會(huì)將對(duì)應(yīng)的PHP調(diào)用堆棧信息完整寫(xiě)入到慢日志中. 設(shè)置為 '0' 表示 'Off'
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f ***@163.com
總結(jié)
以上是對(duì)安裝及主要配置參數(shù)的簡(jiǎn)要說(shuō)明,如果想更深入的了解驰后,可以去詳細(xì)差下肆资,可以根據(jù)公司業(yè)務(wù)需求來(lái)設(shè)定參數(shù)