MAC使用php7搭建LNMP環境
1、安裝MySQL:
檢視MySQL可用版本資訊:
brew info mysql
我這邊看到的版本是5.7.10:
mysql: stable 5.7.10 (bottled)
接下來安裝MySQL5.7.10:
brew install mysql
安裝完成之後按照提示將plist檔案放入~/Library/LaunchAgents/中並load,設定MySQL開機啟動:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
啟動MySQL:
mysql.server start
啟動之後由於MySQL預設沒有設定密碼,所以要設定root的密碼:
mysql -uroot -p
提示輸入密碼的時候直接按回車就登入了,登入MySQL後提示如下:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.10 Homebrew
接下來設定root的密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
設定密碼的時候最好設定一個強密碼,關於強密碼的規則,官方有如下說明:
Note
MySQL's validate_password plugin is installed by default. This will require that passwords contain at least one upper case letter, one lower case letter, one digit, and one special character, and that the total password length is at least 8 characters.
為了方便使用,我們經常會建立任意連線的root使用者:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MyNewPass4!' WITH GRANT OPTION;
重新整理許可權使命令生效:
flush privileges;
退出MySQL:exit
;
複製mysql配置檔案:
sudo cp /usr/local/Cellar/mysql/5.7.10/support-files/my-default.cnf /etc/my.cnf
在/etc/my.cnf 中的[mysqld]後新增lower_case_table_names=1
,重啟MYSQL服務,這時已設定成功:不區分表名的大小寫;
PS.lower_case_table_names
引數詳解: 0:區分大小寫,1:不區分大小寫
2、安裝php7:
①、下載php7:
mkdir ~/php7 && cd ~/php7
git clone https://git.php.net/repository/php-src.git
②、構建php7:
cd php-src
./buildconf
③、編譯php:
PS.編譯的時候如果記憶體1G以下請在結尾加上:--disable-fileinfo
,
安裝php7時需要用安裝re2c、bison、ffmpeg、mcrypt、libiconv、gd、openssl:
安裝re2c:
brew install re2c
安裝bison(3.0.4):
brew install bison
brew switch bison 3.0.4
brew link bison --force
sudo mv /usr/bin/bison /usr/bin/bison.orig
sudo ln -s /usr/local/bin/bison /usr/bin/bison
安裝ffmpeg:
brew install ffmpeg
安裝openssl:
brew install openssl
brew link openssl --force
安裝mcrypt
:
brew install mcrypt
安裝libiconv
:
brew install libiconv
如果想要用openssl,剛才已經安裝了openssl,但是系統自帶了openssl,所以要用安裝的openssl替換系統自帶的openssl:
sudo ln -sf /usr/local/opt/openssl/bin/openssl /usr/bin/openssl
替換完成之後輸入openssl version
就可以看到是上面用brew安裝的openssl了,因為在編譯php過程中需要openssl的header,但是安裝的時候都沒有
編譯php7:
./configure --prefix=/usr/local/php7 --exec-prefix=/usr/local/php7 --bindir=/usr/local/php7/bin --sbindir=/usr/local/php7/sbin --includedir=/usr/local/php7/include --libdir=/usr/local/php7/lib/php --mandir=/usr/local/php7/php/man --with-config-file-path=/usr/local/php7/etc --enable-bcmath --enable-calendar --enable-debug --enable-exif --enable-fileinfo --enable-filter --enable-fpm --enable-ftp --enable-gd-jis-conv --enable-gd-native-ttf --enable-hash --enable-json --enable-libxml --enable-maintainer-zts --enable-mbregex --enable-mbstring --enable-mysqlnd --enable-opcache --enable-opcache-file --enable-pcntl --enable-pdo --enable-session --enable-shared --enable-shmop --enable-simplexml --enable-soap --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --enable-xml --enable-zip --with-bz2 --with-curl --with-fpm-user=www --with-fpm-group=www --with-freetype-dir=/usr --with-gd --with-gettext --with-gmp --with-iconv --with-jpeg-dir=/usr --with-mcrypt=/usr/include --with-mhash --with-mysql-sock=/var/lib/mysql/mysql.sock --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pear --with-png-dir=/usr --with-xmlrpc --with-zlib -with-libxml-dir=/usr
如果編譯過程中提示:Cannot locate header file libintl.h
,請執行如下操作:
①、安裝gettext:
brew install gettext
②、修改configure檔案:
vi configure
找到如下檔案:
for i in $PHP_GETTEXT /usr/local /usr ; do
替換為:
for i in $PHP_GETTEXT /usr/local /usr /usr/local/opt/gettext; do
如果提示openssl
錯誤,在編譯的時候設定openssl
的路徑,
--with-openssl=/usr/local/opt/openssl/
④、執行完畢之後進行編譯並安裝:
make && make install
如果嘗試很多辦法都提示ssl出錯,在編譯的時候就不要加上openssl了
⑤、安裝完成之後配置php7:
sudo ln -s /usr/local/php7/bin/php* /usr/bin/
sudo ln -s /usr/local/php7/sbin/php-fpm /usr/bin
cp php.ini-production /usr/local/php7/etc/php.ini
cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
sudo ln -s /usr/local/php7/etc/php.ini /etc/php.ini
sudo ln -s /usr/local/php7/etc/php-fpm.conf /etc/php-fpm.conf
cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
在安轉完成之後會有提示:
You may want to add: /usr/local/php7/lib/php/php to your php.ini include_path
接下來編輯php.ini,
vi /etc/php.ini
找到include_path
,在php.ini
中加入include_path
:
include_path = "/usr/local/php7/lib/php/php"
檢視php版本:
php -v
顯示結果如下:
PHP 7.1.0-dev (cli) (built: Feb 4 2016 09:02:09) ( ZTS DEBUG )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
更改配置,使php7支援opcache,在安裝完成時會提示:
Installing shared extensions: /usr/local/php7/lib/php/extensions/debug-zts-20151012/
這個路徑是擴充套件包路徑,將路徑複製下來,找到extension_dir並將剛才的路徑新增到php.ini中,
vi /etc/php.ini
在php.ini中加入extension_dir的配置:
extension_dir = "/usr/local/php7/lib/php/extensions/debug-zts-20151012/"
開啟opcache擴充套件:
在php.ini中找到opcache,加入opcache.so
sudo mkdir -p /var/log/opcache
vi /etc/php.ini
引用opcache.so:
zend_extension=opcache.so
並修改opcache的配置:
opcache.enable=1
opcache.enable_cli=1
opcache.file_cache="/var/log/opcache/"
現在檢視php版本資訊,顯示結果如下:
PHP 7.1.0-dev (cli) (built: Feb 4 2016 09:02:09) ( ZTS DEBUG )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
現在opcache擴充套件已經加入了,修改php-fpm的配置:
vi /etc/php-fpm.conf
修改配置:
pid = run/php-fpm.pid
error_log = log/php-fpm.log
啟動php-fpm:
php-fpm -D
這樣會提示兩個警告:
[04-Feb-2016 09:45:25] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[04-Feb-2016 09:45:25] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
停止php-fpm的命令如下:
kill -INT `cat /usr/local/php7/var/run/php-fpm.pid`
重啟php-fpm的命令如下:
kill -USR2 `cat /usr/local/php7/var/run/php-fpm.pid`
接下來開始安裝nginx:
3、安裝nginx:
brew install nginx
安裝完成的nginx,預設的root路徑如下:
Docroot is: /usr/local/var/www
nginx的配置檔案目錄如下:
/usr/local/etc/nginx/nginx.conf
nginx虛擬站點目錄如下:
nginx will load all files in /usr/local/etc/nginx/servers/.
開機啟動nginx:
ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
啟動nginx:
nginx
nginx監聽80埠是需要root許可權的,現在nginx預設監聽的是8080埠:
sudo chown root:wheel /usr/local/Cellar/nginx/1.8.1/bin/nginx
sudo chmod u+s /usr/local/Cellar/nginx/1.8.1/bin/nginx
配置nginx,先將nginx的配置檔案放至/etc下:
sudo ln -s /usr/local/etc/nginx/nginx.conf /etc
sudo ln -s /usr/local/etc/nginx/servers /etc/nginxservers
修改nginx監聽埠:
sudo vi /etc/nginx.conf
修改配置檔案如下:
#user nobody;
worker_processes 4;
error_log /usr/local/var/log/error.log;
error_log /usr/local/var/log/error.log notice;
error_log /usr/local/var/log/error.log info;
pid /usr/local/var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
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 /usr/local/var/log/access.log main;
port_in_redirect off;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
include servers/*.conf;
}
然後在/etc/nginxservers/下建立default.conf,編輯default.conf,加入以下內容:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
# 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_intercept_errors on;
include /usr/local/etc/nginx/fastcgi.conf;
}
}
#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;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
此時,LNMP已經搭建完畢,重啟php-fpm和nginx。