LNMP 環(huán)境搭建

目錄

作為一名PHP開發(fā)者腿准,我們一定要懂得如何搭建PHP開發(fā)環(huán)境离钝,目前主流的PHP開發(fā)環(huán)境組合是LAMP和LNMP,本文將介紹如何在CentOS上搭建LNMP開發(fā)環(huán)境拜银。

準備工作

安裝wget

wget?是一個從網(wǎng)絡上自動下載文件的自由工具牌废,支持通過 HTTP肖方、HTTPS、FTP 三個最常見的TCP/IP協(xié)議下載非洲,并可以可以使用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?需要先將官網(wǎng)下載的源碼進行編譯两踏,編譯依賴 gcc 環(huán)境败京,如果沒有 gcc 環(huán)境,則需要安裝gcc-c++梦染。

(2)?PCRE是一個Perl庫赡麦,中文"Perl兼容的正則表達式庫"。安裝Nginx是為了使Nginx支持具備URI重寫功能的rewrite模塊,如果不安裝pcre庫隧甚,則Nginx無法使用rewrite模塊功能车荔,Nginx的Rewrite模塊功能幾乎是企業(yè)應用必須。

(3)?zlib?庫提供了很多種壓縮和解壓縮的方式戚扳, nginx 使用 zlib 對 http 包的內(nèi)容進行 gzip 忧便,所以需要在 Centos 上安裝 zlib 庫。

(4)?OpenSSL是一個強大的安全套接字層密碼庫帽借,囊括主要的密碼算法珠增、常用的密鑰和證書封裝管理功能及 SSL 協(xié)議,并提供豐富的應用程序供測試或其它目的使用砍艾。 nginx 不僅支持 http 協(xié)議蒂教,還支持 https(即在ssl協(xié)議上傳輸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目錄下,便于統(tǒng)一管理cd /usr/src? #切換到軟件包目錄wget https://nginx.org/download/nginx-1.14.1.tar.gz? #下載nginx源碼包useradd nginx -s /sbin/nologin -M? #創(chuàng)建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? #創(chuàng)建nginx的軟鏈接

安裝說明

--prefix=PATH? ? #設置安裝路勁

--user=USER? ? ? #進程用戶權限

--group=GROUP? ? #進程用戶組權限

--with-http_stub_status_module? #激活狀態(tài)信息

--with-http_ssl_module? #激活ssl功能

配置環(huán)境變量

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

如果你的系統(tǒng)是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

配置環(huán)境變量

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? # 修改時區(qū)(大約在932行)expose_php = Off? # 避免PHP信息暴露在http頭中(大約369行) display_errors = Off# 生產(chǎn)環(huán)境設置為off,開發(fā)環(huán)境就設置為On,便于調(diào)試 說明:設置了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時啟用向進程發(fā)送信號,就可以完成進程管理停止: 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的參數(shù)桃焕,那么在生產(chǎn)中可能會遇到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

配置環(huán)境變量

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關聯(lián)

#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;? ? # 設置讀取客戶端請求頭數(shù)據(jù)的超時時間观堂。此處的數(shù)值為15让网,其單位是秒,為經(jīng)驗參考值? ? 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不執(zhí)行問題

CentOS7中师痕,默認開機不再執(zhí)行/etc/rc.local,查詢/etc/rc.local里的內(nèi)容可以發(fā)現(xiàn)如下描述:

#!/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.

翻譯過來就是

#這個文件是為了兼容性的問題而添加的溃睹。##強烈建議創(chuàng)建自己的systemd服務或udev規(guī)則來在開機時運行腳本而不是使用這個文件。##與以前的版本引導時的并行執(zhí)行相比較胰坟,這個腳本將不會在其他所有的服務后執(zhí)行因篇。##請記住,你必須執(zhí)行“chmod +x /etc/rc.d/rc.local”來確保確保這個腳本在引導時執(zhí)行腕铸。

所以要解決開機不執(zhí)行問題惜犀,只需要執(zhí)行下面的命令然后重啟服務器铛碑。

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

完成上面這些步驟狠裹,一個LNMP環(huán)境就配好啦,重啟服務器即可汽烦。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涛菠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俗冻,老刑警劉巖礁叔,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異迄薄,居然都是意外死亡琅关,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門讥蔽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涣易,“玉大人,你說我怎么就攤上這事冶伞⌒轮ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵响禽,是天一觀的道長徒爹。 經(jīng)常有香客問我,道長芋类,這世上最難降的妖魔是什么隆嗅? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮梗肝,結果婚禮上榛瓮,老公的妹妹穿的比我還像新娘。我一直安慰自己巫击,他們只是感情好禀晓,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坝锰,像睡著了一般粹懒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顷级,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天凫乖,我揣著相機與錄音,去河邊找鬼弓颈。 笑死帽芽,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的翔冀。 我是一名探鬼主播导街,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纤子!你這毒婦竟也來了搬瑰?” 一聲冷哼從身側響起款票,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泽论,沒想到半個月后艾少,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡翼悴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年缚够,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹦赎。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡潮瓶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钙姊,到底是詐尸還是另有隱情毯辅,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布煞额,位于F島的核電站思恐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膊毁。R本人自食惡果不足惜胀莹,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婚温。 院中可真熱鬧描焰,春花似錦、人聲如沸栅螟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽力图。三九已至步绸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吃媒,已是汗流浹背瓤介。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赘那,地道東北人刑桑。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像募舟,于是被迫代替她去往敵國和親祠斧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354