Cara Instalasi Nginx Dan Banyak Versi PHP Di MacOS12 Monterey - CRUDPRO

Cara Instalasi Nginx Dan Banyak Versi PHP Di MacOS12 Monterey

Dalam tutorial ini, Anda akan mengonfigurasi nginx dan beberapa versi PHP di macOS 12 Monterey. Pada akhirnya, Anda akan memiliki lingkungan pengembangan web lokal yang kuat, bersih, dan cepat pada chipset Intel atau Apple Silicon M1, M1 Pro, dan M1 Max Mac Anda. Perangkat lunak yang akan diinstal adalah:

  1. VS Code, Xcode, Homebrew : Langkah ini diperlukan untuk memulai.
  2. wget & openSSL: Langkah ini diperlukan untuk memulai.
  3. MySQL: Langkah ini tidak diperlukan, tetapi MySQL dan PHP mirip dengan PB & J.
  4. PostgreSQL: Langkah ini tidak diperlukan, tetapi saya menggunakan PostgreSQL secara pribadi, jadi ada di sini.
  5. Beberapa versi PHP *: Ini penting.
  6. Xdebug: Ini adalah alat hebat yang sangat saya rekomendasikan.
  7. Nginx : Langkah ini wajib dan sangat detail, jadi dapatkan sertifikat SSL / TLS dan domain lokal khusus.
  8. Dnsmasq : Langkah ini diperlukan untuk domain khusus ini.
  9. MailHog: Alat ini adalah alat yang hebat untuk disukai jika Anda ingin mengirim email selama pengembangan lokal. Ini memberikan UI yang tampak bagus untuk menangkap email dan menampilkannya.
  10. Redis: Saya merekomendasikan ini jika Anda sedang mengerjakan Laravel.

Pengaturan:VS Code, Xcode, dan Homebrew

Sebelum memulai, Anda perlu menginstal beberapa alat seperti VS Code, Xcode, Homebrew untuk menghilangkan stres dari proses penyiapan.

Pertama, instal Xcode. Kemudian instal alat CLI dari terminal. Mulai sekarang, saya akan sering menggunakan terminal (saya suka iTerm2).

xcode-select --install

Anda juga perlu menginstal VS Code menggunakan perintah kode di jalur sistem Anda.

Terakhir, instal Homebrew.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Homebrew mengharuskan Anda menjalankan beberapa perintah dan jangan sampai terlerlewatkan.

Sekarang alat sudah terpasang, Anda dapat memasuki proses penyiapan lainnya.

OpenSSL dan wget

Instal dan dapatkan OpenSSL. Anda akan membutuhkan ini sebelum Anda dapat melanjutkan.


brew install openssl
brew install wget

Menginstal MySQL

Instal MySQL.

brew install mysql
brew services start mysql
brew services list

Kemudian perbarui my.cnf.

# Intel x86 Chipset
code /usr/local/etc/my.cnf
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/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"

Sekarang amankan dengan password dan kemudian reboot.

mysql_secure_installation
brew services restart mysql

Selanjutnya, Anda perlu memperbarui otentikasi MySQL8 ke mysql_native_password untuk setiap pengguna. Perhatikan bahwa tidak ada spasi sebelum username dan password.

mysql -uroot -ppassword
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Jika cara di atas gagal, Anda perlu mengatur ulang tingkat keamanan password ke RENDAH. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements.

mysql> SHOW VARIABLES LIKE 'validate_password%';
mysql> SET GLOBAL validate_password.policy=LOW;

Install Postgres

Instal postgresql (bukan aplikasi postgres).

brew install postgresql
brew services start postgresql
brew services list
psql postgres

Sekarang Anda dapat melihat daftar pengguna.

postgres-# \du

Instal beberapa versi PHP

Kemudian instal beberapa versi PHP di komputer Mac Anda. Pertama, jangan gunakan ketukan inti homebrew default PHP. Gunakan shivammathur/php.

brew tap shivammathur/php

brew install shivammathur/php/[email protected]
brew install shivammathur/php/[email protected]
brew install shivammathur/php/[email protected]
brew install shivammathur/php/[email protected]
brew install shivammathur/php/[email protected]

Kemudian atur PHP7.4 sebagai versi phpCLI default.

brew unlink php
brew link --overwrite --force [email protected]

