Cài đặt Magento trên MacOS Monterey
Xin chào các bạn. Dạo gần đây mình bắt đầu chuyển qua dùng Macbook. Mọi thứ đều rất ổn vì các app hiện tại mình dùng đã Native trên chip M1. Vấn đề chỉ xảy ra cho tới khi mình cài Magento để phục vụ công việc hiện tại. Trong bài viết trước mình đã hướng dẫn các bạn cài Magento trên Docker và những lợi ích của nó mang lại. Tuy nhiên có vấn đề khi mình sử dụng Docker Desktop. Bản chất của con Docker Desktop ( Win & Mac) nó sẽ tạo một con máy ảo trong khi bạn sử dụng Linux nó sẽ sử dụng trực tiếp nhân linux trên máy thật. Từ đây xảy ra một vấn đề liên quan tới việc sync folder & file từ máy thật qua con Docker, đó là nó khá là chậm. Không chỉ riêng Magento mà các project khác cũng khá là chậm tuỳ thuộc vào độ lớn của project (Mà các bạn cũng biết Magento nó nặng cỡ nào rùi đấy
Mình bắt đầu nghĩ là: "Cmn!! Xai nầm tủi chẻ rồi. Mua về không dùng được thì mua làm éo gì?" Sau 77 49 lần google các thể loại không ăn thua. Mình đã quyết định cài trực tiếp luôn trên Mac mà không phải qua Docker đốc củng gì cả. Có thể sẽ phát sinh một số lỗi nhỏ do không tương thích hệ điều hành (Magento recommended linux) nhưng nó ở trong tầm chấp nhận được. Ok chúng ta bắt đầu thôi
Các ứng dụng cần cài đặt
- Homebrew & VSCode
- MySQL
- Multiple PHP & Xdebug (có thể switch PHP version qua Brew)
- Nginx
- DNSMASQ (cần có nếu bạn muốn tuỳ chỉnh domain)
- Elasticsearch
- Các app khác (Mailhog, Redis,..)
- Cài đặt Brew & VSCODE
- Cài đặt Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Nó sẽ yêu cầu bạn phải cài đặt và thực hiện một số task để có thể hoạt động. Các bạn cứ làm theo hướng dẫn là được
Tiếp theo chúng ta sẽ cài VSCode. Bạn có thể cài qua Homebrew hoặc download trực tiếp từ trang chủ
brew install --cask visual-studio-code
Bạn cũng cần chắc chắn rằng bạn đã thêm code vào System Path
MySQL
Cài đặt MySQL
brew install mysql
brew services start mysql
brew services ls
Tiếp theo chúng ta cần phải sửa lại một chút config cho MySQL
# Intel x86 Chipset
code /usr/local/etc/my.cnf
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/my.cnf
File my.cnf
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
# Add mode only if needed
sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
# Set Default Charset
character-set-server=utf8
collation-server=utf8_general_ci
Setup Password cho MySQL
sudo mysql -uroot
mysql> mysql_secure_installation
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWOR_IN_HERE';
mysql> exit;
brew services restart mysql
Cài đặt Multiple PHP Version
brew install php@7.3
brew install php@7.4
brew install php@80
Các bạn cũng có thể tìm các phiên bản PHP có thể cài bằng brew qua lệnh
brew search php@
Có thể switch qua lại các phiên bản PHP bằng
brew unlink php
brew link --overwrite --force PHP_VERSION
Sử dụng php7.4
làm mặc định
brew unlink php
brew link --overwrite --force php@7.4
Bây giờ ở mỗi phiên bản PHP bạn cần sử dụng một port khác nhau. Vì các PHP-FPM đang dùng chung 1 port 9000
. VD: với phiên bản PHP 7.4 mình sẽ sử dụng port 9074
. Và PHP-FPM cần sử dụng user của bạn chứ không phải _www
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/php/7.4/php-fpm.d/www.conf
# Intel x86 Chipset
code /usr/local/etc/php/7.4/php-fpm.d/www.conf
# default
user = _www
group = _www
listen = 127.0.0.1:9000
# change to
user = <your_username>
group = staff
listen = 127.0.0.1:9074
Trước khi khởi động lại PHP-FPM bạn cần sửa lại một chút file php.ini
. VD bạn muốn tăng upload_max_filesize
và post_max_size
thành 128MB
, memory_limit
= 8G
cho nó xông xênh
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/php/7.4/php.ini
# Intel x86 Chipset
code /usr/local/etc/php/7.4/php.ini
Vậy là xong. Bây giờ bạn cần phải khởi động lại PHP-FPM
để nó nhận config mới
brew services restart php@7.4
Kiểm tra lại xem PHP-FPM đã nhận đúng config chưa
sudo lsof -i -n -P|grep php-fpm
Cài đặt Xdebug
Trong quá trình code việc debug là điều không thể tránh khỏi. Vì thế chúng ta cần phải cài thêm extension để tiện cho việc debug.
brew unlink php
brew link --overwrite --force php@7.4
pecl install xdebug
Chúng ta cần phải config Xdebug để nó có thể hoạt động. Mở lại file php.ini
xoá đoạn zend_extension="xdebug.so"
và thay bằng config sau
[xdebug]
zend_extension="xdebug.so"
xdebug.mode=debug
xdebug.client_port=9003
xdebug.idekey=PHPSTORM
Ở phiên bản Xdebug 3 xdebug sử dụng port 9003
thay vì 9000
như trước
Sau khi thêm Xdebug xong bạn cần phải khởi động lại PHP để nó nhận Xdebug và config
brew services restart php@7.4
Nginx
Cài đặt Nginx
brew install nginx
sudo nginx
Bạn có thể truy cập đường dẫn để xem nginx đã hoạt động chưa
http://localhost:8080
Bây giờ chúng ta cần phải thay đổi config mặc định cho nginx
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/nginx/nginx.conf
# Intel x86 Chipset
code /usr/local/etc/nginx/nginx.conf
File nginx.conf
user <your_username> staff;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type text/html;
gzip on;
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
sendfile on;
keepalive_timeout 65;
charset utf-8;
server_names_hash_bucket_size 512;
client_max_body_size 100M;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
server {
listen 80;
server_name localhost, test.test;
root <your_document_root>;
proxy_intercept_errors on;
fastcgi_intercept_errors on;
location / {
autoindex on;
index index.html index.php;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9074;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
include servers/*;
}
Tạo file index.php
trong folder root của bạn thiết lập ở trên
<?php echo phpinfo(); ?>
Khởi động lại nginx
sudo nginx -s reload
http://localhost
Để thêm nhiều servers hơn các bạn có thể thêm config trong folder /opt/homebrew/etc/nginx/servers/
với chip M1 và /usr/local/etc/nginx/servers
với chip Intel
DNSMASQ
Để tránh việc phải thay đổi liên tục file hosts
của bạn có thể gây ảnh hưởng tới cả máy. Bạn cần cài đặt thêm dnsmasq
.
brew install dnsmasq
Sau đó chúng ta cần setup TLD *.test
trỏ vào địa chỉ 127.0.0.1
trên máy
# Apple Silicon M1 Chipset
echo 'address=/.test/127.0.0.1' > /opt/homebrew/etc/dnsmasq.conf
# Intel x86 Chipset
echo 'address=/.x/127.0.0.1' > /usr/local/etc/dnsmasq.conf
sudo brew services start dnsmasq
sudo mkdir -v /etc/resolver
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/test'
Kiểm tra lại xem đã ok chưa
ping test.test
Elasticsearch
Cài đặt Elasticsearch
brew install elasticsearch@6
brew services start elasticsearch
ping 127.0.0.1:9200
Vậy là ok. Bây giờ chúng ta có thể download Magento về và cài đặt. Các bước cài đặt Magento các bạn có thể lên docs của Magento và làm theo hướng dẫn.
Config nginx
cho Magento
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/nginx/servers/magento.test.conf
# Intel x86 Chipset
code /usr/local/etc/nginx/servers/magento.test.conf
server {
listen 80;
server_name magento.test;
index index.html index.htm index.php;
set $MAGE_ROOT <your_document_magento_root>;
set $MAGE_DEBUG_SHOW_ARGS 1;
include <your_document_magento_root>/nginx.conf.sample;
}
upstream fastcgi_backend {
server 127.0.0.1:9074;
}
Đăng nhận xét