LNMP環境搭建

做爲一名PHP開發者,咱們必定要懂得如何搭建PHP開發環境,目前主流的PHP開發環境組合是LAMP和LNMP,本文將介紹如何在CentOS上搭建LNMP開發環境。php

準備工做

安裝wget

wget 是一個從網絡上自動下載文件的自由工具,支持經過 HTTP、HTTPS、FTP 三個最多見的TCP/IP協議下載,並能夠可使用HTTP代理。css

sudo yum install wget

安裝net-tools

最小化安裝CentOS7時若是沒法使用ifconfig命令,則須要安裝net-tools,若是是安裝的CentOS6版本則無需安裝html

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++。java

(2) PCRE是一個Perl庫,中文"Perl兼容的正則表達式庫"。安裝Nginx是爲了使Nginx支持具有URI重寫功能的rewrite模塊,若是不安裝pcre庫,則Nginx沒法使用rewrite模塊功能,Nginx的Rewrite模塊功能幾乎是企業應用必須。node

(3) zlib 庫提供了不少種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,因此須要在 Centos 上安裝 zlib 庫。mysql

(4) OpenSSL是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、經常使用的密鑰和證書封裝管理功能及 SSL 協議,並提供豐富的應用程序供測試或其它目的使用。 nginx 不只支持 http 協議,還支持 https(即在ssl協議上傳輸http),因此須要安裝 OpenSSL 庫 。nginx

yum -y install gcc gcc-c++ zlib zlib-devel
yum -y install pcre pcre-devel openssl openssl-devel

說明: yum安裝方式安裝的pcre版本比較低,不過基本不影響使用c++

檢查基礎依賴包

上面的依賴安裝完成後能夠經過以下命令檢查各個依賴安裝是否成功正則表達式

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_v2_module \
--with-http_ssl_module \
--with-http_stub_status_module

make && make install #編譯 和 安裝

cd /usr/local
ln -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

編譯安裝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/local

ln -s php-7.2.12 php
cp  /usr/src/php-7.2.12/php.ini-development /usr/local/php-7.2.12/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
vim /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/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 16 8k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/css text/xml text/plain 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環境就配好啦,重啓服務器便可。

相關文章
相關標籤/搜索