Sekarang Anda memerlukan port unik untuk memperbarui php-fpm untuk setiap versi. Ubah port setiap php-fpm agar sesuai dengan nomor versi php. Misalnya, [email protected] saya menggunakan port 9074.

Juga, php-fpm harus dijalankan di bawah akun pengguna, bukan _www. Perhatikan bahwa perbedaan jalur folder didasarkan pada prosesor Mac pada Intel x86 atau Apple M1 ARM yang terpasang di komputer Anda.

# Intel x86 Chipset
code /usr/local/etc/php/7.4/php-fpm.d/www.conf
# Apple Silicon M1 Chipset
code /opt/homebrew/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

Jika perlu, sekarang saatnya mengedit file php.ini sebelum memulai php-fpm. Misalnya, Anda mungkin ingin meningkatkan upload_max_filesize dan post_max_size menjadi 10 juta.

Sekali lagi, perhatikan jalur berbasis chipset.

# Intel x86 Chipset
/usr/local/etc/php/7.2/php.ini
/usr/local/etc/php/7.3/php.ini
/usr/local/etc/php/7.4/php.ini
/usr/local/etc/php/8.0/php.ini
/usr/local/etc/php/8.1/php.ini
# Apple Silicon M1 Chipset
/opt/homebrew/etc/php/7.2/php.ini
/opt/homebrew/etc/php/7.3/php.ini
/opt/homebrew/etc/php/7.4/php.ini
/opt/homebrew/etc/php/8.0/php.ini
/opt/homebrew/etc/php/8.1/php.ini

Saat Anda siap, luncurkan php-fpm untuk setiap versi.

brew services start [email protected]
brew services start [email protected]
brew services start [email protected]
brew services start [email protected]
brew services start [email protected]

Pastikan proses berjalan dan verifikasi bahwa port sudah benar.


sudo lsof -i -n -P|grep php-fpm

Beberapa versi php-fpm yang berjalan di macOS Monterey termasuk versi PHP 7.2, 7.3, 7.4, 8.0, dan 8.1

Berikan Alias Atau Nama Lain Pada multiple versi PHP di macOS

Kemudian secara opsional tambahkan beberapa alias PHPCLI ke skrip bash di file .bashrc atau .zshrc Anda: Ini memberi Anda akses cepat ke versi tertentu sesuai kebutuhan.

# Intel x86 Chipset
alias php72="/usr/local/opt/[email protected]/bin/php"
alias php73="/usr/local/opt/[email protected]/bin/php"
alias php74="/usr/local/opt/[email protected]/bin/php"
alias php80="/usr/local/opt/[email protected]/bin/php"
alias php81="/usr/local/opt/[email protected]/bin/php"
# Apple Silicon M1 Chipset
alias php72="/opt/homebrew/opt/[email protected]/bin/php"
alias php73="/opt/homebrew/opt/[email protected]/bin/php"
alias php74="/opt/homebrew/opt/[email protected]/bin/php"
alias php80="/opt/homebrew/opt/[email protected]/bin/php"
alias php81="/opt/homebrew/opt/[email protected]/bin/php"

Anda dapat mengakses setiap alias dari baris perintah Mac dengan memuat ulang file bash. Misalnya, Anda dapat melihat versi persis dari versi alias PHP.

php72 -v

Beralih di antara beberapa versi PHP

Bagaimana cara mengganti versi PHP? Anda dapat dengan mudah beralih di antara beberapa versi PHP di macOS dengan menambahkan yang berikut ini ke skrip bash Anda:

# Make switching versions easy
function phpv() {
    brew unlink php
    brew link --overwrite --force "php@$1"
    php -v
}

Jika Anda ingin mengubah default phpCLI, Anda dapat mengaturnya menggunakan brew. Jika demikian, gunakan fungsi bash phpv7.4.

# brew
brew unlink php
brew link --overwrite --force [email protected]

# bash function
phpv 7.4

Kesalahan PHP pemutakhiran homebrew

Seiring waktu, Homebrew harus merusak instalasi PHP Anda. Jika ini terjadi, Anda dapat menginstal ulang versi PHP yang salah. Perhatikan bahwa Anda mungkin perlu mengkonfigurasi ulang versi PHP tersebut, tetapi file php.ini akan tetap sama.

brew reinstall shivammathur/php/[email protected]

Xdebug

Saya suka xdebug untuk pengembangan dengan PHPStorm. Untuk menginstal xdebug pada setiap versi php (cli dan fpm), jalankan:

