Mac OS上搭建LNMP開發環境

1. 概述

LNMP表明的就是:Linux系統下Nginx+MySQL+PHP這種網站服務器架構。Linux是一類Unix計算機操做系統的統稱,是目前最流行的免費操做系統。表明版本有:debian、centos、ubuntu、fedora、gentoo等。Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器。Mysql是一個小型關係型數據庫管理系統。PHP是一種在服務器端執行的嵌入HTML文檔的腳本語言。這四種軟件均爲免費開源軟件,組合到一塊兒,成爲一個免費、高效、擴展性強的網站服務系統。php

2. 安裝Homebrew

使用Mac的程序員必不可少的一步即是安裝Homebrew,他就像是centOS的yum命令和ubuntu的apt-get命令同樣,經過brew命令,咱們能夠快速的安裝一些軟件包。 使用命令行安裝Homebrew的命令以下:html

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

使用命令檢查是否存在衝突:mysql

brew doctor

而後使用使用命令對brew進行升級:nginx

brew update && brew upgrade

3. 安裝nginx

nginx在Mac OS中能夠直接使用brew命令進行安裝:git

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服務:github

sudo nginx

測試nginx是否安裝成功,由於默認配置文件監聽的是8080端口,因此先對8080端口發起請求:sql

curl -IL http://127.0.0.1:8080

結果應該相似於下:數據庫

HTTP/1.1 200 OK
Server: nginx/1.9.1
Date: Fri, 29 May 2017 14:50:47 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 29 May 2015 14:40:47 GMT
Connection: keep-alive
ETag: "5444dea7-264"
Accept-Ranges: bytes

nginx的相關操做以下:ubuntu

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 (2)
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 (2)
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 (48)
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('123456');

 

 

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 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;
    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   65;

    include /usr/local/etc/nginx/sites-enabled/*.conf;
}

而後加入默認站點配置文件:

vim /usr/local/ect/nginx/sites-enabled/default.conf

輸入如下內容:

server {
    listen       80;
    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 = 404;
        fastcgi_pass   127.0.0.1:9000;
        # 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  404     /404.html;
    error_page  403     /403.html;
}

而後加入第二個站點配置文件,實現多站點支持:

vim /usr/local/ect/nginx/sites-enabled/pengyunjing.conf

寫入內容:

server {
    listen       80;
    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 = 404;
        fastcgi_pass   127.0.0.1:9000;
        # 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  404     /404.html;
    error_page  403     /403.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 -9 進程號


快捷強制關閉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 -9 進程號


快捷強制關閉php-fpm進程:
sudo pkill -INT -o php-fpm

 

至此,配置完成,在www下寫一個測試文件,進行測試便可,若是瀏覽器出現502的錯誤,可能9000端口有衝突,終止nginx和php-fpm的進程再從新啓動如下試試。

盡情的享受在Mac OS開發PHP的快感吧!

相關文章
相關標籤/搜索