您好,欢迎访问一九零五行业门户网

CentOS下安装PHP7+Nginx+MySQL的方法详解

本文以centos6为例。命令部分均省略sudo命令。
安装php
下载
http://cn2.php.net/distributions/php-5.6.22.tar.bz2http://cn2.php.net/distributions/php-7.0.7.tar.bz2
更新yum源
这里将centos的yum源更换为国内的阿里云源。yum安装正常的可以跳过本步骤。
阿里云linux安装镜像源地址:
http://mirrors.aliyun.com/
1、备份你的原镜像文件,以免出错后可以恢复:
mv /etc/yum.repos.d/centos-base.repo /etc/yum.repos.d/centos-base.repo.backup
2、下载新的centos-base.repo 到/etc/yum.repos.d/
## centos 5wget -o /etc/yum.repos.d/centos-base.repo http://mirrors.aliyun.com/repo/centos-5.repo## centos 6wget -o /etc/yum.repos.d/centos-base.repo http://mirrors.aliyun.com/repo/centos-6.repo## centos 7wget -o /etc/yum.repos.d/centos-base.repo http://mirrors.aliyun.com/repo/centos-7.repo
3、生成缓存
yum clean allyum makecache
安装依赖
yum install -y gcc gcc-c++ make cmake bison autoconf wget lrzszyum install -y libtool libtool-ltdl-devel yum install -y freetype-devel libjpeg.x86_64 libjpeg-devel libpng-devel gd-develyum install -y python-devel patch sudo yum install -y openssl* openssl openssl-devel ncurses-develyum install -y bzip* bzip2 unzip zlib-develyum install -y libevent*yum install -y libxml* libxml2-develyum install -y libcurl* curl-devel yum install -y readline-devel
需要编译libmcrypt、mhash、mcrypt库
tar zxvf /libmcrypt-2.5.8.tar.gz \&& cd /libmcrypt-2.5.8 && ./configure && make && make install && cd - / && rm -rf /libmcrypt* \&& tar zxvf /mhash-0.9.9.9.tar.gz && cd mhash-0.9.9.9 && ./configure && make && make install && cd - / && rm -rf /mhash* \&& tar zxvf /mcrypt-2.6.8.tar.gz && cd mcrypt-2.6.8 && ld_library_path=/usr/local/lib ./configure && make && make install && cd - / && rm -rf /mcrypt*
开始安装
使用./configure --help查看编译支持的选项。如果写了不支持的选项,如php7里不支持--with-mysql=mysqlnd会提示:
configure: warning: unrecognized options: --with-mysql
wget http://cn2.php.net/distributions/php-7.0.7.tar.bz2tar jxvf php-7.0.7.tar.bz2 cd php-7.0.7$ ./configure --prefix=/usr/local/php --with-config-file-scan-dir=/usr/local/php/etc/ --enable-inline-optimization --enable-opcache --enable-session --enable-fpm --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pdo-sqlite --with-sqlite3 --with-gettext --enable-mbregex --enable-mbstring --enable-xml --with-iconv --with-mcrypt --with-mhash --with-openssl --enable-bcmath --enable-soap --with-xmlrpc --with-libxml-dir --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-curlwrappers --with-zlib --enable-zip --with-bz2 --with-gd --enable-gd-native-ttf --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-readline $ make$ make install
可选项:
--with-fpm-user=www --with-fpm-group=www
这里面开启了很多扩展。如果这时候忘了开启,以后还能加上吗?答案是可以的。以后只需要进入源码的ext目录,例如忘了pdo_mysql,进入ext/pdo_mysql,使用phpize工具,像安装普通扩展一样即可生成pdo_mysql.so。
关于:--enable-safe-mode
开启的话php可以执行一下系统函数,建议关闭(可搜索受此函数影响的php函数)
#如果只需要配置某一个目录可以执行则 设置为on并指定 safe_mode_exec_dir=string目录来执行系统函数。#本特性已自 php 5.3.0 起废弃并将自 php 5.4.0 起移除。safe_mode = off
php7编译不用加这个配置。
编译比较耗内存和cpu。等待半小时左右,编译完成:
build complete.don't forget to run 'make test'.installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/installing php cli binary: /usr/local/php/bin/installing php cli man page: /usr/local/php/php/man/man1/installing php fpm binary: /usr/local/php/sbin/installing php fpm config: /usr/local/php/etc/installing php fpm man page: /usr/local/php/php/man/man8/installing php fpm status page: /usr/local/php/php/php/fpm/installing phpdbg binary: /usr/local/php/bin/installing phpdbg man page: /usr/local/php/php/man/man1/installing php cgi binary: /usr/local/php/bin/installing php cgi man page: /usr/local/php/php/man/man1/installing build environment: /usr/local/php/lib/php/build/installing header files: /usr/local/php/include/php/installing helper programs: /usr/local/php/bin/ program: phpize program: php-configinstalling man pages: /usr/local/php/php/man/man1/ page: phpize.1 page: php-config.1installing pear environment: /usr/local/php/lib/php/[pear] archive_tar - installed: 1.4.0[pear] console_getopt - installed: 1.4.1[pear] structures_graph- installed: 1.1.1[pear] xml_util - installed: 1.3.0[pear] pear - installed: 1.10.1wrote pear system config file at: /usr/local/php/etc/pear.confyou may want to add: /usr/local/php/lib/php to your php.ini include_path/php-7.0.7/build/shtool install -c ext/phar/phar.phar /usr/local/php/binln -s -f phar.phar /usr/local/php/bin/pharinstalling pdo headers: /usr/local/php/include/php/ext/pdo/[root@e8ed9b00e80c php-7.0.7]# /usr/local/php/bin/php -m[php modules]bcmathbz2corectypecurldatedomfileinfofiltergdgettexthashiconvjsonlibxmlmbstringmcryptmysqlimysqlndopensslpcntlpcrepdopdo_mysqlpdo_sqlitepharposixreadlinereflectionsessionshmopsimplexmlsoapsocketssplsqlite3standardsysvmsgsysvsemsysvshmtokenizerxmlxmlreaderxmlrpcxmlwriterzipzlib[zend modules]
配置文件
需要从安装包里复制php.ini、php-fpm.conf到安装目录:
$ cp php-7.0.7/php.ini* /usr/local/php/etc/$ cd /usr/local/php/etc/$ cp php.ini-production php.ini$ cp php-fpm.conf.default php-fpm.conf$ cp php-fpm.d/www.conf.default php-fpm.d/www.conf$ lspear.conf php-fpm.conf.default php.ini-development php.ini-production
配置php.ini
# 不显示错误,默认display_errors = off# 在关闭display_errors后开启php错误日志(路径在php-fpm.conf中配置),默认log_errors = on# 字符集,默认default_charset = "utf-8"# 文件上传大小,默认值太小,建议修改10mupload_max_filesize = 2m# maximum size of post data that php will accept. 表单最大值,默认是8m,如果表单含有多图上传,大小可能不够。超过该大小后台收不到 表单数据post_max_size = 8m # 设置php的扩展库路径,,默认被注释了。extension_dir = "/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/"# 如果不设置extension_dir,也可以直接写绝对位置:# extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/redis.so# 设置php的时区date.timezone = prc# 开启opcache,默认是0[opcache]; determines if zend opcache is enabledopcache.enable=1
配置php-fpm.conf
; 去掉里分号,方便以后重启。建议修改; default value: none; 下面的值最终目录是/usr/local/php/var/run/php-fpm.pid; 开启后可以平滑重启php-fpmpid = run/php-fpm.pid; 设置错误日志的路径,可以默认值; note: the default prefix is /usr/local/php/var; default value: log/php-fpm.log, 即/usr/local/php/var/log/php-fpm.logerror_log = /var/log/php-fpm/error.log; log等级,可以默认值; possible values: alert, error, warning, notice, debug; default value: noticelog_level = notice; 后台运行,默认yes,可以默认值; default value: yes;daemonize = yes; 引入www.conf文件中的配置,可以默认值include=/usr/local/php/etc/php-fpm.d/*.conf
配置www.conf(在php-fpm.d目录下)
www.conf这是php-fpm进程服务的扩展配置文件:
; 设置用户和用户组,默认都是nobody。可以默认值user = nginxgroup = nginx; 设置php监听; 下面是默认值,不建议使用。可以默认值; listen = 127.0.0.1:9000; 根据nginx.conf中的配置fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;listen = /var/run/php-fpm/php-fpm.sock######开启慢日志。可以默认值slowlog = /var/log/php-fpm/$pool-slow.logrequest_slowlog_timeout = 10s
保存配置文件后,检验配置是否正确的方法为:
/usr/local/php/sbin/php-fpm -t
如果出现诸如 test is successful 字样,说明配置没有问题。另外该命令也可以让我们知道php-fpm的配置文件在哪。
建立软连接:
ln -sf /usr/local/php/sbin/php-fpm /usr/bin/ln -sf /usr/local/php/bin/php /usr/bin/ln -sf /usr/local/php/bin/phpize /usr/bin/ln -sf /usr/local/php/bin/php-config /usr/bin/ln -sf /usr/local/php/bin/php-cig /usr/bin/
或者将php编译生成的bin目录添加到当前linux系统的环境变量中:
echo -e '\nexport path=/usr/local/php/bin:/usr/local/php/sbin:$path\n' >> /etc/profile && source /etc/profile
启动php-fpm
/usr/local/php/sbin/php-fpm
如果提示没有www用户(www.conf里填写了www而不是nobody),则新增:
useradd wwwchown -r www:www /www
检测是否启动:
ps aux |grep php-fpm # 另外该命令也可以让我们知道fpm的配置文件在哪。netstat -ant |grep 9000
查看php-fpm进程数:
ps aux | grep -c php-fpm
php-fpm操作汇总:
/usr/local/php/sbin/php-fpm # php-fpm启动kill -int `cat /usr/local/php/var/run/php-fpm.pid` # php-fpm关闭kill -usr2 `cat /usr/local/php/var/run/php-fpm.pid` #php-fpm平滑重启
重启方法二:
killall php-fpm/usr/local/php/sbin/php-fpm &
如果无法平滑启动,那就终止进程id:
ps aux | grep php-fpmkill -9 1210 #1210指php-fpm进程id
安装nginx
nginx newshttp://nginx.org/http://nginx.org/download/nginx-1.11.1.tar.gz
依赖:
# 为了支持rewrite功能,我们需要安装pcreyum install pcre-devel# 需要ssl的支持,如果不需要ssl支持,请跳过这一步# yum install openssl*# gzip 类库安装,按需安装# yum install zlib zlib-devel
配置编译参数
$ tar -zxvf nginx-1.11.1.tar.gz$ cd nginx-1.11.1$ ./configure \ --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_sub_module \ --with-http_gzip_static_module \ --with-pcre
配置ok:
configuration summary + using system pcre library + using system openssl library + md5: using openssl library + sha1: using openssl library + using system zlib library nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx modules path: "/usr/local/nginx/modules" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
编译安装nginx
makemake install
设置软连接:
ln -sf /usr/local/nginx/sbin/nginx /usr/sbin
检测nginx:
nginx -t
显示:
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
成功了。我们重新配置下nginx.conf:
#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; # 解决虚拟主机名字过长 http://www.jb51.net/article/26412.htm server_names_hash_bucket_size 128; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; autoindex on;# 显示目录 autoindex_exact_size on;# 显示文件大小 autoindex_localtime on;# 显示文件时间 include vhosts/*.conf;}
配置localhost:
vhosts/localhost.conf
server { listen 80; server_name localhost; #charset utf-8; #access_log logs/host.access.log main; location / { root /www/www/; index index.php index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the php scripts to apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the php scripts to fastcgi server listening on 127.0.0.1:9000 # location ~ \.php$ { root /www/www/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param script_filename $document_root$fastcgi_script_name; include fastcgi_params; }}
启动nginx:
/usr/local/nginx/sbin/nginx# 或者nginx
重启:
/usr/local/nginx/sbin/nginx -s reload# 或者nginx -s reload
停止:
/usr/local/nginx/sbin/nginx -s stop# 或者nginx -s stop
如果提示80端口被占用了,可以使用ps aunx | grep 80查看。一般是apache占用了。可以使用:
chkconfig --listchkconfig nginx onservice apache off
禁止apache启动并关闭apache服务。
安装扩展
安装swoole
swoole: php的异步、并行、高性能网络通信引擎
http://www.swoole.com/
wget https://github.com/swoole/swoole-src/archive/swoole-1.8.5-stable.zipunzip swoole-1.8.5-stable.zipcd swoole-1.8.5-stablephpize./configuremake && make install
安装redis
服务器端:
http://download.redis.io/releases/redis-3.2.0.tar.gz
$ wget http://download.redis.io/releases/redis-3.2.0.tar.gz$ tar xzf redis-3.2.0.tar.gz$ cd redis-3.2.0$ make
默认编译完后在当前目录的src目录下。可以复制可执行文件到其他地方:
mkdir /usr/local/rediscd srccp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis
复制配置文件
$ cd redis-3.2.0$ cp redis.conf /usr/local/redis/
或者安装的时候指定位置:
make prefix=/usr/local/redis install
将redis的命令所在目录添加到系统参数path中:
修改profile文件:
vi /etc/profile
在最后行追加:
export path="$path:/usr/local/redis/bin"
然后马上应用这个文件:
. /etc/profile
这样就可以直接调用redis-cli的命令了
客户端:
2.0安装
wget https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gztar -zxvf 2.2.4cd phpredis-2.2.4/phpize./configure make && make install
3.0安装
phpredis/phpredis: a php extension for redishttps://github.com/phpredis/phpredis
需要先安装igbinary:
pecl :: package :: igbinary
http://pecl.php.net/package/igbinary
wget http://pecl.php.net/get/igbinary-1.2.1.tgztar zxvf igbinary-1.2.1.tgzcd igbinary-1.2.1phpize./configure make && make install
wget https://github.com/phpredis/phpredis/archive/3.0.0-rc1.zipunzip 3.0.0-rc1cd phpredis-3.0.0-rc1/phpize./configure [--enable-redis-igbinary]make && make install
安装memcache
pecl install memcache
php7安装有兼容问题,从github上搜到了一个可用的:
git clone https://github.com/websupport-sk/pecl-memcache memcachecd memcachephpize./confihuremakemake install
安装memcached:
pecl install memcached
需要先安装:
yum install libmemcached-dev
使用yum/apt-get安装php
如果只是想快速搭建开发环境,可以使用yum进行安装:
yum install php-cli php-devel php-common php-pear php-gd php-fpm php-mbstring php-mcrypt php-mysql php-sqlite3 php-pdo php-memcache
使用yum search php可以查询到可以安装哪些php相关的扩展。
如果是ubuntu:
sudo apt-get install php7.0-cli php7.0-dev php-pear php7.0-common php7.0-pdo php7.0-curl php7.0-gd php-redis php-xdebug php-memcache php7.0-fpm composer
需要下载 15.9 mb 的归档。
解压缩后会消耗 57.7 mb 的额外空间。
您希望继续执行吗? [y/n]
php-pear包含pecl,php-dev包含phpize,pecl依赖phpize。
需要注意的是,使用yum安装的php,其配置文件位于:
/etc/php.ini/etc/php-fpm.conf/etc/php-fpm.d/www.conf/etc/php.d/mysqli.ini/etc/php.d/pdo.ini
ubuntu与centos不一样,会分开存放php.ini到/etc/php7/cli/php.ini和/etc/php7/fpm/php.ini里。这个需要注意。
yum无法安装的扩展,可以使用pecl安装。由于pecl是需要编译的,所以需要先安装编译器:
yum install -y gcc gcc-c++ make cmake bison autoconf
然后:
pecl install swoolepecl install redis
pecl安装扩展完成后会提示添加so文件到php.ini。示例:
build process completed successfullyinstalling '/usr/lib64/php/modules/swoole.so'install ok: channel://pecl.php.net/swoole-1.9.11configuration option "php_ini" is not set to php.ini locationyou should add "extension=swoole.so" to php.ini
添加示例:
[swoole]extension = /usr/lib64/php/modules/swoole.so
使用php -m可以查看安装的扩展。
信号管理
不重载配置启动新/旧工作进程
kill -hup 旧/新版主进程号
从容关闭旧/新进程
kill -quit 旧/新主进程号
如果此时报错,提示还有进程没有结束就用下面命令先关闭旧/新工作进程,再关闭主进程号:
kill -term 旧/新工作进程号
升级、添加或删除模块时,我们需要停掉服务器
kill -usr2 旧版程序的主进程号或进程文件名
mysql
如果存在旧版本,需要先卸载旧版本。
使用下面的命令检查是否安装有mysql server
rpm -qa | grep mysql
有的话通过下面的命令来卸载掉
rpm -e mysql //普通删除模式rpm -e --nodeps mysql // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
安装
安装编译代码需要的包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
下载mysql 5.6.14:
wget http://cdn.mysql.com/downloads/mysql-5.6/mysql-5.6.14.tar.gztar xvf mysql-5.6.14.tar.gzcd mysql-5.6.14
编译安装
cmake \-dcmake_install_prefix=/usr/local/mysql \-dmysql_datadir=/usr/local/mysql/data \-dsysconfdir=/etc \-dwith_myisam_storage_engine=1 \-dwith_innobase_storage_engine=1 \-dwith_memory_storage_engine=1 \-dwith_readline=1 \-dmysql_unix_addr=/var/lib/mysql/mysql.sock \-dmysql_tcp_port=3306 \-denabled_local_infile=1 \-dwith_partition_storage_engine=1 \-dextra_charsets=all \-ddefault_charset=utf8 \-ddefault_collation=utf8_general_ci\-dmysql_user=mysqlmake && make install
编译的参数可以参考
http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html
整个过程需要30分钟左右……漫长的等待
配置mysql
设置权限
使用下面的命令查看是否有mysql用户及用户组
cat /etc/passwd 查看用户列表cat /etc/group 查看用户组列表
如果没有就创建
groupadd mysqluseradd -g mysql mysql
修改/usr/local/mysql权限
chown -r mysql:mysql /usr/local/mysql
修改/usr/local/mysql权限
初始化配置
进入安装路径
cd /usr/local/mysql
进入安装路径,执行初始化配置脚本,创建系统自带的数据库和表
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
注:在启动mysql服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,这是新版mysql的配置文件的默认位置!
注意:在centos 6.4版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的mysql的正确配置,造成无法启动。
在使用"yum update"更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,mysql将使用这个配置文件启动,可能造成无法正常启动等问题。
启动mysql
添加服务,拷贝服务脚本到init.d目录,并设置开机启动
cp support-files/mysql.server /etc/init.d/mysqlchkconfig mysql onservice mysql start --启动mysql
配置用户
mysql启动成功后,root默认没有密码,我们需要设置root密码。
设置之前,我们需要先设置path,要不不能直接调用mysql
修改/etc/profile文件,在文件末尾添加
path=/usr/local/mysql/bin:$pathexport path
关闭文件,运行下面的命令,让配置立即生效
source /etc/profile
现在,我们可以在终端内直接输入mysql进入,mysql的环境了
执行下面的命令修改root密码
mysql -uroot mysql> set password = password('123456');
若要设置root用户可以远程访问,执行
mysql> grant all privileges on *.* to 'root'@'172.16.%' identified by 'password' with grant option;
红色的password为远程访问时,root用户的密码,可以和本地不同。
配置防火墙
防火墙的3306端口默认没有开启,若要远程访问,需要开启这个端口
打开/etc/sysconfig/iptables
在“-a input –m state --state new –m tcp –p –dport 22 –j accept”,下添加:
-a input -m state --state new -m tcp -p -dport 3306 -j accept
然后保存,并关闭该文件,在终端内运行下面的命令,刷新防火墙配置:
service iptables restart
ok,一切配置完毕,你可以访问你的mysql了~
注意:
centos 7中默认使用firewalld做防火墙,所以修改iptables后,在重启系统后,根本不管用。
firewalld中添加端口方法如下:
firewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reload
常见问题
1、编译php提示easy.h should be in <curl-dir>/include/curl/
如果是centos:
yum install curl curl-devel
如果是ubuntu:
apt-get install libcurl4-gnutls-dev
如果还是没有解决,直接编译curl:
wget http://curl.haxx.se/download/curl-7.37.0.tar.gztar zxvf curl-7.37.0.tar.gzcd curl-7.37.0../configure --prefix=/usr/local --enable-shared makemake install
以上就是centos下安装php7+nginx+mysql的方法详解的详细内容。
其它类似信息

推荐信息