brew link --overwrite --force [email protected]
pecl uninstall -r xdebug 
pecl install xdebug
brew link --overwrite --force [email protected]
pecl uninstall -r xdebug 
pecl install xdebug
brew link --overwrite --force [email protected]
pecl uninstall -r xdebug 
pecl install xdebug
brew link --overwrite --force [email protected]
pecl uninstall -r xdebug
pecl install xdebug
brew link --overwrite --force [email protected]
pecl uninstall -r xdebug
pecl install xdebug

Saya menginstal pembaruan php.ini untuk setiap versi. Dalam contoh ini, ini adalah [email protected].

# Intel x86 Chipset
code /usr/local/etc/php/7.4/php.ini
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/php/7.4/php.ini

Anda perlu menghapus zend_extension = "xdebug.so" yang ditambahkan ke awal file oleh proses instalasi pecl. Port xdebug default baru adalah 9003 – itu adalah port 9000.

Tambahkan berikut ini ke akhir file php.ini Anda.

[xdebug]
zend_extension="xdebug.so"
xdebug.mode=debug
xdebug.client_port=9003
xdebug.idekey=PHPSTORM

Setelah menambahkan konfigurasi xdebug ke setiap versi yang diinstal, matikan semua proses php-fpm yang sedang berjalan. Tidak bijaksana melakukan ini di server produksi. Dengan pengaturan pengembangan Mac baru, ini baik-baik saja.

sudo killall php-fpm

Instal Nginx

ikuti langkah-langkah berikut:

brew install nginx
sudo nginx

Kemudian uji apakah instalasi berfungsi.

http://localhost:8080
nginx localhost: 8080 index.html

Sekarang ubah pengaturan default.

# Intel x86 Chipset
code /usr/local/etc/nginx/nginx.conf
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/nginx/nginx.conf

Ganti #usernobody di awal file nginx.conf. Berikut ini ditampilkan di awal file.

user <your_username> staff;

Kemudian tambahkan yang berikut ini ke blok http {}:

# allow for many servers
server_names_hash_bucket_size 512;

Kemudian buat pembaruan ini di dalam blok {} server.

# From
listen 8080;
server_name  localhost;
index index.html;

# To
listen 80;
server_name  localhost test.x;
index index.html index.htm index.php;

Selanjutnya, tambahkan gateway FastCGI ke server default Anda, php-fpm. Versi terbaru dari php yang diinstal adalah yang terbaik. Untuk server lain, Anda dapat mengatur versi PHP sebagai persyaratan proyek.

location ~ \.php$ {
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
  fastcgi_pass 127.0.0.1:9074;
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
}

Kemudian tambahkan beberapa keamanan dasar ke server default.

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

Kemudian tambahkan set karakter.

charset utf-8;

Sekarang Anda mungkin ingin mengizinkan pengunggahan file besar.

http {
    ...
    client_max_body_size 100M;
}

Kemudian edit file index.html yang sebenarnya digunakan oleh nginx. Oleh karena itu, ganti index.html dengan file index.php. Kemudian beberapa kode php untuk memastikan semuanya berfungsi.

# Intel x86 Chipset
mv /usr/local/var/www/index.html /usr/local/var/www/index.php
code /usr/local/var/www/index.php
# Apple Silicon M1 Chipset
mv /opt/homebrew/var/www/index.html /opt/homebrew/var/www/index.php
code /opt/homebrew/var/www/index.php
<?php echo phpinfo(); ?>

Muat ulang nginx.

sudo nginx -s reload
http://localhost

nginx index.php with info.

Untuk menambahkan lebih banyak server, buka direktori server nginx. Tambahkan sebagai file terpisah ke Intel sebagai /usr/local/etc/nginx/ server dan M1 sebagai /opt/homebrew/etc/nginx/server/. Berikut adalah template dan template dasar Intel untuk M1 Mac.

To keep things organized, you will want to create an SSL folder to hold your future SSL certs.

