zoukankan      html  css  js  c++  java
  • 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地址了,因此在添加这项设置到一个已有系统中必须格外小心。
  • 相关阅读:
    如何制作URL文件
    对象映射工具AutoMapper介绍
    C#高阶函数介绍
    System.Web.Caching.Cache
    系统架构设计:进程缓存和缓存服务,如何抉择?
    System.Web.Caching.Cache类 缓存 各种缓存依赖
    max server memory (MB)最大服务器内存配置--缓解内存压力
    第0节:.Net版基于WebSocket的聊天室样例
    第六节:Core SignalR中的重连机制和心跳监测机制详解
    第五节:SignalR完结篇之依赖注入和分布式部署
  • 原文地址:https://www.cnblogs.com/skyzy/p/9201506.html
Copyright © 2011-2022 走看看