在互联网服务器架构中,我们经常可以听到LAMP(Linux+Apache+Mysql+PHP/Perl+Python)的架构,用来指代Linux操作系统、Apache网络服务器、Mysql数据库和PHP(Python或Perl)脚本语言的组合。现
在由于Nginx拥有超越Apache的卓越性能,传统LAMP架构正在逐渐被LNMP架构所取代。因此以下介绍
Linux+Nginux+MariaDB+PHP架构的基于不同主机间的编译安装。
操作环境:
Linux操作系统: Centos6.6-2.6.32-504.el6.x86_64
Nginx :Nginx-1.6.2 主机IP地址为:192.16.1.3
MariaDB:mariadb-10.0.12 主机IP地址为:192.168.1.4
PHP:php-5.4.26 主机IP地址为:192.168.1.5
为了后面的编译,我在每个每台主机上都安装了以下的编译环境,后面有其他需要的在编译中再安装
12 | yum -y groupinstall "Development Tools" yum -y groupinstall "Server Platform Development" |
由于在不同的主机上编译安装,因此安装的顺序没有先后之分。
一.编译安装MariaDB
准备MariaDB源码包,可以去其官方网站www.mariadb.org 下载
wget http://mirrors.neusoft.edu.cn/mariadb/mariadb-10.1.2/source/mariadb-10.1.2.tar.gz
此处是alpha版,不建议在生产环境中使用
12 | [root@client1 data] # tar xf mariadb-10.0.12.tar.gz [root@client1 data] # cd mariadb-10.0.12 |
由于mariab是cmake编译安装,因此需要安装cmake工具,此处直接yum 安装
yum -y install cmake
安装完成后,即可编译安装mariab了,如下:
首先创建mysql用户和要安装的目录,并改属主和属组为mysql
useradd -M -s /sbin/nologin mysql mkdir -p /application/mariadb chown -R mysql:mysql /application/ |
cmake . -DCMAKE_INSTALL_PREFIX= /application/mariadb \ #MariaDB安装目录 -DMYSQL_UNIX_ADDR= /application/mariadb/tmp/mysql .sock \ #MariaDBsock文件目录 -DMYSQL_DATADIR= /application/mariadb/data \ #MariaDB数据保存目录 -DSYSCONFDIR= /etc \ #配置文件目录 -DMYSQL_USER=mysql \ #指定用户为mysql用户 -DMYSQL_TCP_PORT=3306 \ #指定端口为3306 -DWITH_XTRADB_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ #指定各个引擎 -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EXTRA_CHARSETS=1 \ -DDEFAULT_CHARSET=utf8 \ #指定字符集 -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=all \ -DWITH_BIG_TABLES=1 \ -DWITH_DEBUG=0 make make install |
创建配置文件和启动脚本,并加入开机启动
cd /application/mariadb cp support-files /my-small .cnf /etc/my .conf #可根据自己主机的内存选择my-large.cnf或 my-medium.cnf等 cp support-files /mysql .server /etc/init .d /mysqld chmod +x /etc/init .d /mysqld chkconfig --add mysqld chkconfig mysqld on |
初始化mysql
/application/mariadb/scripts/mysql_install_db --user=mysql --basedir= /application/mariadb --datadir= /application/mariadb/data |
手动添加启动命令路径至/etc/profile
echo "export PATH=/application/mariadb/bin:$PATH" >> /etc/profile #追加至/etc/profile source /etc/profile #重写读取/etc/profile |
至此MariaDB就编译安装完成了
二.编译安装PHP(Fastcgi模式)
准备PHP源码包 php我是去搜狐镜像上下载的,地址为:http://mirror.sohu.com
开始编译安装:
. /configure \ --prefix= /application/php/ \ #指定php安装的目录 --with-mysql=mysqlnd \ #此项指定mysqlnd十分重要,由于mysql没有安装在此主机上 mysqlnd表示支持链接mysql。 --with-pdo-mysql=mysqlnd \ #同上 --with-mysqli=mysqlnd \ --with-openssl \ #支持ssl功能 -- enable -mbstring \ #启动多字节字符串支持 --with-freetype- dir \ #指定free type --with-jpeg- dir \ #支持jpeg图片格式 --with-png- dir \ #支持png图片格式 --with-zlib \ #支持zlib压缩传输 --with-libxml- dir = /usr \ #指定libxml2的目录 -- enable -xml \ #支持xml扩展 -- enable -sockets \ #支持套接字 --with-mcrypt \ #支持mcrypt --with-config- file -path= /application/php/etc \ #配置文件的路径 --with-config- file -scan- dir = /application/php/php .d \ #支持扩展的模块的配置文件目录,php 去此目录下扫描 --with-bz2 \ #支持bzip2压缩 -- enable -fpm #此项十分重要,在不同的主机上安装mysql,nginx需开启,否 则无法支持Fastcgi,各主机无法通信 make make install |
安装完成后,为php提供配置文件
[root@client2 php-5.4.26]# cp php.ini-production /application/php/etc/php.ini
为php提供sys启动控制脚本,并加入开机启动
[root@client2 php-5.4.26] # cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@client2 php-5.4.26] # chmod +x /etc/init.d/php-fpm [root@client2 php-5.4.26] # chkconfig --add php-fpm [root@client2 php-5.4.26] # chkconfig php-fpm on [root@client2 php-5.4.26] # chkconfig --list php-fpm #查看php-fpm php-fpm 0:off1:off2:on3:on4:on5:on6:off |
为php-fpm提供配置文件php-fpm.conf,编译配置文件,修改监听端口为php主机IP地址
[root@client2 php] # cd /application/php/etc/ #切换至php安装目录下的配置文件目录/etc [root@client2 etc] # ls #查看当前目录下的文件内容 pear.conf php-fpm.conf.default php.ini [root@client2 etc] # mv php-fpm.conf.default php-fpm.conf #将 php-fpm.conf.default重命名 为php-fpm.conf作为php-fpm的配置文件 listen = 192.168.1.5:9000 #默认为127.0.0.1 |
启动php-fpm并且查看其信息
[root@client2 etc] # service php-fpm start Starting php-fpm done #如果没有done信息,可以查看/var/log/message日志文件 查看其错误信息 [root@client2 etc] # ss -lnt |grep 9000 LISTEN 0 128 192.168.1.5:9000 *:* |
至此PHP编译安装完成了,接下来我们编译Nginx
三.编译安装Nginx
首先准备源码包:
wget http: //mirrors .sohu.com /nginx/nginx-1 .6.2. tar .gz useradd -M -s /sbin/nologin nginx #创建一个nginx用户,以nginx用户的身份运行 worker process进程 mkdir -p /application/nginx # 创建nginx安装目录 |
开始编译
tar xf nginx-1.6.2. tar .gz cd nginx-1.6.2 . /configure \ --prefix= /application/nginx \ #指定安装目录 --user=nginx \ #在nginx.conf中没有指定user指定情况下使用nginx用户 默认为nobody --group=nginx \ --with-http_ssl_module \ #启用ssl模块 --with-http_flv_module \ #启用flv模块 --with-http_gzip_static_module \ #启用 gzip模块 --with-http_stub_status_module #启用stub模块 make make install |
安装完成后,启动nginx并且查看其信息
cd /application/nginx/ /application/nginx/sbin/nginx #启动nginx后不需要任何参数 [root@bogon nginx] # ss -lnt |grep 80 LISTEN 0 128 *:80 *:* [root@bogon nginx] # ps -ef |grep nginx root 36742 1 0 Dec27 ? 00:00:00 nginx: master process .. /sbin/nginx nginx 36743 36742 0 Dec27 ? 00:00:01 nginx: worker process |
此时在打开网页输入192.168.1.3 即可看到welcom to nginx的信息,表明nginx已经启动成功,下面
介绍如何将nginx与php以fastcgi方式结合起来,配置nginx.conf文件
[root@bogon conf] # cat nginx.conf user nginx nginx; #以nginx用户身份运行worker process进程 worker_processes 3; #启动3个worker进程 error_log logs /error .log; #错误日志保存位置 pid logs /nginx .pid; worker_rlimit_nofile 51200; #用于指明一个worker进程所能打开的最大文件数 events { use epoll; worker_connections 51200; } http { server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; <---------设置fastcgi相关参数---------> fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; <-------设置压缩相关参数---------> gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 3; gzip_types text /plain application /x-javascript text /css application /xml ; gzip_vary on; server { listen 80; server_name www.v1.com; access_log logs /access .log combined; index index.html index.htm index.php; root /web/www/ ; location ~ .*\.(php|php5)?$ { #此处是配置nginx于php交互的,在nginx下所有的php 脚本都转交给192.168.1.5的9000端口接收 fastcgi_pass 192.168.1.5:9000; fastcgi_index index.php; include /application/nginx/conf/fastcgi .conf; } location ~ .*\.(js|css)?$ { expires 1h; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } } } |
此时在php主机(即192.168.1.5)上创建一个/web/www的目录,创建一个配置文件index.php,文件内
容为
<?php phpinfo(); ?> |
在Ninux主机上,浏览器输入www.v1.com (前天需要修改hosts文件,内容为192.168.1.5 www.v1.com)
即可看到如下内容
则表明Nginx与PHP交互成功
下面我们通过wordpress来结合Nginx和PHP,回到mariab数据库的主机,授权一个用户wdadmin
MariaDB [(none)]> create database wpdb; #创建一个wpdb数据库,用户保存wordpress数据
MariaDB [(none)]> grant all privileges on wpdb.* to "wpadmin"@"192.168.1.%" identified by 'test'; #授权给wpadmin用户,密码是test
转到php主机,在/web/下创建一个wordpress目录,用于保存wordpress代码
mkdir /web/wordpress cd /web/wordpress unzip wordpress-3.3.1-zh_CN.zip mv /web/wordpress/wordpress/ * /web/wordpress cp wp-config-sample.php wp-config.php vim wp-config.php #编译wp-config.php修改下面的几行 define( 'DB_NAME' , 'wpdb' ); #添加在mariab数据库的数据库名 define( 'DB_USER' , 'wpadmin' ); #添加授权的用户 define( 'DB_PASSWORD' , 'test' ); #密码 define( 'DB_HOST' , '192.168.1.4' ); #指定mariab数据库的主机IP |
在nginx主机上,添加一个虚拟主机,内容如下:
server { listen 80; server_name www.wordpress.com; access_log logs /access .log combined; index index.html index.htm index.php; root /web/wordpress/ ; location ~ .*\.(php|php5)?$ { fastcgi_pass 192.168.1.5:9000; fastcgi_index index.php; include /application/nginx/conf/fastcgi .conf; } location ~ .*\.(js|css)?$ { expires 1h; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } } |
配置好后,网页访问www.wordpress.com(前提是要修改hosts文件)
看到此界面则说明三者交互成功,安装后,可能看不到图片,是因为没有做动静分离,可以放Nginx的
/web/wordpress目录下放置同样一份就可以看到了。
至此LNMP的编译安装完成,以上只是个人的浅显认识,错误之处在所难免,望各位同仁批评指正谢谢!