#Intel x86 Chipset
mkdir /usr/local/etc/nginx/ssl/
#Apple Silicon M1 Chipset
mkdir /opt/homebrew/etc/nginx/ssl/
#Intel x86 Chipset
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate      /usr/local/etc/nginx/ssl/{{host}}.crt;
    ssl_certificate_key  /usr/local/etc/nginx/ssl/{{host}}.key;
    ssl_ciphers          HIGH:!aNULL:!MD5;
    
    # listen       80;
    server_name {{host}};
    root   {{root}};

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;
    
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9074;
        fastcgi_index index.php;
        include fastcgi_params;
    }
    
    location ~ /\.(?!well-known).* {
        deny all;
    }
}
#Apple Silicon M1 Chipset
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate      /opt/homebrew/etc/nginx/ssl/{{host}}.crt;
    ssl_certificate_key  /opt/homebrew/etc/nginx/ssl/{{host}}.key;
    ssl_ciphers          HIGH:!aNULL:!MD5;
    
    # listen       80;
    server_name {{host}};
    root   {{root}};

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;
    
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9074;
        fastcgi_index index.php;
        include fastcgi_params;
    }
    
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Gunakan fungsi bash ini untuk mempercepat proses penambahan SSL ke server nginx. Fitur-fitur ini:

  • Hasilkan sertifikat unik untuk setiap situs.
  • Tambahkan sertifikat SSL ke Rantai Kunci Mac Anda.
  • PHP7.4 akan menghasilkan server nginx untuk domain default Anda.

Untuk menambahkan server, gunakan perintah nginxcreate my.test.x, tetapi ada baiknya untuk memodifikasi file agar sesuai dengan pengaturan Anda. Sekali lagi, jika Anda menggunakan Mac M1, ingatlah bahwa Anda perlu mengubah jalur /usr/local/etc ke /opt/homebrew/etc.

Berikut ini tautan ke template server yang saya buat: Intel dan M1.

# Intel x86 Chipset
alias nginxreload="sudo nginx -s reload"
alias nginxrestart="sudo nginx -s stop && sudo nginx"
alias nginxservers="cd /usr/local/etc/nginx/servers"
alias nginxlist="ll /usr/local/etc/nginx/servers"

# nginxcreate text.x /Users/yourname/Code/laravel/public/
function nginxcreate() {
    wget https://gist.githubusercontent.com/kevindees/4e3508357ef46676f7635c545e4fd017/raw/f2c2f2716605e4b22a437058e2a7ebf5f8b775b9/nginx-server-template.conf -O /usr/local/etc/nginx/servers/$1.conf
    sed -i '' "s:{{host}}:$1:" /usr/local/etc/nginx/servers/$1.conf

    if [ "$2" ]; then
        sed  -i '' "s:{{root}}:$2:" /usr/local/etc/nginx/servers/$1.conf
    else
        sed  -i '' "s:{{root}}:$HOME/Sites/$1:" /usr/local/etc/nginx/servers/$1.conf
    fi

    nginxaddssl $1

    nginxrestart

    code /usr/local/etc/nginx/servers/$1.conf
 }

 function nginxaddssl() {
     openssl req \
        -x509 -sha256 -nodes -newkey rsa:2048 -days 3650 \
        -subj "/CN=$1" \
        -reqexts SAN \
        -extensions SAN \
        -config <(cat /System/Library/OpenSSL/openssl.cnf; printf "[SAN]\nsubjectAltName=DNS:$1") \
        -keyout /usr/local/etc/nginx/ssl/$1.key \
        -out /usr/local/etc/nginx/ssl/$1.crt

    sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /usr/local/etc/nginx/ssl/$1.crt
 }

 function nginxedit() {
     code /usr/local/etc/nginx/servers/$1
 }
# Apple Silicon M1 Chipset
alias nginxreload="sudo nginx -s reload"
alias nginxrestart="sudo nginx -s stop && sudo nginx"
alias nginxservers="cd /opt/homebrew/etc/nginx/servers"
alias nginxlist="ll /opt/homebrew/etc/nginx/servers"

