安装Homebrew
安装Homebrew
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
检查是否存在冲突
brew doctor
对Homebrew更新升级
brew update && brew upgrade
安装Nginx
安装nginx
brew install nginx
安装oh-my-zsh
mac 自带zsh,在终端中输入cat/etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
输入zsh --version,可以查看zsh版本。
输入brew install zsh,可以安装最新版的zsh。
输入 chsh -s /bin/zsh,并重启终端,可以将系统默认的终端shell改为zsh。
然后安装oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
安装php-fpm
添加源
brew tap homebrew/dupes
brew tap homebrew/php
安装php-fpm
brew install php56 --whitout-apache --with-imap --with-tidy --with-debug --with-pgsql --with-mysql --with-fpm
将PHP、PHP-FPM加入环境变量
在终端中
vim .zshrc
找到export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"这一行,在其后面添加
homebrew下载php、php-fpm路径配置,使其如下所示
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH"
export PATH="$(brew --prefix homebrew/php/php56)/sbin:$PATH"
$(brew --prefix homebrew/php/php56)/bin是使用homebrew下载的php
$(brew --prefix homebrew/php/php56)/sbin是使用homebrew下载的php-fpm
/usr/bin是MAC自带的php
/usr/sbin是MAC自带php-fpm
然后使其立即生效
source .zshrc
查看$PATH,最前面的路径先后后面的路径
➜~echo $PATH
/usr/local/opt/php56/sbin:/usr/local/opt/php56/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
查看php、php-fpm版本
➜~php -v
PHP 5.6.19 (cli) (built: Mar 24 2016 20:55:30) (DEBUG)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
➜~php-fpm -v
PHP 5.6.19 (fpm-fcgi) (built: Mar 24 2016 20:55:33) (DEBUG)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
➜~/usr/bin/php -v
PHP 5.5.31 (cli) (built: Feb 20 2016 20:33:10)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
➜~/usr/sbin/php-fpm -v
PHP 5.5.31 (fpm-fcgi) (built: Feb 20 2016 20:33:26)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
从上面可见,配置的环境变量是正确的,homebrew先于系统自带的执行。
//启动php-fmp
php-fmp
参考
MySQL PHP Nginx Redis Memcache
安装MySQL
brew install mysql
执行完如上命令后,有如下输出结果
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
To connect run:
mysql -uroot
To have launchd start mysql at login:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Or, if you don't want/need launchctl, you can just run:
mysql.server start
从上面的一段文字来看,安装mysql后,用户名是root,但是没有密码。如果设置密码的话,执行mysql_secure_installation命令。如果不想设置密码的话,可以执行mysql.server start,然后mysql -uroot,如下图所示
nhf:~ nanhangfei$mysql.server start
Starting MySQL
. SUCCESS!
nhf:~ nanhangfei$ mysql -uroot
Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.11 Homebrew
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
如果想要设置root的密码的话,执行下面的命令,做些相关的设置。
mysql_secure_installation
安装phpmyadmin
brew install phpmyadmin
配置Nginx
首先,为我们的配置文件创建一些文件夹
mkdir -p /usr/local/etc/nginx/logs
mkdir -p /usr/local/etc/nginx/sites-available
mkdir -p /usr/local/etc/nginx/sites-enabled
mkdir -p /usr/local/etc/nginx/conf.d
mkdir -p /usr/local/etc/nginx/ssl
sudo mkdir -p /var/www
sudo chown :staff /var/www
sudo chmod 775 /var/www
修改nginx配置文件
vim /usr/local/etc/nginx/nginx.conf
替换其内容为
worker_processes 1;
error_log /usr/local/etc/nginx/logs/error.log debug;
events {
worker_connections 256;
}
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/etc/nginx/logs/access.log main;
sendfile on;
keepalive_timeout 65;
index index.html index.php;
include /usr/local/etc/nginx/sites-enabled/*;
}
然后创建php-fpm配置文件:
vim /usr/local/ect/nginx/conf.d/php-fpm
其内容如下,这个文件的意思是nginx中的php文件交由php-fmp解析
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
创建默认虚拟主机default:
vim /usr/local/etc/nginx/sites-available/default
其内容如下所示
server {
listen 80;
server_name localhost;
root /var/www/;
access_log /usr/local/etc/nginx/logs/default.access.log main;
location / {
include /usr/local/etc/nginx/conf.d/php-fpm;
}
location = /info {
allow 127.0.0.1;
deny all;
rewrite (.*) /.info.php;
}
error_page 404 /404.html;
error_page 403 /403.html;
}
创建ssl默认虚拟主机default-ssl
vim /usr/local/etc/nginx/sites-available/default-ssl
其内容如下所示:
server {
listen 443;
server_name localhost;
root /var/www/;
access_log /usr/local/etc/nginx/logs/default-ssl.access.log main;
ssl on;
ssl_certificate ssl/localhost.crt;
ssl_certificate_key ssl/localhost.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
include /usr/local/etc/nginx/conf.d/php-fpm;
}
location = /info {
allow 127.0.0.1;
deny all;
rewrite (.*) /.info.php;
}
error_page 404 /404.html;
error_page 403 /403.html;
}
创建phpmyadmin虚拟主机
vim /usr/local/etc/nginx/sites-available/phpmyadmin
其内容如下所示
server {
listen 306;
server_name localhost;
root /usr/local/share/phpmyadmin;
error_log /usr/local/etc/nginx/logs/phpmyadmin.error.log;
access_log /usr/local/etc/nginx/logs/phpmyadmin.access.log main;
ssl on;
ssl_certificate ssl/phpmyadmin.crt;
ssl_certificate_key ssl/phpmyadmin.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm index.php;
include /usr/local/etc/nginx/conf.d/php-fpm;
}
}
设置SSL
mkdir-p /usr/local/etc/nginx/ssl
openssl req -new -newkey rsa:4096-days365-nodes -x509 -subj"/C=US/ST=State/L=Town/O=Office/CN=localhost"-keyout /usr/local/etc/nginx/ssl/localhost.key -out /usr/local/etc/nginx/ssl/localhost.crt
openssl req -new -newkey rsa:4096-days365-nodes -x509 -subj"/C=US/ST=State/L=Town/O=Office/CN=phpmyadmin"-keyout /usr/local/etc/nginx/ssl/phpmyadmin.key -out /usr/local/etc/nginx/ssl/phpmyadmin.crt
创建虚拟主机软连接,开启虚拟主机
ln -sfv /usr/local/etc/nginx/sites-available/default /usr/local/etc/nginx/sites-enabled/default
ln -sfv /usr/local/etc/nginx/sites-available/default-ssl /usr/local/etc/nginx/sites-enabled/default-ssl
ln -sfv /usr/local/etc/nginx/sites-available/phpmyadmin /usr/local/etc/nginx/sites-enabled/phpmyadmin
MySQL PHP Nginx Redis Memcache
安装php-fpm、nginx、mysql、phpmyadmin是参考的这两篇文章, 但在安装过程中,会出现几个问题,但原文章并没有说明。下面是碰到的问题及解决方案。
启动php-fmp、nginx、mysql
php-fmp
确认php-fpm监听9000端口
➜~sudo lsof -Pni4 | grep LISTEN | grep php
Password:
php-fpm32898root8uIPv4 0x9177969b057870850t0TCP 127.0.0.1:9000 (LISTEN)
php-fpm32899_www0uIPv4 0x9177969b057870850t0TCP 127.0.0.1:9000 (LISTEN)
php-fpm32900_www0uIPv4 0x9177969b057870850t0TCP 127.0.0.1:9000 (LISTEN)
php-fpm32901_www0uIPv4 0x9177969b057870850t0TCP 127.0.0.1:9000 (LISTEN)
启动nginx
sudo nginx
重新加载配置|重启|停止|退出
nginx -s reload|reopen|stop|quit
确认nginx在监听80端口
➜~sudo lsof -Pni4 | grep LISTEN | grep nginx
或者
index.html复制到nginx的根目录/var/www中去
➜~curl -IL http://localhost/index.html
HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Sun, 27 Mar 2016 03:18:30 GMT
Content-Type: text/html
Content-Length: 611
Last-Modified: Thu, 24 Mar 2016 23:16:35 GMT
Connection: keep-alive
ETag: "56f47553-263"
Accept-Ranges: bytes
启动mysql
mysql.server start
先登录
mysql -uroot -p
确定mysql端口
mysql> show global variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port| 3306|
+---------------+-------+
如果安装PHP时出现如下错误
checking if the location of ZLIB install directory is defined... no
configure: error: Cannot find libz
解决方式是在终端中执行如下命令
xcode-select --install
参考
configure: error: Cannot find libz
启动php-fmp时的问题
➜~/usr/local/opt/php56/sbin/php-fpm
[26-Mar-2016 12:15:40] NOTICE: PHP message: PHP Warning:PHP Startup: mcrypt: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHPcompiled with build ID=API20131226,NTS,debug
These options need to match
in Unknown on line 0
Warning:PHP Startup: mcrypt: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHPcompiled with build ID=API20131226,NTS,debug
These options need to match
in Unknown on line 0
Unknown(0) : Warning - PHP Startup: mcrypt: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHPcompiled with build ID=API20131226,NTS,debug
These options need to match
[26-Mar-2016 12:15:40] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[26-Mar-2016 12:15:40] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[26-Mar-2016 12:15:40] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
[26-Mar-2016 12:15:40] ERROR: FPM initialization failed
解决办法,在终端执行如下命令
brew reinstall php56-mcrypt --build-from-source
参考 PHP Warning: PHP Startup: ????????: Unable to initialize module
上一步完成后,又出现如下问题
➜~sudo /usr/local/opt/php56/sbin/php-fpm
Password:
[26-Mar-2016 12:40:10] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
[26-Mar-2016 12:40:10] ERROR: FPM initialization failed
查看谁占用了9000端口
➜~sudo lsof -i:9000
COMMAND PID USERFDTYPEDEVICE SIZE/OFF NODE NAME
php-fpm 707 root7uIPv4 0x9177969b065b477d0t0TCP localhost:cslistener (LISTEN)
php-fpm 708 _www0uIPv4 0x9177969b065b477d0t0TCP localhost:cslistener (LISTEN)
php-fpm 709 _www0uIPv4 0x9177969b065b477d0t0TCP localhost:cslistener (LISTEN)
php-fpm 710 _www0uIPv4 0x9177969b065b477d0t0TCP localhost:cslistener (LISTEN)
杀掉进程id 707、708、709、710
➜~sudo kill -9 707
➜~sudo kill -9 708
➜~sudo kill -9 709
➜~sudo kill -9 710
➜~sudo /usr/local/opt/php56/sbin/php-fpm
[26-Mar-2016 12:55:29] NOTICE: fpm is running, pid 32706
[26-Mar-2016 12:55:29] NOTICE: ready to handle connections
确认php-fpm监听9000端口
➜~sudo lsof -Pni4 | grep LISTEN | grep php
Password:
php-fpm32898root8uIPv4 0x9177969b057870850t0TCP 127.0.0.1:9000 (LISTEN)
php-fpm32899_www0uIPv4 0x9177969b057870850t0TCP 127.0.0.1:9000 (LISTEN)
php-fpm32900_www0uIPv4 0x9177969b057870850t0TCP 127.0.0.1:9000 (LISTEN)
php-fpm32901_www0uIPv4 0x9177969b057870850t0TCP 127.0.0.1:9000 (LISTEN)
➜~
➜~php-fpm -D
[25-Mar-2016 20:23:28] ERROR: failed to open configuration file '/private/etc/php-fpm.conf': No such file or directory (2)
[25-Mar-2016 20:23:28] ERROR: failed to load configuration file '/private/etc/php-fpm.conf'
[25-Mar-2016 20:23:28] ERROR: FPM initialization failed
➜~
解决方法:
php-fpm --fpm-config /usr/local/etc/php/5.6/php-fpm.conf
又出现了如下错误
➜~php-fpm --fpm-config /usr/local/etc/php/5.6/php-fpm.conf
[25-Mar-2016 20:24:52] ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
[25-Mar-2016 20:24:52] ERROR: failed to post process the configuration
[25-Mar-2016 20:24:52] ERROR: FPM initialization failed
➜~
vim /usr/local/etc/php/5.6/php-fpm.conf
然后添加,error_log = /usr/local/var/log/php-fpm.log 保存
➜~php-fpm --fpm-config /usr/local/etc/php/5.6/php-fpm.conf
[25-Mar-2016 20:29:54] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[25-Mar-2016 20:29:54] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[25-Mar-2016 20:29:54] NOTICE: fpm is running, pid 1026
[25-Mar-2016 20:29:54] NOTICE: ready to handle connections
参考
Nginx的网站目录
配置文件路径: /usr/local/etc/nginx/nginx.conf
默认的网站根目录: /usr/local/opt//nginx/html
启动nginx问题
nginx: [error] open() “/usr/local/var/run/nginx.pid” failed
参考http://www.inbeijing.org/archives/1290
➜~sudo nginx
nginx: [warn] 1024 worker_connections exceed open file resource limit: 256
因为ulimit -n的值为256,所以将/usr/local/etc/nginx/nginx.conf配置文件中的worker_connections设置为256