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.0.tar.gz#下載nginx原始碼包 useradd nginx -s /sbin/nologin -M#建立nginx使用者用於管理nginx程式 tar zxvf nginx-1.14.0.tar.gz#解壓nginx原始碼包 cd nginx-1.14.0 #預編譯 ./configure \ --user=nginx \ --group=nginx \ --prefix=/usr/local/nginx-1.14.0 \ --with-http_stub_status_module \ --with-http_ssl_module make && make install #編譯 和 安裝 cd /usr/local ln -s nginx-1.14.0 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測試是否成功
安裝SQL/">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.41.tar.gz tar zxvf mysql-5.6.41.tar.gz cd mysql-5.6.41 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.41 \ -DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.41/tmp/mysql.sock \ -DMYSQL_DATADIR=/usr/local/mysql-5.6.41/data \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_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.41 chown mysql.mysql /usr/local/mysql-5.6.41/data mkdir tmp chown mysql.mysql /usr/local/mysql-5.6.41/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.41 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" 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-develzlib 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.10.tar.gz/from/this/mirror -O php-7.2.10.tar.gz tar zxvf php-7.2.10.tar.gz cdphp-7.2.10 ./configure \ --prefix=/usr/local/php-7.2.10 \ --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-mbstring \ --enable-static \ --enable-zip \ --enable-sockets \ --enable-xml make && make install
PHP配置
cd /usr/local ln -s php-7.2.10 php cp/usr/src/php-7.2.10/php.ini-development /usr/local/php-7.2.10/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 vi /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/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關聯
#usernobody; worker_processes1; #error_loglogs/error.log; #error_loglogs/error.lognotice; #error_loglogs/error.loginfo; #pidlogs/nginx.pid; events { use epoll; worker_connections1024; } http { includemime.types; default_typeapplication/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_formatmain'$remote_addr - $remote_user [$time_local] "$request" ' #'$status $body_bytes_sent "$http_referer" ' #'"$http_user_agent" "$http_x_forwarded_for"'; #access_loglogs/access.logmain; sendfileon; #tcp_nopushon; #keepalive_timeout0; keepalive_timeout65; server { listen80; server_namewww.nginx.com; root html/blog/public; #access_loglogs/host.access.logmain; location / { indexindex.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; } } #error_page404/404.html; # redirect server error pages to the static page /50x.html # error_page500 502 503 504/50x.html; location = /50x.html { roothtml; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php { fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; } } }
完成上面這些步驟,一個LNMP環境就配好啦,重啟伺服器即可。