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.1.tar.gz  #下载nginx源码包useradd nginx -s /sbin/nologin -M  #创建nginx用户用于管理nginx程序tar zxvf nginx-1.14.1.tar.gz  #解压nginx源码包cd nginx-1.14.1#预编译./configure \--user=nginx \--group=nginx \--prefix=/usr/local/nginx-1.14.1 \--with-http_stub_status_module \--with-http_ssl_modulemake && make install #编译 和 安装cd /usr/localln -s nginx-1.14.1 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.42.tar.gz

tar zxvf mysql-5.6.42.tar.gz

cd mysql-5.6.42

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.42 \

-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.42/tmp/mysql.sock \

-DMYSQL_DATADIR=/usr/local/mysql-5.6.42/data \

-DDEFAULT_CHARSET=utf8mb4 \

-DDEFAULT_COLLATION=utf8mb4_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.42

chown mysql.mysql /usr/local/mysql-5.6.42/data

mkdir tmp

chown mysql.mysql /usr/local/mysql-5.6.42/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.42 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:$PATH

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  libzip-devel

编译安装PHP

cd /usr/src

wget http://hk1.php.net/get/php-7.2.12.tar.gz/from/this/mirror -O php-7.2.12.tar.gz

tar zxvf php-7.2.12.tar.gz

cd  php-7.2.12

./configure \

--prefix=/usr/local/php-7.2.12 \

--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-bcmath \

--enable-mbstring \

--enable-static \

--enable-zip \

--enable-sockets \

--enable-xml

make && make install

PHP配置

cd /usr/localln -s php-7.2.12 phpcp  /usr/src/php-7.2.12/php.ini-development /usr/local/php-7.2.12/lib/php.ini vim /usr/local/php/lib/php.inidate.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.confcd /usr/local/php/etc/php-fpm.d/cp www.conf.default www.conf# 管理PHP-FPMvim /usr/local/php/etc/php-fpm.confpid = run/php-fpm.piderror_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/profile

export PATH=/usr/local/php/bin:$PATH

source /etc/profile

配置开机自启

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;        }    }}

CentOS7开机/etc/rc.local不执行问题

CentOS7中,默认开机不再执行/etc/rc.local,查询/etc/rc.local里的内容可以发现如下描述:

#!/bin/bash# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES## It is highly advisable to create own systemd services or udev rules# to run scripts during boot instead of using this file.## In constrast to previous versions due to parallel execution during boot# this script will NOT be run after all other services.##Please note that you must run'chmod +x /etc/rc.d/rc.local'to ensure# that this script will be executed during boot.

翻译过来就是

#这个文件是为了兼容性的问题而添加的。##强烈建议创建自己的systemd服务或udev规则来在开机时运行脚本而不是使用这个文件。##与以前的版本引导时的并行执行相比较,这个脚本将不会在其他所有的服务后执行。##请记住,你必须执行“chmod +x /etc/rc.d/rc.local”来确保确保这个脚本在引导时执行。

所以要解决开机不执行问题,只需要执行下面的命令然后重启服务器。

chmod +x /etc/rc.d/rc.local

完成上面这些步骤,一个LNMP环境就配好啦,重启服务器即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,738评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,377评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,774评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,032评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,015评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,239评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,724评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,374评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,410评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,457评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,132评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,733评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,804评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,022评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,515评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,116评论 2 341