目錄
作為一名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)境就配好啦,重啟服務器即可汽烦。