lnmp
linux+nginx+mysql+php
mysql-5.6.26.tar.gz
php-5.6.12.tar.bz2
nginx-1.8.0.tar.gz (最新版本nginx-1.9.15)
第一步:編譯安裝mysql
<1>依賴軟件包安裝:
yum install -y curl-devel ncurses-devel net-snmp-* *icu* libxml2-devel pcre-devel
yum groupinstall "Desktop Platform Development" -y
yum groupinstall "Development tools" -y
<2>安裝mysql:
tar xf mysql-5.6.26.tar.gz -C /usr/src
cd /usr/src/mysql-5.6.26
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=gbk,gb2312 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1
make
make install
<3>建立配置文件my.cnf
mkdir /usr/local/mysql/etc
vim /usr/local/mysql/etc/my.cnf
[mysqld]
port=3306
datadir=/mysqldata
pid-file=/mysqldata/mysql.pid
socket=/mysqldata/mysql.socket
log-error=/mysqldata/mysql-err.log
user=mysql
[client]
socket=/mysqldata/mysql.socket
建立相關目錄:
useradd -r mysql
mkdir /mysqldata
chown mysql.mysql /mysqldata /usr/local/mysql/ -R
<3>初始化數據庫
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/etc/my.cnf --basedir=/usr/local/mysql/
-------------------------------------------------------------------------------------
第二步:編譯安裝php
<1>先安裝php擴展包
mkdir /usr/src/lnmp
libiconv ---語言編碼轉換
tar xf libiconv-1.13.tar.gz -C /usr/src/lnmp/
cd /usr/src/lnmp/libiconv-1.13
./configure
make
make install
echo /usr/local/lib >> /etc/ld.so.conf.d/lnmp.conf
/sbin/ldconfig
<2>安裝php
tar xf php-5.6.12.tar.bz2 -C /usr/src/lnmp/
./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local --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 --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-mysqlnd --with-pcre-dir --enable-opcache
make ZEND_EXTRA_LIBS='-liconv'
make install
<3>安裝php第三方模塊
緩存模塊memcache
tar xf memcache-2.2.7.tgz -C /usr/src/lnmp/
cd /usr/src/lnmp/memcache-2.2.7
#用phpize生成編譯的configure文件
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
#注意安裝信息
echo /usr/src/lnmp/memcache-2.2.7/modules/ >> /etc/ld.so.conf.d/lnmp.conf
/sbin/ldconfig
繪圖引擎模塊Imagemagick
tar xf ImageMagick-6.7.8-9.tar.gz -C /usr/src/lnmp/
cd /usr/src/lnmp/ImageMagick-6.7.8-9/
./configure
make
make install
/sbin/ldconfig
安裝imagick(鏈接php與imagemagick的通道)
tar xf imagick-3.1.2.tgz -C /usr/src/lnmp/
cd /usr/src/lnmp/imagick-3.1.2/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
echo /usr/src/lnmp/imagick-3.1.2/modules >> /etc/ld.so.conf.d/lnmp.conf
/sbin/ldconfig
確認三個模塊已安裝:
ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
imagick.so memcache.so opcache.so opcache.a
<4>修改php配置文件
cp /usr/src/lnmp/php-5.6.12/php.ini-production /usr/local/php/etc/php.ini
#配置php.ini文件加上前面安裝的擴展的模塊支持
vim /usr/local/php/etc/php.ini
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"
extension = "memcache.so"
extension = "imagick.so"
[opcache]
zend_extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/opcache.so"
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.optimization_level=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.save_comments=0
參數說明:
opcache.memory_consumption=128 ---共享內存大小, 這個根據大家的需求可調
opcache.interned_strings_buffer=8 ---interned string的內存大小, 也可調
opcache.max_accelerated_files=4000 ---最大緩存的文件數目
opcache.revalidate_freq=60 ---60s檢查一次文件更新
opcache.fast_shutdown=1 ---打開快速關閉, 打開這個在PHP RequestShutdown的時候回收內存的速度會提升
opcache.save_comments=0 ---不保存文件或函數的註釋
------------------------------------------------------------------------------------
第三步:編譯安裝nginx
useradd -r -d /dev/null -s /sbin/nologin nginx
tar xf nginx-1.8.0.tar.gz -C /usr/src/lnmp/
cd /usr/src/lnmp/nginx-1.8.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module
make
make install
-------------------------------------------------------------------------
第四步:配置優化php的fastcgi配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
164 listen = /var/run/fastcgi/fastcgi.socket
534 php_flag[display_errors] = on
149 user = nginx
150 group = nginx
235 pm.max_children = 64
240 pm.start_servers = 20
245 pm.min_spare_servers = 5
250 pm.max_spare_servers = 35
261 pm.max_requests = 3000
458 rlimit_files = 65535
175 listen.owner = nginx
176 listen.group = nginx
177 listen.mode = 0660
參數說明:
pm = dynamic #對於專用服務器,pm能夠設置爲static。
如何控制子進程,選項有static和dynamic。若是選擇static,則由pm.max_children指定固定的子進程數。
若是選擇dynamic,則由下開參數決定:
pm.max_children #子進程最大數
pm.start_servers #啓動時的進程數
pm.min_spare_servers #保證空閒進程數最小值,若是空閒進程小於此值,則建立新的子進程
pm.max_spare_servers #保證空閒進程數最大值,若是空閒進程大於此值,此進行清理
mkdir /var/run/fastcgi
chown nginx.nginx /var/run/fastcgi/
啓動php fastcgi進程
/usr/local/php/sbin/php-fpm -D -y /usr/local/php/etc/php-fpm.conf
-----------------------------------------------------------------------------------------
第五步:配置nginx.conf主配置文件
user nginx nginx; ---運行用戶和組
worker_processes 1; ---啓動ngnix的服務的工做進程
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info; ---錯誤日誌以及日誌等級
pid logs/nginx.pid; ---pid文件
events {
use epoll; ---epoll工做模式
worker_connections 1024; ---每一個進程容許打開的併發鏈接數
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on; ---壓縮
server {
listen 80 default_server; ---監聽的端口
server_name 192.168.1.113; ---server域名或者IP
charset utf8; ---字符集
#access_log logs/host.access.log main;
root /lnmp/web; ---家目錄
index index.php index.html index.htm; ---主頁文件
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.1.112;
allow 192.168.1.0/24;
deny all;
}
#location / {
# root html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass unix:/var/run/fastcgi/fastcgi.socket; ---對應php-fpm.conf裏的配置
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 把/scripts改爲$document_root,表示家目錄下的.php文件也當會以php來執行
include fastcgi_params;
}
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
建立網站家目錄
mkdir /lnmp/web -p
將系統的文件描述符限制臨時調大
ulimit -SHn 65535
啓動nginx:
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx/sbin/nginx -s stop
第六步:驗證
建立主頁或php測試頁
vim /lnmp/web/test.php
<?php
phpinfo();
?>
瀏覽器訪問:http://192.168.1.113:80/test.php
--------------------------------------------------------------------------------
安裝memcache
開源分佈式的內存對象緩存系統;通常放在web程序與數據庫,幫助緩存程序取數據庫的數據。
tar xf libevent-1.4.11-stable.tar.gz -C /usr/src/lnmp
cd /usr/src/lnmp/libevent-1.4.11-stable/
./configure
make
make install
tar xf memcached-1.4.22.tar.gz -C /usr/src/lnmp
cd /usr/src/lnmp/memcached-1.4.22/
./configure --with-libevent=/usr/local/
make
make install
/usr/local/bin/memcached -d -m 100 -u root
啓動memcached守護進程,-d表示啓動daemon,-m 100表示分配100MB內存給memcached作緩存,-u root指定以root用戶來跑這個daemon
lsof -i:11211
測試:
vim /lnmp/web/memcachetest.php
<?php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
$mem->set('key', 'This is a memcache test!', 0, 60);
$val = $mem->get('key');
echo $val;
?>
測試memcache
(開memcache顯示,關閉memcache不能顯示)
vim /usr/local/php/etc/php.ini
;extension = "memcache.so" --前面加;符號註釋來模擬關閉
再將php的fastcgi重啓,使之生效
pkill fpm
/usr/local/php/sbin/php-fpm -D -y /usr/local/php/etc/php-fpm.conf
再訪問
---------------------------------------------------------------------
安裝redis
redis-3.0.7.tar.gz
(1)讓php支持redis擴展
tar xf phpredis-2.2.7.tar.gz -C /usr/src/lnmp/
cd /usr/src/lnmp/phpredis-2.2.7/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
(2)安裝redis主程序包
tar xf redis-3.0.7.tar.gz -C /usr/src/lnmp/
cd /usr/src/lnmp/redis-3.0.7/
make
make install
cp /usr/src/lnmp/redis-3.0.7/redis.conf /etc/
vim /etc/redis.conf
daemonize yes --改成yes,表示運行成daemon模式
redis-server /etc/redis.conf ----啓動redis
lsof -i:6379
--------------------------------------------------------------------------------
安裝Discuz論壇
Discuz_X3.2_SC_UTF8.zip
安裝軟件:
unzip Discuz_X3.2_SC_UTF8.zip -d /lnmp/web/
cd /lnmp/web
mv upload/* .
rm upload/ -rf
chown nginx.nginx /lnmp/web/ -R
數據庫受權:
mysql> create database discuz;
mysql> grant all on discuz.* to 'discuzuser'@'localhost' identified by'123';
安裝會出現下面的報錯:數據庫鏈接錯誤 No such file or directory
解決方法:
<1>socket=/tmp/mysql.sock
<2>ln -s /mysqldata/mysql.socket /tmp/mysql.sock
<3>在安裝界面填mysql的host爲127.0.0.1:3307指定以tcp/ip協議的3306端口來鏈接
支持memcache/redis:
vim /lnmp/web/config/config_global.php
$_config['memory']['memcache']['server'] = '127.0.0.1';
$_config['memory']['redis']['server'] = '127.0.0.1';
----------------------------------------------------------------------------
###########################################################################
----------------------------------------------------------------------------
mysql的優化:
基本配置
(1) innodb_buffer_pool_size
這是你安裝完InnoDB後第一個應該設置的選項。
緩衝池是數據和索引緩存的地方:這個值越大越好,這能保證你在大多數的讀取操做時使用的是內存而不是硬盤。
典型的值是5-6GB(8GB內存),20-25GB(32GB內存),100-120GB(128GB內存)。
(2) innodb_log_file_size:
redo日誌的大小;redo日誌被用於確保寫操做快速而可靠而且在崩潰時恢復。
爲了在服務器崩潰時保證數據安全並提高系統性能,innodb存儲引擎首先會將提交的事物內容記錄到redo日誌,
而對實際數據文件修改則放在之後,批處理方式刷盤。redo日誌像邏輯的存儲場所,它循環使用多個文件。
redo日誌的總尺寸被限定在4GB(默承認以有2個log文件)
(3)max_connections
默認的151鏈接數
若有看到‘Too many connections'錯誤,是由於max_connections的值過低了(由於應用程序沒有正確的關閉數據庫鏈接)
InnoDB配置
(4)innodb_file_per_table
這項設置告知InnoDB是否須要將全部表的數據和索引存放在共享表空間裏(innodb_file_per_table = OFF)
或者爲每張表的數據單獨放在一個.ibd文件(innodb_file_per_table = ON)。
MySQL 5.6中,這個屬性默認值是ON,所以大部分狀況下什麼都不須要作
(5)innodb_flush_log_at_trx_commit
默認值爲1,表示InnoDB徹底支持ACID特性。
當你的主要關注點是數據安全的時候這個值是最合適的,好比在一個主節點上。
可是對於磁盤(讀寫)速度較慢的系統,它會帶來很巨大的開銷,由於每次將改變flush到redo日誌都須要額外的fsyncs。
將它的值設置爲2會致使不太可靠(reliable)由於提交的事務僅僅每秒才flush一次到redo日誌,
但對於一些場景是能夠接受的,好比對於主節點的備份節點這個值是能夠接受的。
若是值爲0速度就更快了,但在系統崩潰時可能丟失一些數據:只適用於備份節點。
(6)innodb_flush_method
這項配置決定了數據和日誌寫入硬盤的方式。
通常來講,若是你有硬件RAID控制器,而且其獨立緩存採用write-back機制,並有着電池斷電保護,那麼應該設置配置爲O_DIRECT;
不然,大多數狀況下應將其設爲fdatasync(默認值)。
sysbench是一個能夠幫助你決定這個選項的好工具。
(7)innodb_log_buffer_size
這項配置決定了爲還沒有執行的事務分配的緩存。
其默認值(1MB)通常來講已經夠用了,
可是若是你的事務中包含有二進制大對象或者大文本字段的話,這點緩存很快就會被填滿並觸發額外的I/O操做。
看看Innodb_log_waits狀態變量,若是它不是0,增長innodb_log_buffer_size。
其餘設置
(8)query_cache_size
查詢緩存;query_cache_size = 0(如今MySQL 5.6的默認值)
能夠利用其餘方法加速查詢:優化索引、增長拷貝分散負載或者啓用額外的緩存(好比memcache或redis)
(9)log_bin
數據庫服務器充當主節點的備份節點,那麼開啓二進制日誌是必須的;
想作基於時間點的數據恢復,這(開啓二進制日誌)也是頗有用的;
從最近的備份中恢復(全量備份),並應用二進制日誌中的修改(增量備份)
能夠用 PURGE BINARY LOGS 來清除舊文件,或者設置 expire_logs_days 來指定過多少天日誌將被自動清除。
(10)skip_name_resolve
當客戶端鏈接數據庫服務器時,服務器會進行主機名解析,而且當DNS很慢時,創建鏈接也會很慢。
所以建議在啓動服務器時關閉skip_name_resolve選項而不進行DNS查找。
惟一的侷限是以後GRANT語句中只能使用IP地址了,所以在添加這項設置到一個已有系統中必須格外當心。