目錄javascript
做爲一名PHP開發者,咱們必定要懂得如何搭建PHP開發環境,目前主流的PHP開發環境組合是LAMP和LNMP,本文將介紹如何在CentOS上搭建LNMP開發環境。php
wget
是一個從網絡上自動下載文件的自由工具,支持經過 HTTP、HTTPS、FTP 三個最多見的TCP/IP協議下載,並能夠可使用HTTP代理。css
sudo yum install wget
最小化安裝CentOS7時若是沒法使用ifconfig命令,則須要安裝net-tools
,若是是安裝的CentOS6版本則無需安裝html
sudo yum install net-tools
yum -y update
sudo yum install vim
vim ~/.vimrc set nu #輸入 set nu 後退出保存
(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
# 這裏咱們把安裝包都放到了/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 &
/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測試是否成功
(1)cmake是新版MySQL的編譯工具,必須安裝
sudo yum install gcc gcc-c++ cmake ncurses-devel
若是你的系統是CentOS7,你還須要安裝以下依賴
sudo yum install perl perl-devel autoconf
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
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
service mysqld start mysql -u root -p #第一次登錄不須要密碼,回車便可 set password for root@localhost = password('root'); #修改密碼
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
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
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 &
cd /usr/local/php sbin/php-fpm # 啓動PHP-FPM ps -e | grep php-fpm
#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,查詢/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環境就配好啦,重啓服務器便可。