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 包的內容進行 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,便于調試 說明:設置了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" ' # 'statusbody_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 (!-erequest_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_INFOfastcgi_path_info; fastcgi_param SCRIPT_FILENAME document_rootfastcgi_script_name; include fastcgi_params; } }}

CentOS7開機/etc/rc.local不執(zhí)行問題

CentOS7中,默認開機不再執(zhí)行/etc/rc.local,查詢/etc/rc.local里的內容可以發(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)境就配好啦,重啟服務器即可。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容