LNMP环境搭建
目录
作为一名php开发者,我们一定要懂得如何搭建php开发环境,目前主流的php开发环境组合是lamp和lnmp,本文将介绍如何在centos上搭建lnmp开发环境。
准备工作
安装wget
wget
是一个从网络上自动下载文件的*工具,支持通过 http、https、ftp 三个最常见的tcp/ip协议下载,并可以可以使用http代理。
sudo yum install wget
安装net-tools
最小化安装centos7时如果无法使用ifconfig命令,则需要安装net-tools
,如果是安装的centos6版本则无需安装
sudo yum install net-tools
更新yum源
yum -y update
安装vim
sudo yum install vim
配置显示行号
vim ~/.vimrc set nu #输入 set nu 后退出保存
安装nginx
安装依赖
(1) 安装 nginx
需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装gcc-c++。
(2) pcre
是一个perl库,中文"perl兼容的正则表达式库"。安装nginx是为了使nginx支持具备uri重写功能的rewrite模块,如果不安装pcre库,则nginx无法使用rewrite模块功能,nginx的rewrite模块功能几乎是企业应用必须。
(3) zlib
库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 centos 上安装 zlib 库。
(4) openssl
是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 ssl 协议,并提供丰富的应用程序供测试或其它目的使用。 nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要安装 openssl 库 。
yum -y install gcc gcc-c++ zlib zlib-devel yum -y install pcre pcre-devel openssl openssl-devel
说明: yum安装方式安装的pcre版本比较低,不过基本不影响使用
检查基础依赖包
上面的依赖安装完成后可以通过如下命令检查各个依赖安装是否成功
rpm -qa pcre pcre-devel rpm -qa zlib zlib-devel rpm -qa openssl openssl-devel rpm -qa pcre pcre-devel
编译安装nginx
# 这里我们把安装包都放到了/usr/src目录下,便于统一管理 cd /usr/src #切换到软件包目录 wget https://nginx.org/download/nginx-1.14.0.tar.gz #下载nginx源码包 useradd nginx -s /sbin/nologin -m #创建nginx用户用于管理nginx程序 tar zxvf nginx-1.14.0.tar.gz #解压nginx源码包 cd nginx-1.14.0 #预编译 ./configure \ --user=nginx \ --group=nginx \ --prefix=/usr/local/nginx-1.14.0 \ --with-http_stub_status_module \ --with-http_ssl_module make && make install #编译 和 安装 cd /usr/local ln -s nginx-1.14.0 nginx #创建nginx的软链接
安装说明
--prefix=path #设置安装路劲 --user=user #进程用户权限 --group=group #进程用户组权限 --with-http_stub_status_module #激活状态信息 --with-http_ssl_module #激活ssl功能
配置环境变量
vim /etc/profile export path="/usr/local/nginx/sbin:$path" source /etc/profile
配置开机自启
vim /etc/rc.local # nginx开机自启 /usr/local/nginx/sbin/nginx &
nginx常用命令
/usr/local/nginx/sbin/nginx -t # 检查nginx配置语法是否有误 /usr/local/nginx/sbin/nginx #启动 /usr/local/nginx/sbin/nginx -s stop #立即停止 /usr/local/nginx/sbin/nginx -s quit #平滑停止 /usr/local/nginx/sbin/nginx -s reload #重载配置 /usr/local/nginx/sbin/nginx -s reopen #重开日志
服务启动检查
可以通过该命令查询80端口被谁占用
lsof -i :80
如果无法识别该命令,需要安装lsof
sudo yum install lsof
关闭防火墙
centos6: service iptables stop 临时关闭 chkconfig --level 2345 iptables off 永久关闭 centos7: systemctl stop firewalld.service #令关闭防火墙 systemctl disable firewalld.service #关闭防火墙开机自启动 通过浏览器输入ip测试是否成功
安装mysql
安装依赖
(1)cmake是新版mysql的编译工具,必须安装
sudo yum install gcc gcc-c++ cmake ncurses-devel
如果你的系统是centos7,你还需要安装如下依赖
sudo yum install perl perl-devel autoconf
编译安装mysql
useradd -s /sbin/nologin -m mysql # 添加mysql用户 wget https://dev.mysql.com/get/downloads/mysql-5.6/mysql-5.6.41.tar.gz tar zxvf mysql-5.6.41.tar.gz cd mysql-5.6.41 cmake -dcmake_install_prefix=/usr/local/mysql-5.6.41 \ -dmysql_unix_addr=/usr/local/mysql-5.6.41/tmp/mysql.sock \ -dmysql_datadir=/usr/local/mysql-5.6.41/data \ -ddefault_charset=utf8 \ -ddefault_collation=utf8_general_ci \ -dwith_extra_charsets=all \ -dwith_myisam_storage_engine=1 \ -dwith_innobase_storage_engine=1 \ -dwith_memory_storage_engine=1 \ -dwith_readline=1 \ -dwith_innodb_memcached=1 \ -dwith_debug=off \ -dwith_zlib=bundled \ -denabled_local_infile=1 \ -denabled_profiling=on \ -dmysql_maintainer_mode=off \ -dmysql_tcp_port=3306 make && make install
mysql配置
cd /usr/local/mysql-5.6.41 chown mysql.mysql /usr/local/mysql-5.6.41/data mkdir tmp chown mysql.mysql /usr/local/mysql-5.6.41/tmp rm -f /etc/my.cnf cp support-files/my-default.cnf /etc/my.cnf scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql
加入守护进程
cd /usr/local ln -s mysql-5.6.41 mysql cd /usr/local/mysql cp support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld
配置环境变量
vim /etc/profile export path="/usr/local/mysql/bin" source /etc/profile
启动mysql
service mysqld start mysql -u root -p #第一次登陆不需要密码,回车即可 set password for root@localhost = password('root'); #修改密码
安装php
安装依赖
sudo yum install gcc gcc-c++ zip unzip libxml2 libxml2-devel curl-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gd-devel bzip2 bzip2-devel
编译安装php
cd /usr/src wget http://hk1.php.net/get/php-7.2.10.tar.gz/from/this/mirror -o php-7.2.10.tar.gz tar zxvf php-7.2.10.tar.gz cd php-7.2.10 ./configure \ --prefix=/usr/local/php-7.2.10 \ --enable-fpm \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --with-zlib \ --enable-mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-mysql-sock=/usr/local/mysql/tmp/mysql.sock \ --with-gd \ --with-png-dir \ --with-jpeg-dir \ --with-freetype-dir \ --with-iconv-dir \ --with-openssl \ --with-curl \ --enable-mbstring \ --enable-static \ --enable-zip \ --enable-sockets \ --enable-xml make && make install
php配置
cd /usr/local ln -s php-7.2.10 php cp /usr/src/php-7.2.10/php.ini-development /usr/local/php-7.2.10/lib/php.ini vim /usr/local/php/lib/php.ini date.timezone = prc # 修改时区(大约在932行) expose_php = off # 避免php信息暴露在http头中(大约369行) display_errors = off# 生产环境设置为off,开发环境就设置为on,便于调试 说明:设置了dispaly_errors为off后,需要在php-fpm.conf中开启错误日志记录路径error_log = log/php-fpm.log cd php cp etc/php-fpm.conf.default etc/php-fpm.conf cd /usr/local/php/etc/php-fpm.d/ cp www.conf.default www.conf # 管理php-fpm vi /usr/local/php/etc/php-fpm.conf pid = run/php-fpm.pid error_log = log/php-fpm.log #24行这个在php.ini设置display_errors = off时启用 向进程发送信号,就可以完成进程管理 停止: kill -int `cat /usr/local/php/var/run/php-fpm.pid` 平滑停止: kill -quit `cat /usr/local/php/var/run/php-fpm.pid` 重启:kill -usr2 `cat /usr/local/php/var/run/php-fpm.pid` 重新打开日志:kill -usr1 `cat /usr/local/php/var/run/php-fpm.pid` 如果在编译php时指定了--with-mysql=mysqlnd和--with-pdo-mysql=mysqlnd的参数,那么在生产中可能会遇到socket连接问题,解决办法是在php.ini里加入命令: pdo_mysql.default_socket=/usr/local/mysql/tmp/mysql.sock 最好是在编译php的时候,指定mysql.socket的位置: --with-mysql-sock=/usr/local/mysql/tmp/mysql.sock
配置开机自启
vim /etc/rc.local # php-fpm自动启动 /usr/local/php/sbin/php-fpm &
启动php-fpm
cd /usr/local/php sbin/php-fpm # 启动php-fpm ps -e | grep php-fpm
配置nginx和php关联
#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 { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #隐藏nginx软件版本号 server_tokens off; #激活tcp_nodelay功能,提高i/o性能 tcp_nodelay on; # 设置读取客户端请求头数据的超时时间。此处的数值为15,其单位是秒,为经验参考值 client_header_timeout 15; # 设置读取客户端请求体的超时时间 client_body_timeout 15; # 指定响应客户端的超时时间 send_timeout 25; # 上传文件大小限制 client_max_body_size 8m; #压缩配置 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/css text/xml application/javascript; gzip_vary on; #include extra/gzip.config; #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; server { listen 80; server_name www.nginx.com; root html/blog/public; #access_log logs/host.access.log main; location / { index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; } } #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; } # pass the php scripts to fastcgi server listening on 127.0.0.1:9000 # location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param path_info $fastcgi_path_info; fastcgi_param script_filename $document_root$fastcgi_script_name; include fastcgi_params; } } }
完成上面这些步骤,一个lnmp环境就配好啦,重启服务器即可。