LNMP开发环境搭建
这是一篇拿来主义的文章,所有的安装步骤仅为互联网上查找,网络上的教程各种凌乱,这里根据我的实践情况进行了更改,本文仅记录了我的安装过程,由于不同环境可能导致安装步骤不甚相同。
MAC OS X 10.10
php
Mac OSX 10.10的系统自带了php、php-fpm,省去了安装的麻烦,可以执行php -v
查看php的版本。这里需要简单地修改下php-fpm的配置,否则运行php-fpm会报错。
1 | sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf |
修改php-fpm.conf文件中的error_log项,默认该项被注释掉,这里需要去注释并且修改为error_log = /usr/local/var/log/php-fpm.log。如果不修改该值,运行php-fpm的时候会提示log文件输出路径不存在的错误。
如果系统中存在多个php-fpm.conf,不知道需要编辑哪一个,可以执行php-fpm -t
命令查看php-fpm要读取的配置文件。
通过php-fpm -D
来启动php-fpm,可以通过lsof -Pni4 | grep LISTEN | grep php
命令来查看php-fpm是否监听在9000端口。
nginx
这里为了简单,直接采用了brew的方式安装。执行
1 | brew install nginx |
nginx的配置文件位于/usr/local/etc/nginx/nginx.conf,默认只能解析html文件,需要配置后才能调用php-fpm解析php文件。下面内容为该修改后的文件全部有效内容:
1 | worker_processes 1; |
然后执行nginx
命令即可启动,默认监听的端口为8080,在浏览器中输入http://127.0.0.1:8080
即可看到nginx的初始界面。nginx要想监听1024以下端口还需要进一步的配置,8080端口既能满足我需求,不再更改。
mysql
1 | brew install mysql |
在启动mysql之前可对mysql的配置文件进行更改,我这里需要更改mysql的编码方式,将所有的编码方式都更改为utf8,防止乱码问题的发生。mysql的配置文件为my.cnf,我的位于/usr/local/Cellar/mysql/5.6.25/my.cnf,对文件添加如下内容,有些选项不存在,可手动添加。
1 | [mysqld] |
输入mysqld
命令即可启动mysql,启动mysql后输入mysql_secure_installation
命令对mysql进行配置,可以设置root用户的密码。
通过mysql -uroot -p
命令连接到mysql后,输入status
命令可查看刚才更改的编码是否生效。
由于不需要长期使用mysql,这里不设置mysql自启动命令。
CentOS6
我首先采用的方案为完全用普通用户安装,尝试失败后采用root安装依赖库普通用户编译程序的方案。
普通用户安装依赖库
我首选选择在普通用户kuring下进行安装和运行整个web环境。因此不能使用yum安装方式,必须采用源码安装的方式。通过普通用户安装,最麻烦的地方就在于需要安装很多的依赖库,而依赖的库的安装可能又有需要的库,且库之间存在版本问题。
首先普及几个小知识:
bash查找命令的先后顺序为:
- alias别名
- shell中的关键字,如if等
- shell中的函数
- shell内置命令,如echo等
- $PATH环境变量,PATH中的匹配顺序为从前向后的。
程序查找lib库的先后顺序为:
- 编译程序时指定的链接库路径,g++编译器可以通过
-Wl,-rpath,路径
来指定链接库的路径。 - 环境变量LD_LIBRARY_PATH指定的搜索路径。
- /etc/ld.so.conf指定的路径。
- 默认的系统动态库搜索路径,如/usr/lib64、/usr/local/lib64等。
很多程序采用pkg-config程序来检查库的版本号,pkg-config命令依赖于动态链接库对应的.pc文件,这些.pc文件一般位于系统的/usr/local/lib/pkgconfig目录下。为了能够将安装完成的库通过pkg-config找到对应的.pc文件,需要将.pc文件所在的路径/home/kuring/local/lib/pkg-config设置到环境变量PKG_CONFIG_PATH中。
安装php依赖的libxml2库时提示找不到libtool、autoconf和automake,首先安装libtool。执行./configure --prefix=/home/kuring/local;make; make install
将其安装到当前用户的local目录下。
用同样的步骤安装autoconf,执行./configure --prefix=/home/kuring/local;make; make install
。
为了能够将安装的程序起作用,需要将/home/kuring/local目录添加到PATH环境变量中,在.bash_profile文件中添加PATH=$PATH:$HOME/local/bin语句,并执行source ~/.bash_profile
。
安装之前需要先安装libxml2库,下载地址采用git clone git://git.gnome.org/libxml2
的方式下载。在执行sh autogen
产生configure配置文件的过程中,发现提示
1 | ./configure: line 13094: syntax error near unexpected token `LZMA,liblzma,' |
经过发现是由于找不到PKG_CHECK_MODULES造成的,正常情况下该函数定义在aclocal.m4文件,而该情况下aclocal.m4文件中并不存在该函数。之所以不存在是由于aclocal命令找不到pkg.m4文件造成的,可以通过aclocal --print
命令查看查找的pkg.m4文件的路径。我这里的解决思路为直接从其他机器上复制一个pkg.m4文件过来。
在产生了configure命令后,执行./configure --prefix=/home/kuring/local
命令后发现提示找不到Python.h命令的错误。
鉴于遇到了如此之多的错误,本着不浪费生命的原则还是采用yum来安装依赖库吧。
php
这里的mysql直接采用了yum命令安装的。
在执行php的./configure
命令后提示libxml2找不到错误,直接yum install libxml-devel
命令安装libxml-devel即可。然后执行./configure --enable-fpm --prefix=/home/kuring/php5.5 --with-mysqli=/usr/bin/mysql_config;make; make install;
。在编译php的时候要加上php-fpm选项来安装php-fpm命令。
安装后配置~/.bash_profile文件的$PATH环境变量的值为:PATH=$HOME/bin:$HOME/php5.5/bin:$HOME/php5.5/sbin:$PATH。
此时即可通过php-fpm -D
命令来启动php-fpm命令了。
安装完成后通过phpinfo()函数查看里面有MySQLi的选项,但是实际程序运行的时候居然不支持mysqli的一些力函数,说明mysqli的扩展安装不成功。在/home/kuring/php5.5/include/php/ext/mysqli目录中找到了对应的.h文件,却没有找到mysqli.so的动态链接库文件。大概是由于在编译php时mysql的路径配置有些问题造成的,因为mysql是通过yum安装的,路径比较乱一些。
为了能够产生mysqli.so文件,采用单独编译的方式,在php的源码目录中已经包含了mysqli的源码,进入mysqli源码目录下执行phpize;./configure --prefix=/home/kuring/php5.5/mysqli --with-php-config=/home/kuring/php5.5/bin/php-config --with-mysqli=/usr/bin/mysql_config;make;make install;
。将mysqli.so文件安装到了/home/kuring/php5.5/lib/php/extensions/no-debug-non-zts-20121212目录下,不知道为什么目录末尾还要加个这么长的文件夹名,直接将文件复制到上一级目录下。
在/home/kuring/php5.5目录下没有找到php.ini文件,通过php --ini
命令查看php的配置文件路径为/home/kuring/php5.5/lib,直接从php的源码文件中复制一个php.ini文件到该目录下。并将php.ini中的增加如下内容:
1 | extension_dir = "/home/kuring/php5.5/lib/php/extensions" |
再运行程序,发现mysqli的系列函数已经支持了,好一段折腾。
php-fpm
执行cp $HOME/php5.5/etc/php-fpm.conf.default $HOME/php5.5/etc/php-fpm.conf
来增加配置文件。
nginx
首先安装pcre库,该库为正则表达式库。下载后通过
下载源码后执行./configure --prefix /home/kuring/nginx;make;make install;
即可安装完成。
修改nginx的配置文件为如下内容:
1 | worker_processes 1; |
常见操作
nginx
- nginx -s stop:关闭
- nginx -t:检测nginx的配置是否正确
mysql
- mysqld_safe:启动mysql
- mysqladmin shutdown -u root -p:关闭mysql
- create user kuring identified by ‘kuring_pass’:mysql创建用户(我尝试过几次,每次创建的用户密码都为空)
- drop user kuring:删除一个用户
- grant all privileges on . to ‘root‘@’%’ identified by ‘root’ with grant option :允许mysql的root用户通过远程登录
创建用户的操作
使用create user kuring identified by 'kuring_pass'
命令创建用户kuring。默认创建完成的用户在本机无法登陆,但是远程却可以登陆。 这是因为mysql数据库中的user表中存在一条记录造成的。
1 | use mysql; |
在mysql命令行中执行grant all privileges on kuring_db.* to kuring identified by 'kuring_pass'
命令可以给刚创建的用户对数据库的权限。
修改mysql用户密码
mysql将用户名和密码存放到了mysql数据库的user表中,在mysql命令行中执行use mysql;update user set password=password("new password") where user="username";flush privileges;
即可更新相应用户的密码。
php-fpm
- php-fpm -D:启动php-fpm,如果需要指定php.ini文件,可以使用-c参数
- php-fpm -t:检查php-fpm的配置文件
- kill -USR2: 重启php-fpm
- kill -INT: 停止php-fpm
php
- php –ini:显示php.ini文件路径