# nginxcreate text.x  /Users/yourname/Code/laravel/public/
function nginxcreate() {
    wget https://gist.githubusercontent.com/kevindees/deb3e2bdef377bbf2ffacbc48dfa7574/raw/1d5dc055fe87319a7f247808c9f9ee14c6abd9cd/nginx-server-template-m1.conf -O /opt/homebrew/etc/nginx/servers/$1.conf
    sed -i '' "s:{{host}}:$1:" /opt/homebrew/etc/nginx/servers/$1.conf

    if [ "$2" ]; then
        sed  -i '' "s:{{root}}:$2:" /opt/homebrew/etc/nginx/servers/$1.conf
    else
        sed  -i '' "s:{{root}}:$HOME/Sites/$1:" /opt/homebrew/etc/nginx/servers/$1.conf
    fi

    nginxaddssl $1

    nginxrestart

    code /opt/homebrew/etc/nginx/servers/$1.conf
 }

 function nginxaddssl() {
     openssl req \
        -x509 -sha256 -nodes -newkey rsa:2048 -days 3650 \
        -subj "/CN=$1" \
        -reqexts SAN \
        -extensions SAN \
        -config <(cat /System/Library/OpenSSL/openssl.cnf; printf "[SAN]\nsubjectAltName=DNS:$1") \
        -keyout /opt/homebrew/etc/nginx/ssl/$1.key \
        -out /opt/homebrew/etc/nginx/ssl/$1.crt

    sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /opt/homebrew/etc/nginx/ssl/$1.crt
 }

 function nginxedit() {
     code /opt/homebrew/etc/nginx/servers/$1
 }

dnsmasq

Anda dapat menggunakan dnsmasq untuk menghemat kerumitan mengedit file host secara terus-menerus. Perhatikan bahwa M1 memiliki jalur baru ini.


brew install dnsmasq

Kemudian konfigurasikan TLD host kustom * .x (atau TLD host lain seperti .test) yang mengarah ke 127.0.0.1.

(Sesuaikan perintah sesuai kebutuhan)

# Intel x86 Chipset
echo 'address=/.x/127.0.0.1' > /usr/local/etc/dnsmasq.conf
# Apple Silicon M1 Chipset
echo 'address=/.x/127.0.0.1' > /opt/homebrew/etc/dnsmasq.conf
sudo brew services start dnsmasq
sudo mkdir -v /etc/resolver 
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/x'

Uji apakah itu berfungsi.

ping test.x

MailHog

Saya suka menjalankan mailhog sebagai server email pengembangan untuk menguji email. Namun, jika Anda tidak ingin melakukan langkah ini, tidak apa-apa.

brew install mailhog
brew services start mailhog

# start with
mailhog

Anda sekarang dapat mengakses MailHog di http://localhost:8025/. Namun, Anda perlu menghubungkan MailHog ke PHP dan menghubungkan perintah mail mac yang digunakan Postfix (Postfix hadir dengan macOS 12 Monterey).

code /etc/postfix/main.cf

Untuk menghubungkan MailHog ke Postfix, tambahkan berikut ini di akhir file:

# MailHog
myhostname = localhost
relayhost = [127.0.0.1]:1025

Kirim email percobaan dan periksa Mail Hog.

echo "Test email from Postfix" | mail -s "Test Email" [email protected]

Kemudian, jika Anda memiliki beberapa versi PHP, perbarui setiap file php.ini sebagai berikut, lalu mulai ulang php-fpm. Anda perlu menggunakan test @localhost, tetapi perlu diketahui bahwa itu akan ditimpa oleh skrip PHP yang sedang dieksekusi. Perhatikan bahwa M1 memiliki jalur baru ini.

# Intel x86 Chipset
sendmail_path = /usr/local/opt/mailhog/bin/MailHog sendmail test@localhost
# Apple Silicon M1 Chipset
sendmail_path = /opt/homebrew/opt/mailhog/bin/MailHog sendmail test@localhost
# Update your version number as needed
# 1.0.1 as of this writing
sendmail_path = /usr/local/Cellar/mailhog/1.0.1/bin/MailHog sendmail test@localhost
sudo killall php-fpm

Redis

Instal Redis. Ini akan menginstal RedisServer v6.

brew install redis
brew services start redis
redis-server

Anda dapat memperbarui nama file dump.rdb default di redis.conf jika diperlukan. Perhatikan bahwa M1 memiliki jalur baru ini.

# Intel x86 Chipset
code /usr/local/etc/redis.conf
# Apple Silicon M1 Chipset
code /opt/homebrew/etc/redis.conf# The filename where to dump the DB
# The filename where to dump the DB
dbfilename dump.rdb
sumber:
  • https://kevdees.com/macos-12-monterey-nginx-setup-multiple-php-versions/
  • https://github.com/shivammathur/homebrew-php
  • https://medium.com/@wvervuurt/how-to-run-multiple-php-versions-simultaneously-under-os-x-el-capitan-using-standard-apache-98351f4cec67
  • https://getgrav.org/blog/macos-bigsur-apache-multiple-php-versions
  • https://dev.to/ravishan16/brew-redis-on-mac-1ni8