LNMP指的是一个基于CentOS/Debian编写的Nginx、PHP、MySQL、phpMyAdmin、eAccelerator一键安装包。可以在VPS、独立主机上轻松的安装LNMP生产环境。
简介:
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多。
作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
tar zxf mysql-boost-5.7.17.tar.gz #解压mysql
rpm -ivh cmake-2.8.12.2-4.el6.x86_64.rpm #cmake 有依赖包
yum install libarchive.so.2 -y
yum install cmake-2.8.12.2-4.el6.x86_64.rpm
yum install -y gcc gcc-c++ ncurses-devel bison#gcc-c++编译cmake
cd mysql-5.7.17/
rm -f CMakeCache.txt #cmake运行时会先读缓存文件
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql #安装目录
tar zxf mysql-boost-5.7.17.tar.gz #解压mysql
rpm -ivh cmake-2.8.12.2-4.el6.x86_64.rpm #cmake 有依赖包
yum install libarchive.so.2 -y
yum install cmake-2.8.12.2-4.el6.x86_64.rpm
yum install -y gcc gcc-c++ #gcc-c++编译cmake
cd mysql-5.7.17/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql #安装目录
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data #存放数据默认路径在
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DDEFAULT_CHARSET=utf8 #字符和校验字符必须保持一致
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
默认端口3306如果不更改可以不写
DCMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
WITH_COMMENT:指定编译备注信息
WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
SYSCONFDIR:初始化参数文件目录
MYSQL_DATADIR:数据文件目录
MYSQL_TCP_PORT:服务端口号,默认3306
MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
yum install ncurses-devel bison -y
rm -f CMakeCache.txt #cmake运行时会先读缓存文件
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql #安装目录
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data #存放数据默认路径在
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DDEFAULT_CHARSET=utf8 #字符和校验字符必须保持一致
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
make
make install
cd /usr/local/
df -h #mysql大概占用了9G的内存
cd /usr/local/lnmp/mysql/
ls
rpm -qa|grep mysql #查看系统的mysql安装包不能卸载因为他的卸载存在一定的依赖性会
对系统的其他服务产生影响
cd support-files/
ls #/usr/local/lnmp/mysql/support-files目录下有mysql的默认配置文件脚本my-default.cnf
pwd #/usr/local/lnmp/mysql/support-files
vim my-default.cnf #查看脚本文件覆盖系统中mysql的配置文件
cp my-default.cnf /etc/my.cnf
vim /etc/my.cnf
basedir = /usr/local/lnmp/mysql
datadir = /usr/local/lnmp/mysql/data
port = 3306
socket = /usr/local/lnmp/mysql/data/mysql.sock
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
file mysql.server #查看mysql.server文件类型
mysql.server: POSIX shell script text executable
vim mysql.server #查看文件中的mysql路径
cp mysql.server /etc/init.d/mysqld #将其复制到/etc/init.d/下方便用脚本启动服务
ll /etc/init.d/mysqld #权限为root
切换到/usr/local/lnmp/mysql/
groupadd -g 27 mysql #建立mysql用户
useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
chown -R mysql.mysql . #修改/usr/local/lnmp/mysql/目录下的权限
ll
cd
vim .bash_profile #脚本路径---->PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
source .bash_profile #使更改生效
cd /usr/local/lnmp/mysql/
mysqld --initialize --user=mysql #初始化服务生成data文件
vim /etc/init.d/mysqld 查看脚本文件
/etc/init.d/mysqld start #开启mysqld服务如果成功则证明没有问题但是不够安全mysql用户的权限太大我们只需要给mysql用户使用data的权限
chgrp root . -R #修改/usr/local/lnmp/mysql/下文件的组
chown root . -R #修改/usr/local/lnmp/mysql/下文件的owner
chown mysql data/ -R
ll
/etc/init.d/mysqld start
mysql_secure_installation #安装加密安全认证修改用户密码初始密码在初始化过程中产
生可以复制下来然后修改mysql密码
Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: N #不需要密码安全检测该检测会检测设置的密码强度如果低于8位不能通过
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) :#要修改之前设置的密码么
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
/etc/init.d/mysqld start
mysql -p #登陆mysql
解压php压缩包:
1 tar jxf php-5.6.35.tar.bz2
2 cd php-5.6.35
#添加功能模块进行编译
3 ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-pear --with-gettext --with-gmp --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mhash
4 cd
# 安装功能模块需要的包
5 yum install libxml2-devel openssl-devel curl-devel gd-devel-2.0.35-11.el6.x86_64.rpm re2c-0.13.5-1.el6.x86_64.rpm gmp-devel libmcrypt-devel-2.5.8-9.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm net-snmp-devel -y
# 需要的安装包:
gd-devel-2.0.35-11.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm php-5.6.35.tar.bz2 libmcrypt-devel-2.5.8-9.el6.x86_64.rpm re2c-0.13.5-1.el6.x86_64.rpm
编译安装:
6 cd php-5.6.35
7 ./configure --prefix=/usr/local/lnmp/php \
--with-config-file-path=/usr/local/lnmp/php/etc \
--with-mysql=mysqlnd --enable-mysqlnd \
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl \
--with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir \
--with-png-dir --with-jpeg-dir \
--with-freetype-dir --with-pear --with-gettext --with-gmp
8 make && make install
cd /usr/local/lnmp/php/etc/
cp php-fpm.conf.default php-fpm.conf
cd /root/php-5.6.35
cp /root/php-5.6.35/php.ini-production /usr/local/lnmp/php/etc/php.ini
vim php.ini #修改时区
vim php-fpm.conf #pid = run/php-fpm.pid 去掉注释因为默认值时none
useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
cd /root/php-5.6.35/sapi/fpm/
cp init.d.php-fpm /etc/init.d/php-fpm #在源码包复制启动脚本
chmod +x /etc/init.d/php-fpm #脚本添加可执行权限
/etc/init.d/php-fpm start #启动服务
netstat -antlp #查看监听端口9000
tar zxf nginx-sticky-module-ng.tar.gz #解压nginx源码包
tar zxf nginx-1.10.1.tar.gz #解压nginx算法包
vim /nginx-1.10.1/src/core/nginx.h #取消版本显示
vim auto/cc/gcc #取消debug编译
cd nginx-1.10.1
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads --with-file-aio #报错需要一个pcre-devel包出什么错我们解决什么错
yum install -y pcre-devel
继续编译:
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads --with-file-aio
make && make install
vim nginx.conf #worker_connections 65535
vim /etc/security/limits.conf #修改系统参数
# End of file
nginx - nofile 65536
sysctl -a | grep file #查看内核参数
fs.file-nr = 480 0 291272
fs.file-max = 291272
useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
cd
vim .bash_profile #添加脚本路径
source .bash_profile #刷新更改
cd /usr/local/lnmp/nginx/conf/
vim nginx.conf #修改nginx配置文件使nginx环境支持php
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
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.conf;
fastcgi.conf这个文件中默认有该脚本路径
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
我们也可以指定:astcgi_param $ SCRIPT_FILENAME /scripts/usr/local/lnmp/nginx/html/$fastcgi_script_name;}
ln -s /usr/local/lnmp/nginx/sbin/nginx /sbin/nginx #建立软链接
vim /usr/local/lnmp/nginx/html/index.php #编写php文件在nginx发布家目录
nginx -s reload #重新加载nginx
在浏览器访问172.25.30.5为nginx—> /usr/local/lnmp/nginx/html/index.html
在浏览器访问172.25.30.5/index.php为编写的php界面如果想直接访问可以更改默认发布次序 index index.php index.html index.htm;
yum install -y unzip
unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/
cd /usr/local/lnmp/nginx/html/#该目录下生成了upload目录upload中有data文件我们想要对他进行操作并将data和之前的mysql结合起来因此我们需要给mysql用户操作upload中一些目录可操作的权力:
mv upload bbs
chmod 777 config/ data/ uc_server/ uc_client/ -R
/etc/init.d/mysqld start
此时我们可以登陆我们的数路库:会发现我们找不到路径:因此我们得在php动态配置文件中告诉他们mysql路径
cd /usr/local/lnmp/php/etc/
vim php.ini
/etc/init.d/php-fpm reload
再次登陆会告诉我们权限不够那我们就给一个777的权限:
cd /usr/local/lnmp/mysql
chown mysql. data -R
ll
此时就可以访问我们登陆之后可以删除rm -rf bbs/index.php
MEMCACHE:
MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。
Memcache面向对象的常用接口包括:
Memcache::connect -- 打开一个到Memcache的连接
Memcache::pconnect -- 打开一个到Memcache的长连接
Memcache::close -- 关闭一个Memcache的连接
Memcache::set -- 保存数据到Memcache服务器上
Memcache::get --提取一个保存在Memcache服务器上的数据
Memcache::replace --替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::delete -- 从Memcache服务器上删除一个保存的项目
Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats -- 获取当前Memcache服务器运行的状态
PHP数据缓存
PHP的数据缓存包括针对数据库数据进行缓存和针对PHP模板数据进行缓存。针对数据库数据进行缓存的工具有memcache等。针对PHP模板数据进行缓存的工具主要有smarty等。
给php添加memcache缓存
tar zxf memcache-2.2.5.tgz
cd /usr/local/lnmp/php/bin/
vim .bash_profile
source .bash_profile #添加php脚本运行环境
cd memcache-2.2.5
phpize #监控
./configure #直接生成/usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/memcache.so
make
make install
cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
ls
yum install -y memcached
php -m | grep memcache
cd /usr/local/lnmp/php/etc
vim php.ini
extension = memcache.so
/etc/init.d/php-fpm restart
php -m | grep memcache
/etc/init.d/memcached start
netstat -antlp | grep :11211
cd memcache-2.2.5
cp memcache.php example.php /usr/local/lnmp/nginx/html/
rpm -q memcached
cd /usr/local/lnmp/nginx/html/
ls
vim example.php
/etc/init.d/php-fpm start
给php添加缓存模块配置文件:
客户端访问example.php不断刷新会发现命中缓存越高:
我们不能把页面暴露在外面因此与要加密:
vim example.php
看看加入缓存之后有没有起到加速的作用:
客户端测试:
OpenResty运行原理:
Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在woker 中,master 负责一些全局初始化,以及对 worker 的管理。在OpenResty中,每个 woker 使用一个LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine(协程)。协程之间数据隔离,每个协程具有独立的全局变量_G。ps. 协程和多线程下的线程类似:有自己的堆栈,自己的局部变量,有自己的指令指针,但是和其他协程程序共享
全局变量等信息。线程和协程的主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过代码来完成协程的切换,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起
时才会被挂起。
安装openstry
tar zxf openresty-1.13.6.1.tar.gz
nginx -s stop #我们可以安装一个新的nginx给nginx添加缓存;也可以用之前安装的nginx给其添加缓存安装过程和之前一样
cd openresty-1.13.6.1
./configure --prefix=/usr/local/lnmp/openresty --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads --with-file-aio
make
make install
配置nginx:
cd /usr/local/lnmp/openresty/nginx/conf/
vim nginx.conf
/usr/local/lnmp/openresty/nginx/sbin/nginx -t
/usr/local/lnmp/openresty/nginx/sbin/nginx
cd /usr/local/lnmp/openresty/nginx/html/
cp /usr/local/lnmp/nginx/html/example.php .
events {
worker_connections 65535;
}
模块一:访问本机的11211端口即memcache端口:
http {
upstream memcache {
server localhost:11211;
keepalive 512 ;
}
include mime.types;
default_type application/octet-stream;
模块二:访问地址/memc中定义
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /memc {
internal;
memc_connect_timeout 100ms;
memc_send_timeout 100ms;
memc_read_timeout 100ms;
set $memc_key $query_string;
set $memc_exptime 300;
memc_pass memcache;
}
模块三: fastcgi通过9000在memc中存取
location ~ \.php$ {
set $key $uri$args;
srcache_fetch GET /memc $key;
srcache_store PUT /memc $key;
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}