lnmp-2

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地址了,因此在添加这项设置到一个已有系统中必须格外小心。

转载于:https://www.cnblogs.com/skyzy/p/9201506.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值