Mac OS上搭建LNMP开发环境
1. 概述
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
2. 安装Homebrew
使用Mac的程序员必不可少的一步便是安装Homebrew,他就像是centOS的yum命令和ubuntu的apt-get命令一样,通过brew命令,我们可以快速的安装一些软件包。 使用命令行安装Homebrew的命令如下:
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
使用命令检查是否存在冲突:
brew doctor
然后使用使用命令对brew进行升级:
brew update && brew upgrade
3. 安装nginx
nginx在Mac OS中可以直接使用brew命令进行安装:
brew install nginx
如果需要使用80端口的话,需要将nginx加入root组当中:
sudo cp -v /usr/local/opt/nginx/*.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
然后使用命令启动nginx服务:
sudo nginx
测试nginx是否安装成功,因为默认配置文件监听的是8080端口,所以先对8080端口发起请求:
curl -IL http://127.0.0.1:8080
结果应该类似于下:
HTTP/1.1 OK
Server: nginx/1.9.
Date: Fri, May :: GMT
Content-Type: text/html
Content-Length:
Last-Modified: Fri, May :: GMT
Connection: keep-alive
ETag: "5444dea7-264"
Accept-Ranges: bytes
nginx的相关操作如下:
sudo nginx //启动nginx
sudo nginx -s reload|reopen|quit //重新加载|重启|退出
4. 安装php-fpm
Mac 自带 php-fpm,在终端执行命令:
php-fpm
会报如下错误:
ERROR: failed to open configuration file '/private/etc/php-fpm.conf': No such file or directory ()
ERROR: failed to load configuration file '/private/etc/php-fpm.conf'
ERROR: FPM initialization failed
错误信息显示,不能打开配置文件,cd /private/etc,发现没有 php-fpm.conf 文件,但是有 php-fpm.conf.default 文件。这个文件是默认配置,我们可以复制一份,改名为 php-fpm.conf,然后再根据需要改动配置。
cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
执行 php-fpm,再次报错:
ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory ()
ERROR: failed to post process the configuration
ERROR: FPM initialization failed
错误信息显示,不能打开错误日志文件。cd /usr/var/log 发现根本没有这个目录,甚至连 var 目录都没有,加上为了避免权限问题,干脆配置到 /usr/local/var/log 目录。
修改 php-fpm.conf error_log 配置为 /usr/local/var/log/php-fpm.log,并把 user 和 group 改为和当前用户一样。
执行 php-fpm,再次报错:
NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
于是 sudo php-fpm,再次报错:
ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use ()
ERROR: FPM initialization failed
编辑 www.conf,修改 listen 为 127.0.0.1:9999。
sudo vim /private/etc/php-fpm.d/www.conf
最后开启php-fpm:
sudo php-fpm -D
#启动成功
5. 安装MySQL
MySQL也可以使用brew命令直接进行安装:
brew install mysql
同样,可以设置MySQL的开机自启动:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
然后执行:
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
启动 MySQL:
mysql.server start
然后进行MySQL的安全安装,使用以下命令,可以更改root密码、删除匿名用户、关闭远程连接等:
mysql_secure_installation
然后会输出以下内容:
> Enter current password for root (enter for none): //默认没有密码,直接回车即可
> Change the root password? [Y/n] //是否更改root密码,选择是,然后输入并确认密码
> Remove anonymous users? [Y/n] //是否删除匿名用户,选择是
> Disallow root login remotely? [Y/n] //是否禁止远程登录,选择是
> Remove test database and access to it? [Y/n] //是否删除test数据库,选择是
> Reload privilege tables now? [Y/n] //是否重载表格数据,选择是
测试数据库是否安装成功:
mysql -u root -p
然后输入刚才设置的root密码,将会输出以下内容:
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit //输入exit退出数据库
设置字符集:
SET NAMES 'utf8'; # 上面这一条就相当于下面的三句指令:
# SET character_set_client = utf8;
# SET character_set_results = utf8;
# SET character_set_connection = utf8;
MySQL7.0版本以上至少要8位及以上的密码,如果想设置123456怎么办?
先登录到mysql的命令界面,修改validate_password_policy参数的值:
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 8 |
+----------------------------+
1 row in set (0.00 sec)
validate_password_length参数默认为8,它有最小值的限制,最小值为:
validate_password_number_count
+ validate_password_special_char_count
+ (2 * validate_password_mixed_case_count)
其中,validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。
这些参数,默认值均为1,所以validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。如下所示:
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 8 |
+----------------------------+
1 row in set (0.00 sec) mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec) mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 4 |
+----------------------------+
1 row in set (0.00 sec)
如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一个值,则validate_password_length将进行动态修改。
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 4 |
+----------------------------+
1 row in set (0.00 sec) mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
| 1 |
+--------------------------------------+
1 row in set (0.00 sec) mysql> set global validate_password_mixed_case_count=2;
Query OK, 0 rows affected (0.00 sec) mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
| 2 |
+--------------------------------------+
1 row in set (0.00 sec) mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
| 6 |
+----------------------------+
1 row in set (0.00 sec)
最后,登录mysql修改密码:
MySQL -u root -p
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('');
6. 配置nginx
首先,为我们的配置文件创建一些文件夹,这些是仿照ubuntu的nginx结构进行建立的目录:
mkdir -p /usr/local/etc/nginx/logs
mkdir -p /usr/local/etc/nginx/sites-available
mkdir -p /usr/local/etc/nginx/sites-enabledmkdir -p /usr/local/etc/nginx/ssl sudo mkdir -p /var/www
sudo chown :staff /var/www
sudo chmod /var/www
然后修改nginx配置文件:
vim /usr/local/etc/nginx/nginx.conf
将内容替换为:
worker_processes ;
error_log /usr/local/etc/nginx/logs/error.log debug;
events {
worker_connections ;
}
http {
include mime.types;
#default_type application/octet-stream;
default_type text/html;
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 ;
include /usr/local/etc/nginx/sites-enabled/*.conf;
}
然后加入默认站点配置文件:
vim /usr/local/ect/nginx/sites-enabled/default.conf
输入以下内容:
server {
listen ;
server_name localhost;
root /Applications/MAMP/htdocs/www/default/;
access_log /usr/local/etc/nginx/logs/default.access.log main;
location / {
root /Applications/MAMP/htdocs/www/default/;
index index.html index.php;
}
location ~ \.php$ {
try_files $uri = ;
fastcgi_pass 127.0.0.1:;
# fastcgi_pass unix:/Applications/MAMP/Library/logs/fastcgi/nginxFastCGI.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page /.html;
error_page /.html;
}
然后加入第二个站点配置文件,实现多站点支持:
vim /usr/local/ect/nginx/sites-enabled/pengyunjing.conf
写入内容:
server {
listen ;
server_name test.pengyunjing.com;
root /Applications/MAMP/htdocs/www/pengyunjing/;
access_log /usr/local/etc/nginx/logs/default.access.log main;
location / {
root /Applications/MAMP/htdocs/www/pengyunjing/;
index index.html index.php;
}
location ~ \.php$ {
try_files $uri = ;
fastcgi_pass 127.0.0.1:;
# fastcgi_pass unix:/Applications/MAMP/Library/logs/fastcgi/nginxFastCGI.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page /.html;
error_page /.html;
}
如果是本地测试,配置多站点记住要修改本地hosts文件,路径:
/private/etc/hosts
补充:
nginx配置文件路径:
/usr/local/etc/nginx/nginx.conf
nginx命令:
重新绑定配置文件:
sudo /usr/local/bin/nginx -c /usr/local/etc/nginx/nginx.conf 判断配置文件是否正确:
sudo /usr/local/bin/nginx -t 启动:
sudo /usr/local/bin/nginx 重启:
sudo /usr/local/bin/nginx -s reload 查询nginx主进程号:
ps -ef|grep nginx 正常停止进程:
sudo kill -QUIT 主进程号 快速停止进程:
sudo kill -TERM 主进程号 强制终止进程:
kill - 进程号 快捷强制关闭nginx进程:
sudo pkill -INT -o nginx
php-fpm配置文件路径:
/private/etc/php-fpm.conf
php-fpm命令:
查看进程:
ps aux | grep 'php-fpm' 启动php-fpm:
sudo php-fpm -D 强制终止进程:
kill - 进程号 快捷强制关闭php-fpm进程:
sudo pkill -INT -o php-fpm
至此,配置完成,在www下写一个测试文件,进行测试即可,如果浏览器出现502的错误,可能9000端口有冲突,终止nginx和php-fpm的进程再重新启动以下试试。
尽情的享受在Mac OS开发PHP的快感吧!
Mac OS上搭建LNMP开发环境的更多相关文章
- mac os 下搭建android开发环境
mac os 下搭建android开发环境 周银辉 mac os 下搭建android环境比较方便, 如下几个步骤: 1,安装jdk 先搞清楚自己是否已经安装,在命令行下:java -version, ...
- Mac OS—苹果搭建Android开发环境
如何在MAC OS X 安装Android SDK 我以往用的开发环境都是以MAC OS安装VMware来跑不同的Windows OS,目前慢慢的将所要开发的项目由以往的传统的Wintel转移到Mob ...
- Mac OS 上配置java开发环境
在开始本学期的java课程前,我需要先为自己的电脑配置好Java的开发环境.由于电脑是mac操作系统,所以教材上的教程对我并不管用,于是乎开始动手自己查阅网上资料来解决. 1.安装JDK 1.访问Or ...
- 在Mac OS上配置Android开发环境
1)安装配置NDK 1.1 下载NDK并解压缩 下载路径 https://developer.android.com/tools/sdk/ndk/index.html 在terminal运行: chm ...
- Mac OS X搭建C#开发环境
在Mac下想要用C#语言的话,首先得有个跨平台的.Net环境-Mono http://www.mono-project.com/ 有了Mono平台之后,还得有一个好工具:目前比较好的IDE是Xmari ...
- 转-在Mac OS上搭建Python的开发环境
在Mac OS上搭建Python的开发环境 本文转载自:http://www.jb51.net/article/76931.htm 一. 安装python mac系统其实自带了一个python的执 ...
- 在mac本上折腾android 开发环境
众所周知的原因,google的很多网站在国内无法访问,苦逼了一堆天朝程序员,下是在mac本上折腾android 开发环境的过程: 一.先下载android sdk for mac 给二个靠谱的网址: ...
- Mac OSX 下配置 LNMP开发环境
不久前负责了一个项目需要配置PHP7的开发环境,因为之前所有的项目用的是PHP5的,所以研究了这些东西,但是很遗憾,电脑出了问题,不得已重装了系统,然后你懂得...什么都没有了,要重新来过.. 虽然本 ...
- 在 macOS 上搭建 Flutter 开发环境
下载 Flutter SDK flutter官网下载:https://flutter.io/sdk-archive/#macos 若上述链接无法访问,可通过GitHub下载 https://githu ...
随机推荐
- linux定时任务php
1. 在需要定时执行的PHP文件的第一行加 #! /usr/local/php/bin/php 服务器php.exe的位置 2. 上传要定时执行的php文件到一个位置,可以通过/pa ...
- java使用poi实现excel表格生成
通过使用poi技术生成Excel,使用反射技术实现自动映射列表的数据. ExportTableUtil.java public class ExportTableUtil { /** * * @Des ...
- Redis原理与实践总结
Redis原理与实践总结 本文主要对Redis的设计和实现原理做了一个介绍很总结,有些东西我也介绍的不是很详细准确,尽量在自己的理解范围内把一些知识点和关键性技术做一个描述.如有错误,还望见谅,欢迎指 ...
- 23.FutureTask基本操作总结
1.FutureTask简介 在Executors框架体系中,FutureTask用来表示可获取结果的异步任务.FutureTask实现了Future接口,FutureTask提供了启动和取消异步任务 ...
- 【hive】在alter修改元数据的时候报错 mismatched input 'xxxxx' expecting KW_EXCHANGE
目的:修改表某个字段属性 语句: 报错信息 错误原因: 在HiveQL中,alter命令不使用与create或select相同的语义 ; 具体来说,您不能使用“ALTER DATABASE.TABLE ...
- 【BZOJ】3389: [Usaco2004 Dec]Cleaning Shifts安排值班(贪心)
http://www.lydsy.com/JudgeOnline/problem.php?id=3389 显然左端点排序后,依次取. 要考虑下一次取的方案: 待选点为a[j].x<=a[now] ...
- DBMS_OUTPUT(用于输入和输出信息)
1.概述 作用:用于输入和输出信息,使用过程PUT和PUT_LINES可以将信息发送到缓冲区,使用过程GET_LINE和GET_LINES可以显示缓冲区信息.该包用来输出plsql变量的值,属于系统用 ...
- C#使用Docx操作word文档
C#使用Docx编写word表格 最近接手了一个小Demo,要求使用Docx,将Xml文件中的数据转换为word文档,组织数据形成表格. 写了已经一周,网络上的知识太零碎,就想自己先统计整理出来,方便 ...
- bzoj2547
题解: 二分+宽搜+KM 显然答案不能太大 然后二分一下 代码: #include<bits/stdc++.h> ,M=; using namespace std; ]={-,,,},dy ...
- iOS 可能用到的三方框架
1.MWPhotoBrowser 第三方图片浏览器 https://github.com/mwaterfall/MWPhotoBrowser 2.SlackTextViewController 强大 ...