欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于(linux + nginx + mysql + php)源码包安装及搭建

程序员文章站 2022-05-17 13:58:42
...

lnmp是什么?

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支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。

1. Mqsql源码包安装部署:

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如果不更改可以不写

基于(linux + nginx + mysql + php)源码包安装及搭建

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

基于(linux + nginx + mysql + php)源码包安装及搭建

yum install ncurses-devel bison -y
rm -f CMakeCache.txt #cmake运行时会先读缓存文件

基于(linux + nginx + mysql + php)源码包安装及搭建

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

基于(linux + nginx + mysql + php)源码包安装及搭建

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

基于(linux + nginx + mysql + php)源码包安装及搭建

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 #使更改生效

基于(linux + nginx + mysql + php)源码包安装及搭建

cd /usr/local/lnmp/mysql/
mysqld --initialize --user=mysql #初始化服务生成data文件

基于(linux + nginx + mysql + php)源码包安装及搭建

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

基于(linux + nginx + mysql + php)源码包安装及搭建

/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

基于(linux + nginx + mysql + php)源码包安装及搭建

php源码安装:

解压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

基于(linux + nginx + mysql + php)源码包安装及搭建

2.1>配置php:

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

基于(linux + nginx + mysql + php)源码包安装及搭建

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

基于(linux + nginx + mysql + php)源码包安装及搭建

3. 安装nginx源码包布署nginx

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

基于(linux + nginx + mysql + php)源码包安装及搭建

继续编译:
./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

基于(linux + nginx + mysql + php)源码包安装及搭建

useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin  nginx
cd
vim .bash_profile #添加脚本路径 
source .bash_profile #刷新更改
cd /usr/local/lnmp/nginx/conf/

基于(linux + nginx + mysql + php)源码包安装及搭建

2.1在nginx环境部署php

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

基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
在浏览器访问172.25.30.5为nginx—> /usr/local/lnmp/nginx/html/index.html
基于(linux + nginx + mysql + php)源码包安装及搭建
在浏览器访问172.25.30.5/index.php为编写的php界面如果想直接访问可以更改默认发布次序 index index.php index.html index.htm;
基于(linux + nginx + mysql + php)源码包安装及搭建

2.2. 论坛部署:

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

基于(linux + nginx + mysql + php)源码包安装及搭建
登陆安装论坛:
基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建

 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

基于(linux + nginx + mysql + php)源码包安装及搭建

再次登陆会告诉我们权限不够那我们就给一个777的权限:
cd /usr/local/lnmp/mysql
chown mysql. data -R
ll

基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
此时就可以访问我们登陆之后可以删除rm -rf bbs/index.php

4.1 php添加memcache服务加速

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 

基于(linux + nginx + mysql + php)源码包安装及搭建

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

基于(linux + nginx + mysql + php)源码包安装及搭建
给php添加缓存模块配置文件:
基于(linux + nginx + mysql + php)源码包安装及搭建
客户端访问example.php不断刷新会发现命中缓存越高:
基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
我们不能把页面暴露在外面因此与要加密:
vim example.php
基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
看看加入缓存之后有没有起到加速的作用:
客户端测试:
基于(linux + nginx + mysql + php)源码包安装及搭建

4.2 Nginx 添加缓存

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 .

基于(linux + nginx + mysql + php)源码包安装及搭建
nginx.conf详情参数:

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;
        }

基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
基于(linux + nginx + mysql + php)源码包安装及搭建
访问nginx页面:
基于(linux + nginx + mysql + php)源码包安装及搭建
让我们来看看给nginx加了缓存有没有起到加速的效果:
基于(linux + nginx + mysql + php)源码包安装及搭建