Apple 在10月5日正式发布了macOS High Sierra,我听说最新的APFS 磁盘类型会大大提高 SSD 效率,很早以前就升级到 Beta 版了。经过1个多月的初体验,我总结了一些经验,在这里和大家分享。 首先是一些关于在最新 Macos 下搭建LNMP开发环境的流程建议,直接进入正题:
Preparing 安装 Homebrew、Ohmyzsh、开发常用包&软件
1.1 Homebrew
Homebrew又叫Brew,是MacOS上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,和linux系统中的yum非常相似,只需要一个命令,非常方便。官方网站:http://brew.sh 安装方法(打开 Terminal 终端,输入):
代码语言:javascript复制/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
检验安装成功方法(打开 Terminal 终端,输入):
代码语言:javascript复制brew doctor
安装常用软件包(打开 Terminal 终端,输入):
代码语言:javascript复制brew install wget
brew install autoconf
brew install openssl
Brew 常用语句(打开 Terminal 终端,输入):
代码语言:javascript复制#我这里以操作 php70 为例
brew update #更新brew可安装包,建议每次执行一下
brew search php70 #搜索php7.0
brew tap josegonzalez/php #安装扩展<gihhub_user/repo>
brew tap #查看安装的扩展列表
brew install php70 #安装php7.0
brew remove php70 #卸载php7.0
brew upgrade php70 #升级php7.0
brew options php70 #查看php7.0安装选项
brew info php70 #查看php7.0相关信息
brew home php70 #访问php7.0官方网站
人在天朝的话,极有可能出现安装速度过于缓慢的情况,有时候会让你感觉安装处于假死的状态,不必担心,耐心等待即可,切不可心烦意乱的关闭终端窗口(网上有其他教程说可以切换 brew 的源到中科大 CDN,本人亲测:中科大 CDN 虽然快很多,但是clone 下来的文件和原本源存在一定差异,更新不及时。个人建议还是耐心等待,使用原本的源)
1.2 Oh my zsh
目前常用的 Linux 系统和 Mac OS 系统的默认 Shell 都是 bash,但是真正强大的 Shell 是深藏不露的 zsh,史称『终极 Shell』,这玩意儿就像「X天 Php 从入门到放弃」系列,但这次是真的神功速成。Github:https://github.com/robbyrussell/oh-my-zsh 安装方法(打开 Terminal 终端,输入):
代码语言:javascript复制sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
人在天朝的话,极有可能出现安装速度过于缓慢的情况,有时候会让你感觉安装处于假死的状态,不必担心,耐心等待即可,切不可心烦意乱的关闭终端窗口(网上有其他教程说可以切换 brew 的源到中科大 CDN,本人亲测:中科大 CDN 虽然快很多,但是clone 下来的文件和原本源存在一定差异,更新不及时。个人建议还是耐心等待,使用原本的源)
1.3 Xcode
Xcode 是苹果出品的包含一系列工具及库的开发套件。
代码语言:javascript复制通过 AppStore 安装最新版本的 Xcode
我们一般不会用 Xcode 来开发后端项目。但这一步也是必须的,因为 Xcode 会附带安装一些如 Git 等必要的软件
1.3.1 Command Line Tools for Xcode
这一步会帮你安装许多常见的基于 Unix 的工具。Xcode 命令行工具作为 Xcode 的一部分,包含了 GCC 编译器 安装方法(打开 Terminal 终端,输入):
代码语言:javascript复制xcode-select --install
当 Xcode 和 Xcode Command Line Tools 安装完成后,你需要启动 Xcode,并点击同意接受许可协议,然后关闭 Xcode 就可以了。这一步骤也是必须的,否则 Xcode 包含的一系列开发工具都将不可用。
Working On 安装 Mysql、Php72、redis、Nginx、创建虚拟机、配置 SSL
2.1 Mysql
安装方法(打开 Terminal 终端,输入):
代码语言:javascript复制brew install mysql
MySQL的安装包相对较大,在这个步骤需要等待一段时间,下载失败后可多次尝试安装,Brew每次会自动寻找合适的下载源 设置 Mysql 开机启动方法(打开 Terminal 终端,输入):
代码语言:javascript复制ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
初始化、启动方法(打开 Terminal 终端,输入):
代码语言:javascript复制#正常初始化
/usr/local/opt/mysql/bin/mysql_secure_installation
#若出错请启动服务
brew services start mysql
安全配置方法(Terminal 终端会提示[EnglishVersion]):
代码语言:javascript复制> Enter current password for root (enter for none):
#直接 Enter,因为没有设置过
> Change the root password? [Y/n]
#是否更改 root 用户的密码
> Remove anonymous users? [Y/n]
#不需要,键入 Y
> Disallow root login remotely? [Y/n]
#禁止root远程登录,建议键入 Y
> Remove test database and access to it? [Y/n]
#删除测试数据表,建议键入 Y
> Reload privilege tables now? [Y/n]
#确保设置生效,键入 Y
检验安装成功方法(打开 Terminal 终端,输入):
代码语言:javascript复制#查看端口
ps aux | grep mysql
#测试 Mysql 连接
mysql -uroot -p你设置的密码
为了直观,这里我以密码:123456为例,测试Mysql连接时键入: mysql -uroot -p123456 安装 Phpmyadmin 方法(打开 Terminal 终端,输入):
代码语言:javascript复制brew install phpmyadmin
2.2 Php
安装准备(打开 Terminal 终端,输入):
代码语言:javascript复制brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
安装 Php72(打开 Terminal 终端,输入):
代码语言:javascript复制brew install php72
配置 Php72 环境变量(打开 Terminal 终端,输入):
代码语言:javascript复制echo 'export PATH="$(brew --prefix php72)/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="$(brew --prefix php72)/sbin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/bin:/usr/local/sbib:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
由于Mac自带了php和php-fpm,因此需要添加系统环境变量PATH来替代自带PHP版本。 验证 Php72 配置(打开 Terminal 终端,输入):
代码语言:javascript复制#brew安装的php,正常会显示 php7.2.0betaX
php -v#Mac自带的Php,正常会显示 php7.1.7
/usr/bin/php -v#brew安装的php-fpm,正常会显示 php7.2.0betaX
php-fpm -v#Mac自带的Php-fpm,正常会显示 php7.1.7
/usr/bin/php-fpm -
修改php-fpm配置文件(打开 Terminal 终端,输入):
代码语言:javascript复制vim /usr/local/etc/php/7.2/php-fpm.conf /**找到pid相关,去掉pid = run/php-fpm.pid前的“;”, 那么php-fpm的pid文件就会自动产生在 /usr/local/var/run/php-fpm.pid**/
php-fpm验证与启动(打开 Terminal 终端,输入):
代码语言:javascript复制#测试php-fpm配置
php-fpm -t
php-fpm -c /usr/local/etc/php/7.2/php.ini -y /usr/local/etc/php/7.2/php-fpm.conf -t
#启动php-fpm
php-fpm -D
php-fpm -c /usr/local/etc/php/7.2/php.ini -y /usr/local/etc/php/7.2/php-fpm.conf -D
#关闭php-fpm
kill -INT `cat /usr/local/var/run/php-fpm.pid`
#重启php-fpm
kill -USR2 `cat /usr/local/var/run/php-fpm.pid`
如果出现两个[notice],不用管,除了他们没有其他错误的花,php-fpm 是可以正常启动了。如果出现其他错误,请尝试百度搜索,或者来联系我
php-fpm设置开机启动(打开 Terminal 终端,输入):
代码语言:javascript复制ln -sfv /usr/local/opt/php72/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist
安装 composer(打开 Terminal 终端,输入):
代码语言:javascript复制curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
#改为国内源
composer config -g repo.packagist composer https://packagist.phpcomposer.com
2.3 Nginx
安装 Nginx 方法(打开 Terminal 终端,输入):
代码语言:javascript复制brew install nginx
Nginx的安装包相对较大,在这个步骤需要等待一段时间,下载失败后可多次尝试安装,Brew每次会自动寻找合适的下载源 启动 Nginx 方法(打开 Terminal 终端,输入):
代码语言:javascript复制#测试nginx配置是否有语法错误
nginx -t
#打开 nginx
sudo nginx
#重新加载配置|重启|停止|退出 nginx
nginx -s reload|reopen|stop|quit
#也可以使用Mac的launchctl来启动|停止 nginx
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
设置 Nginx 开机启动方法(打开 Terminal 终端,输入):
代码语言:javascript复制ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
设置 Nginx 监听端口权限(打开 Terminal 终端,输入):
代码语言:javascript复制sudo chown root:wheel /usr/local/Cellar/nginx/1.12.1/bin/nginx
sudo chmod u s /usr/local/Cellar/nginx/1.12.1/bin/nginx
配置Nginx.conf(打开 Terminal 终端,输入):
代码语言:javascript复制#配置需要用到的目录
mkdir -p /usr/local/var/logs/nginx
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
代码语言:javascript复制#使用 vim 编辑器编辑 nginx.conf
vim /usr/local/etc/nginx/nginx.conf
代码语言:javascript复制#nginx.conf 文件中此段内容部分,输入或修改为以下内容
pid /usr/local/var/run/nginx.pid;
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/var/logs/access.log main;
sendfile on;
keepalive_timeout 65;
port_in_redirect off;
include /usr/local/etc/nginx/sites-enabled/*;
}
vim 编辑器的退出并保存:按 ECS => 按 CAPS LOCK(大写键) => 按两下 Z 配置php-fpm 配置文件(打开 Terminal 终端,输入):
代码语言:javascript复制#使用 vim 编辑器编辑 php-fpm 配置
vim /usr/local/etc/nginx/conf.d/php-fpm
#写入以下内容
location ~ .php$ {
try_files $uri = 404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_intercept_errors on;
include /usr/local/etc/nginx/fastcgi.conf;
}
nginx 虚拟机配置(打开 Terminal 终端,输入):
代码语言:javascript复制#创建 info.php index.html 404.html 403.html文件到 /var/www 下面
vi /var/www/info.php
//输入:<?php phpinfo() ?>
vi /var/www/index.html
//输入:<html><head><meta charset="UTF-8"><title>Default Page</title></head><body><h1 align="center">Default</h1></body></html>
vi /var/www/403.html
//输入:<html><head><meta charset="UTF-8"><title>403 Page</title></head><body><h1 align="center">Default</h1></body></html>
vi /var/www/404.html
//输入:<html><head><meta charset="UTF-8"><title>404 Page</title></head><body><h1 align="center">Default</h1></body></html>
配置虚拟主机配置文件(打开 Terminal 终端,输入):
代码语言:javascript复制#使用 vim 编辑器编辑虚拟主机配置
vim /usr/local/etc/nginx/sites-available/default
#输入以下内容
server {
listen 80;
server_name localhost;
root /var/www/;
access_log /usr/local/var/logs/nginx/default.access.log main;
location / {
index index.html index.htm index.php;
autoindex on;
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虚拟主机配置文件(打开 Terminal 终端,输入):
代码语言:javascript复制#使用 vim 编辑器编辑SSL虚拟主机配置
vim /usr/local/etc/nginx/sites-available/default-ssl
#输入以下内容
server {
listen 443;
server_name localhost;
root /var/www/;
access_log /usr/local/var/logs/nginx/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虚拟主机配置文件(打开 Terminal 终端,输入):
代码语言:javascript复制#使用 vim 编辑器编辑phpmyadmin虚拟主机配置
vim /usr/local/etc/nginx/sites-available/phpmyadmin
#输入以下内容
server {
listen 306;
server_name localhost;
root /usr/local/share/phpmyadmin;
error_log /usr/local/var/logs/nginx/phpmyadmin.error.log;
access_log /usr/local/var/logs/nginx/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;
}
}
这里 phpmyadmin 默认设置为306端口,且开启 ssl 配置 SSL(打开 Terminal 终端,输入):
代码语言:javascript复制mkdir -p /usr/local/etc/nginx/ssl
openssl req -new -newkey rsa:4096 -days 365 -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 -days 365 -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
创建虚拟主机软连接并开启(打开 Terminal 终端,输入):
代码语言:javascript复制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
重新装载 nginx(打开 Terminal 终端,输入):
代码语言:javascript复制sudo nginx -s reload
可能会要求输入密码 测试 nginx 开启情况(打开浏览器,地址栏输入):
代码语言:javascript复制http://localhost
http://localhost/info.php
http://localhost/404.html
https://localhost/index.html(SSL)
https://localhost/info.php(SSL)
https://localhost/404.html(SSL)
https://localhost:306(SSL)
2.4 Redis
安装方法(打开 Terminal 终端,输入):
代码语言:javascript复制brew install redis
人在天朝的话,极有可能出现安装速度过于缓慢的情况,有时候会让你感觉安装处于假死的状态,不必担心,耐心等待即可,切不可心烦意乱的关闭终端窗口(网上有其他教程说可以切换 brew 的源到中科大 CDN,本人亲测:中科大 CDN 虽然快很多,但是clone 下来的文件和原本源存在一定差异,更新不及时。个人建议还是耐心等待,使用原本的源) 开启 Redis方法(打开 Terminal 终端,输入):
代码语言:javascript复制redis-server
之后进入了管理模式,如果看到Ready to accept connections,说明安装运行成功,直接关闭终端再打开即可 安装 Php-Redis方法(打开 Terminal 终端,输入):
代码语言:javascript复制wget https://pecl.php.net/get/redis-3.1.3.tgz
tar -zxvf redis-3.1.3.tgz
cd redis-3.1.3
phpize
./configure
make
make install
修改 php.ini方法(打开 Terminal 终端,输入):
代码语言:javascript复制#使用 vim 编辑器编辑 php.ini
vi /usr/local/etc/php/7.2/php.ini
//在文件最后加入extension=redis.so
#重启 php-fpm
sudo killall php-fpm && sudo php-fpm -D
#查看是否安装成功
php -m |grep redis