LNMP分布式
共需要三台虚拟机,一台虚拟机安装nginx,一台虚拟机安装MySQL,一台安装php。
(一)安装nginx
在一台虚拟机上安装nginx
1.安装依赖环境
(1)更新yum源 [可选]
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
(2)安装依赖包
yum -y install pcre-devel zlib-devel
yum -y install gcc gcc-c++
2.添加nginx用户
useradd -M -s /sbin/nologin nginx
3.安装nginx
tar zxf nginx-1.6.0.tar.gz -C /usr/src
cd /usr/src/nginx-1.6.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
执行完上一步,如果要判断是否成功的话,用(echo $?),如果返回0,则表示无错,否则有错。
make && make install
4.优化执行方式
实现可全局执行,可通过建立软链接或在/etc/profile中添加路径。
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
此时可通过nginx启动,通过killall -9 nginx关闭,查看进程netstat -atp
5.编写启动服务脚本
vim /etc/init.d/nginx
# !/bin/bash
# chkconfig: - 99 20
# description: for nginx
PROG="/usr/local/nginx/sbin/nginx" #启动执行文件
PIDF="/usr/local/nginx/logs/nginx.pid" #存储nginx的进程号的文件
case "$1" in # $1表示第一个参数
start) #第一个参数为start时,执行如下命令
$PROG
;;
stop) #第一个参数为stop时,执行如下命令
kill -s QUIT $(cat $PIDF)
;;
restart) #第一个参数为restart时,执行如下命令
kill -s QUIT $(cat $PIDF)
$PROG
;;
reload) #第一个参数为reload时,执行如下命令
kill -s HUP $(cat $PIDF)
;;
*) #第一个参数为其他时,执行如下命令
echo "Usage $0 ( start | stop | restart | reload )"
exit 1
esac
exit 0
给文件加执行权限
chmod +x /etc/init.d/nginx
6.添加到开机启动项
chkconfig --add nginx
chkconfig --level 35 nginx on
chkconfig --list nginx #查看启动项
7.解读nginx配置文件部分内容 [可选]
执行程序的用户和工作进程的数量,其中工作进程的数量,官方推荐为不超过系统cpu的内核数。
http服务器配置区域,此处的配置相当于全局配置。可在这里面配置多个服务器(虚拟主机)。
声明一台服务器并配置相关参数,其中可以配置location访问根目录(如:http://192.168.8.116/)等
配置访问/时,在服务器上对应的路径,首页
配置访问php文件时,执行的参数。
8.测试
关闭防火墙(service iptables stop ),关闭selinux(setenforce 0)
开启服务
service nginx start
(二)安装MySQL
在一台虚拟机上安装MySQL。
1.安装MySQL需要的编译环境
由于mysql是由c写的,所以要安装编译c的包,cmake就是用来编译c的包。
(1)安装编译cmake的环境
yum -y install gcc gcc-c++
(2)源码安装
tar zxf cmake-2.8.6.tar.gz -C /usr/src
cd /usr/src/cmake-2.8.6
./configure
gmake && gmake install
2.安装MySQL的字符控制依赖包
ncurses是字符终端下屏幕控制的基本库,你在TTY下登录到主机上mysql需要的,所以依赖。
光盘安装
cd /media/CentOS_6.5_Final/Packages/
rpm -ivh ncurses-devel-5.7-3.20090208.el6.x86_64.rpm
3.安装MySQL
tar zxf mysql-5.5.22.tar.gz -C /usr/src
cd /usr/src/mysql-5.5.22
cmake -DCMAK_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
------*****说明---------------
上面这段参数一点也不能错!
-DCMAK_INSTALL_PREFIX=/usr/local/mysql 安装路径
-DSYSCONFDIR=/etc 配置文件路径
-DDEFAULT_CHARSET=utf8 默认字符集
-DDEFAULT_COLLATION=uft8_general_ci 字符集比对方法
-DWITH_EXTRA_CHARSETS=all 多余的字符集
结果图:
-----********--------------------------
make && make install
4.配置MySQL
(1)更新配置文件
删除原有配置文件
cd /etc
rm -f my.cnf
从解压目录拷贝一份配置文件
cp /usr/src/mysql-5.5.22/support-files/my-medium.cnf /etc/my.cnf
(2)查看配置文件
有兴趣的话,可以仔细读一下。
5.创建MySQL的本地账户
useradd -s /sbin/nologin -M mysql
chown -R mysql:mysql /usr/local/mysql/
6.初始化数据库
cd /usr/local/mysql/scripts
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
解读运行后的部分文字
WARNING: The host 'sutang' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
#拷贝服务文件到你系统的正确的位置
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
#设置一个MySQL的root管理员的密码,例子如下:
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h sutang password 'new-password'
Alternatively you can run:
/usr/local/mysql/bin/mysql_secure_installation
#密码忘了,执行这个脚本
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
#建议你进入数据库之后,将test数据库删掉
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/mysql/mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/local/mysql/scripts/mysqlbug script!
7.加入环境变量
这一步是为了在所有地方都可以直接通过mysql命令访问MySQL这个软件。也可以直接将/usr/local/mysql/bin下所有文件创建软链接到/usr/local/sbin
echo “PATH=$PATH:/usr/local/mysql/bin” >> /etc/profile
source /etc/profile
echo $PATH
如果报错如下:
看一下/etc/profile文件的最后一行。正确的应该如下:
8.生成服务脚本并加入开机启动项
cp /usr/src/mysql-5.5.22/support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
chkconfig --list mysqld
mysqld 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
9.添加新的MySQL管理员账户
service mysqld start
[root@sutang etc]# mysqladmin -u root -p password 'Aa123456'
Enter password: #此处直接回车
登录测试:
service mysqld restart
10.添加远程访问MySQL的账户
本地登录数据库,然后如下操作!
grant all privileges on *.* to 'su'@'192.168.8.113' identified by '1234556';
su:为账户名、192.168.8.113远程访问的主机IP(即php服务器的IP)、123456为密码
(三)安装php
1.安装依赖包和必要的编译环境
yum -y install gd libxml2-devel libjpeg-devel libpng-devel
yum -y install mysql-devel
yum -y install gcc gcc-c++
2.安装MySQL客户端
yum -y install mysql
ln -s /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so
3.登录测试
(1)登录命令格式:
mysql -P 端口号 -h MySQL主机/ip -u 用户名 -p
端口号的选项为大写的P。
(2)测试
mysql -P 3306 -h 192.168.8.115 -u su -p
4.安装php
tar zxf php-5.3.28.tar.gz -C /usr/src/
cd /usr/src/php-5.3.28/
./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
make && make install
5.修改配置文件
(1)复制一份配置文件
cp /usr/src/php-5.3.28/php.ini-development /usr/local/php5/php.ini
(2)修改配置文件
vim /usr/local/php5/php.ini
修改部分如下:
6.php-fpm的配置
启动php-fpm进程,以便监听nginx传过来的PHP请求。
(1)添加一个php用户
useradd -M -s /sbin/nologin php
(2)复制一份php-fpm配置文件
cd /usr/local/php5/etc
cp php-fpm.conf.default php-fpm.conf
(3)修改php-fpm的配置文件
vim /usr/local/php5/etc/php-fpm.conf
修改部分如下:
下图中的IP为nginx服务器的IP
下图中的IP为php服务器的IP(即本机的IP)
(4)加入启动项
vim /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
[root@mao etc]# chkconfig --add php-fpm
[root@mao etc]# chkconfig --level 35 php-fpm on
[root@mao etc]# chkconfig --list php-fpm
php-fpm 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
service php-fpm start
[root@mao ~]# netstat -anpt | grep php-fpm #查看该进程
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 103273/php-fpm
(四)nginx与php互连
1.修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
第一个红框为php那台服务器的IP地址
第二个红框为php那台服务器上存放网页的目录。(路径为绝对路径)
2.测试php
(1)编写一个php页面
在php服务器的网页目录编写一个php文件
cd /www/html
vim test.php
内容如下:
<?php
phpinfo()
?>
(2)访问结果
注意:每一台服务器的iptables和selinux都是关闭的。
关闭iptables : service iptables stop
临时关闭selinux: setenforce 0
3.测试php连接MySQL
(1)编写一个php页面
在php服务器的网页目录编写一个php文件
cd /www/html
vim sql.php
内容如下:
<?php
$link=mysql_connect('192.168.8.115','su','123456');
if($link) echo "数据库连接成功";
mysql_close();
?>
(2)访问结果
注意:每一台服务器的iptables和selinux都是关闭的。
关闭iptables : service iptables stop
临时关闭selinux: setenforce 0
4.php网页源码测试
(1)必要知识
php服务器解析动态页面,nginx解析静态页面。但是php页面中有很多地方采用了静态解析图片,为了让浏览器显示的php页面中有图片,必须在nginx服务器中放网页源码包来提供图片。
nginx的配置文件中内容如下:
worker_processes 1;
…
events { … }
http{..
server { …
location /{…}
location ~\.php$ {…}
}
server {…
}
}
其中location /{…}是解析静态页面的相关配置;location ~\.php${…}是解析动态页面的相关配置。为了让php页面正常显示图片,需要在location /{…}中设置的网页默认目录下存放源码包。为了让php页面正常显示,需要在location ~\.php${…}中设置的网页默认目录下存放源码包。
(2)分别在nginx和php服务器上存放源码包
1)nginx服务器:
mkdir -p /www/html
cd /www/html
在/www/html目录下存放源码包
2)php服务器:
mkdir -p /www/html
cd /www/html
在/www/html目录下存放源码包
(3)修改nginx配置文件
图中红框内$document_root和root的参数值等同。如果不这样写的话,可以直接写/www/html。
(4)重启服务并测试
nginx服务器上: service nginx restart
php服务器上: service php-fpm restart
关闭防火墙(service iptables stop)与selinux(gentenforce 0)
测试结果如下: