Trong quá trình phát triển web với php chúng ta thường giả lập môi trường server cho máy là xampp và mysql nhưng hãy tập làm quen với nginx vì nginx có ưu điểm vượt trội hơn so với apache. 2020

Hướng dẫn cài đặt Nginx PHP-FPM trên MacOS sử dụng Homebrew

2020-12-17 4936 lượt xem
Trương Thanh Hùng

khi phát triển web, bạn cần cài đặt môi trường giả lập server và chúng ta có nhiều sự lựa chọn. Trong đó có thể sử dụng các chương trình trọn gói như LAMP (cho Linux), WAMP (Cho Windows), MAMP (cho máy Mac) hay XAMPP (dùng cho nhiều hệ điều hành khác nhau).

Đôi khi bạn chuyên nghiệp hơn bạn có thể tạo máy chủ ảo bằng VirtualBox / Vagrant, Docker,… hoặc nếu macos bạn cũng có thể chọn Flywheel nhưng đôi khi Thế giới này vận hành theo cái cách luôn ghì ta xuống 😄 

bạn muốn tìm hiểu nhiều hơn với nginx mà toàn là apache thì thôi dẹp mẹ đi cho lẹ há. bài này chúng ta hông tìm hiểu nginx hơn gì so với apache. bài viết này chỉ nói về cách cài nginx php vào máy mac thui nghen 

Lưu ý nếu bạn đã biết cài rồi thì xem luôn phần 2:  Hướng dẫn cài đặt máy chủ giả lập NGINX PHP trên MacOS

phần 0 - cần có homebrew

Để biết bạn có homebrew chưa thì vào terminal gõ brew -v. Nếu không chửi gì bạn thì bạn đã có homebrew nghen 😄 Nếu bạn chưa có homebrew trong máy mac thì bạn đọc bài này cách cài đặt homebrew.

Chạy tiếp lệnh sau để chắc chắn bạn đang sử dụng Homebrew phiên bản mới nhất     

brew update && brew upgrade

Phần I - cài nginx trong mac

kiểm tra nginx bạn có chưa? có rồi thì thôi chứ cài chi nữa há :D

nginx -v

Nếu nó nói như này là chưa có.

-bash: nginx: command not found

Cài đặt Nginx

Lưu ý rất to: macOS mặc định cài sẵn Apache, để chắc chắn ta nên dừng và không cho tự động load khi macOS khởi động. Có thể terminal sẽ báo path không tồn tại, không đáng lo, bạn có thể bỏ qua.

Tắt php của apache có sẵn trong mac

apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

Cài đặt Nginx bằng lệnh sau:     

brew install nginx

Sau khi cài xong nó ra cái hình như này 

các bạn nhớ chú ý các thông tin mà brew cung cấp

Thư mục gốc của nginx: /usr/local/var/www

File cấu hình nginx: /usr/local/etc/nginx/nginx.conf.

Thư mục load tất cả server nginx: /usr/local/etc/nginx/servers/

Port mặc định của nginx: 8080 Tùy theo nhu cầu mà chúng ta sẽ cấu hình lại cho phù hợp.

theo như cái hình nói: ( nginx will load all file in /usr/local/etc/nginx/servers/ ) cái này quan trọng lắm mấy bạn. khi nó nói vậy thì nghĩa là bạn phải vào trong folder servers để tạo file server ở phần 2.

Nếu chúng ta có nhu cầu sửa thư mục load server nginx  từ servers thành sites-enabled thì chúng ta sẽ vào File cấu hình nginx xuống cuối thấy cái khúc include servers/*; để sửa lại thành include site-enabled/*; 

Các lệnh để điều khiển nginx, ở đây bạn có thể cho nginx chạy như service nền hoặc chỉ chạy khi nào chúng ta cần, tuy theo nhu cầu mà chúng ta sẽ chọn.

Chế độ chạy service nền:

  • brew services start nginx => khởi động nginx như một services nền.
  • brew services stop nginx => tắt services nginx.
  • brew services reload nginx => nạp lại cấu hình nginx. Chỉ chạy bình thường:
  • nginx => chạy nginx.
  • nginx -s stop => tắt nginx.
  • nginx -s reload => nạp lại cấu hình nginx. Các bạn khỏi chạy nginx (ở 1 trong 2 chế độ trên) và truy cập vào trình duyệt với address

Cài xong! 😄 muốn xoá nginx thì theo link này: xoá nginx khỏi macosx

Config

Chú ý: xác định username

whoami
# kết quả: hero 

Từ đây trờ về sau các câu lệnh hay config sẽ dùng hero là username, bạn cần tự thay đổi cho phù hợp.

Mở thư mục /usr/local/etc/nginx 

# mở folder code với visual code
code /usr/local/etc/nginx
# Mở file nginx.conf, tìm dòng
user nobody;
# đổi thành
user hero staff;

hình ảnh minh hoạ: 

Cho nó chạy và test thử:

a. cho nó chạy bằng lệnh sau:

brew services start nginx

 

b. Test thử như sau:

b1. Test bằng cách gõ trên url trình duyệt bất kì.

truy cập http://localhost:8080 để xem kết quả xem có như hình này không nhé. 

b2. Test bằng cách sử dụng terminal.

bạn cũng có thê check xem nginx chạy đc chưa bằng cURL trong terminal bằng lệnh sau:  

curl -IL http://127.0.0.1:8080

nó ra zầy là ok nè : 

HTTP/1.1 200 OK

Server: nginx/1.19.5

Date: Thu, 17 Dec 2020 12:25:36 GMT

Content-Type: text/html

Content-Length: 612

Last-Modified: Tue, 24 Nov 2020 15:06:38 GMT

Connection: keep-alive

ETag: "5fbd217e-264"

Accept-Ranges: bytes

Setup SSL

đầu tiên bạn tạo cái folder như này 

mkdir -p /usr/local/etc/nginx/ssl

Tạo khóa RSA 4096 bit và tự ký chứng chỉ trong một lệnh:

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

 

Phần 2 - Cài đặt PHP-FPM

Trước khi cài php bạn hãy nhớ tắt apache trong mac để hạn chế lỗi

Chạy các lệnh sau để cài đặt PHP-FPM

# chạy lệnh sau để có thể cài những bản đã deprecated
brew tap exolnet/homebrew-deprecated
# cài đặt php với lệnh này 
brew install php@5.6
brew install php@7.0
brew install php@7.1
brew install php@7.2
brew install php@7.3
# hoặc: 
brew install – without-apache – with-fpm – with-mysql php73

nếu muốn version nào thì thay php đó, ví dụ php56. PHP 7.3 là phiên bản mới tại thời điểm hiện tại, phiên bản trước đó là phiên bản PHP 5.6, PHP 7 được thiết kế lại cho tốc độ xử lý nhanh hơn so với các phiên bản cũ.

sau khi cài xong máy sẽ báo 1 nùi như sau 

To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

Finally, check DirectoryIndex includes index.php
    DirectoryIndex index.php index.html

The php.ini and php-fpm.ini file can be found in:
    /usr/local/etc/php/7.3/

php@7.3 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have php@7.3 first in your PATH run:
  echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.profile
  echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.profile

For compilers to find php@7.3 you may need to set:
  export LDFLAGS="-L/usr/local/opt/php@7.3/lib"
  export CPPFLAGS="-I/usr/local/opt/php@7.3/include"

cũ. 

Configure 1 tí trước khi sử dụng

nano /usr/local/etc/php/7.3/php-fpm.d/www.conf
# update your infor
user = YOUR_USERNAME
group = YOUR_GROUP || staff

 File cấu hình php.init

Đôi khi bạn cần chú ý với file config của php-fpm. Theo thông thường thì nó sẽ nằm ở đây:  /usr/local/etc/php /[version php - 7.3]/php-fpm.d/www.conf. Nhưng không may sẽ có các server máy khác sẽ không thấy, chúng ta sẽ tìm nó bằng lệnh php-fpm -i sau đó sẽ thấy '--sysconfdir=/private/etc' và dĩ nhiên chúng ta sẽ vào /private/etc mà mò.

Hiện tại php cli vẫn nhận bản php mặc định có sẵn của macOS. Để có thể sử dụng đúng bản php cần, chạy câu lệnh link bản cần dùng

brew link --force php@7.3

Tắt và mở lại terminal, kiểm tra version php lần nữa

Giả sử muốn switch sang php 5.6 thì unlink bản đang dùng và link bản mới

brew unlink php@7.3 && brew link --force php@5.6

Chưa xong đâu, bạn cài xong thôi chứ chưa config. 

Config PHP

bạn cần biết máy bạn có tên gì bằng lệnh sau: 

config user và group

mở thư mục /usr/local/etc/php  và edit lại file php-fpm.d/www.conf thay user là cái user là username và group là staff như hình: 

Thay đoạn listen listen = 127.0.0.1:9000 thành /usr/local/var/run/php72.sock và Mở comment cho phần listen permission (bỏ dấu ; ;listen.owner = _www ;listen.group = _www ;listen.mode = 0660)

# chú ý php73.sock hay php72.sock là tuỳ phiên bản php bạn đang sửa
listen = /usr/local/var/run/php72.sock
# sửa lại listen như sau: 
listen.owner = hero
listen.group = staff
listen.mode = 0660

 ảnh minh hoạ

 

Run and testing - chạy và kiểm tra hoàn tất chưa

Khởi động lại các service php 

brew services restart php@7.3
brew services restart php@7.2

Chúng ta có vài lệnh php cần lưu ý để lần sau sử dụng: 

# start php73 
brew services start php@7.3

# restart php73 
brew services restart php@7.3

# stop php73 
brew services stop php@7.3

# xoá php bạn cần stop php trước sau đó mới xoá
brew services stop php@7.3 && brew uninstall php@7.3

# kiểm tra version php 
php -v 

Phần 3 - Cài đặt MariaDB - phiên bản hoàn thiện MySQL

Nhiều bạn cũng sẽ muốn sử dụng php và mysql nên mình cũng sẽ hướng dẫn nốt. 

Cài đặt Mysql

brew install mysql
# hoặc
brew install mariadb

cài xong kết quả: 

We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start

Giải Thích: 

nó bảo nó cài vào nhưng không cần password. và nếu bạn muốn tăng bảo mật hơn thì tự setting với lệnh : mysql_secure_installation .

muốn login vào hệ thống db thì sài cái lệnh này mysql -uroot.

để khởi động mysql thì sài lệnh cùi bắp này : mysql.server start  hoặc nếu mạnh tay chơi luôn background service thì sài lệnh này : brew services start mysql. Muốn stop thì thay start thành stop vậy thôi. 

Bảo mật mysql thay đổi mật khẩu

Để bảo mật cơ sở dữ liệu, chúng ta cần cấu hình hệ thống để thay đổi mật khẩu root và tinh chỉnh vài thông số.

m
# trước tiên phải Start mysql lên trước
mysql.server start

# thay đổi secure
mysql_secure_installation

# kết quả : 
###// Securing the MySQL server deployment.
###// Enter password for user root:
# nó yêu cầu bạn nhập password mysql mà bạn thiết lập thì bạn nhập vào
123456
# Nhấn ENTER để bắt đầu thiết lập mật khẩu root

> Remove anonymous users? [Y/n]
Nhấn ENTER.

> Disallow root login remotely? [Y/n]
Nhấn ENTER — Bạn không cần remote login khi cài đặt SQL trên máy tính cá nhân

> Remove test database and access to it? [Y/n]
Nhấn ENTER — Không cần dùng đến các cơ sở dữ liệu có sẵn

> Reload privilege tables now? [Y/n]  
ENTER — Áp dụng những thay đổi ngay lập tức.

Chạy thử nghiệm

>mysql -uroot -p
# Nhập vào mật khẩu root bạn vừa thiết lập ở bước trên
mysql>
# vào đc vậy là thành công. Bạn thoát ra bằng cách gõ \q
mysql> \q
Bye

Phần 4 - Cài đặt xdebug cho php trong nginx macbook

Cách 1 - Cài thông qua PECL

Mình sẽ cài extention xdebug thông qua pecl. và khi bạn cài php như các bước ở trên  thì mặc định đã có pecl. bạn kiểm tra version pecl như sau: 

pecl version

kết quả: 

nếu pecl đã tồn tại thì bạn cài php extention rất dễ. xdebug cài như sau: 

pecl install xdebug 
#kiểm tra cài đặt xong chưa
php -v 
#PHP 7.3.25 (cli) (built: Nov 30 2020 14:27:01) ( NTS )
#Copyright (c) 1997-2018 The PHP Group
#Zend Engine v3.3.25, Copyright (c) 1998-2018 Zend Technologies
#    with Xdebug v3.0.1, Copyright (c) 2002-2020, by Derick Rethans
#    with Zend OPcache v7.3.25, Copyright (c) 1999-2018, by Zend #Technologies 

xdebug hoạt động tùy vào version php dùng để debug nên nếu debug cho các dự án dùng version php khác thì hơi mất công một chút. Ví dụ sau đây là cài xdebug cho php 7.2

Đầu tiên unlink php cũ và link php mới

brew unlink php@7.3 && brew link --force php@7.2

Tiếp tục cài xdebug một lần nữa thông qua pecl

pecl install xdebug

Sau đó kiểm tra php -v lại lần nữa

cách 2 - Download và cài đặt trực tiếp từ xdebug

trước tiên phải biết php.init bạn cài nó nằm ở đâu? ca này khó nghen. có 1 số ngươì may mắn thì mò vào đây là thấy. sau đó lấy đc cái phpinfor rồi bạn vào đây detect ra thông tin xdebug cần download về

download về giải nén xong follow tiếp theo link này để Download và cài đặt xdebug cho php fpm MacOs

Tổng kết

mình đã hướng dẫn bạn cài đặt php vào macbook. nhưng chưng xong, bạn muốn lập trình web bạn cần giả lập server nginx để chạy được. bạn xem thêm phần 2 nhé : Hướng dẫn cài đặt máy chủ giả lập NGINX PHP trên MacOS