Mac M1/Intel 芯片 Nginx+PHP开发环境配置——初探(一)

article/2024/5/21 22:04:00

最近因为新买Mac M系列芯片笔记本,一直也没搭建过PHP的开发环境,花了一点时间特意在本机做了一次环境搭建测试具体如下。

开始之前,需要安装一些工具来完成配置,工具列表如下:

  1. Xcode

  1. VS Code

  1. Homebrew

  1. OpenSSL & wget

  1. MySQL

  1. Postgres

  1. PHP多版本

  1. Nginx

  1. 安装Xcode

xcode-select --install

  1. VS Code安装此处略过。

  1. 安装homebrew

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

  1. 安装openssl与wget

brew install openssl
brew install wget

  1. 安装MySQL

brew install mysql
brew services start mysql
brew services list

# Intel x86 Chipset

code /usr/local/etc/my.cnf

# Apple Silicon M1 Chipset

code /opt/homebrew/etc/my.cnf

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"

使用安全密码

mysql_secure_installation
brew services restart mysql

PS:MySQL8认证需要更新每个用户mysql_native_password,但是用户名和密码前没有空格,请务必注意。

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

  1. 安装Postgres

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

确认用户列表

postgres-# \du

  1. 安装多版本PHP

在Mac电脑上安装多个PHP版本时不能使用PHP默认的自制内核,而需要使用shivammathur/php。

brew tap shivammathur/phpbrew install shivammathur/php/php@7.2
brew install shivammathur/php/php@7.3
brew install shivammathur/php/php@7.4
brew install shivammathur/php/php@8.0
brew install shivammathur/php/php@8.1

设置php7.4为 php CLI版本:

brew unlink php
brew link --overwrite --force php@7.4

对于php-fpm的每个版本更新,都需要提供唯一的端口。更改每个php-fpm的端口以匹配其php版本号。例如:php@7.4,我使用的端口为9074。

此外,如果希望php-fpm在你的用户帐户上运行,而不是_www。那么文件夹路径的差异取会决于计算机的Mac处理器(Intel x86或Apple M1 ARM),这一点也是需要非常注意的。

# 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

另外,在启动php-fpm前,可以在php.ini中将upload_max_filesize和post_max_size上限进行调整,比如:10M。

不同芯片的路径如下:

# 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

/usr/local/etc/php/8.2/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

/opt/homebrew/etc/php/8.2/php.ini

以上准备工作完成后,则可以依据不同版本启动php-fpm。命令如下:

brew services start php@7.2
brew services start php@7.3
brew services start php@7.4
brew services start php@8.0
brew services start php@8.1
brew services start php@8.2

启动完成后,确认端口与进程:

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

可以再对不同版本的PHP设置别名,具体操作如下:

# Intel x86 Chipset

alias php72="/usr/local/opt/php@7.2/bin/php"

alias php73="/usr/local/opt/php@7.3/bin/php"

alias php74="/usr/local/opt/php@7.4/bin/php"

alias php80="/usr/local/opt/php@8.0/bin/php"

alias php81="/usr/local/opt/php@8.1/bin/php"

alias php82="/usr/local/opt/php@8.2/bin/php"

# Apple Silicon M1 Chipset

alias php72="/opt/homebrew/opt/php@7.2/bin/php"

alias php73="/opt/homebrew/opt/php@7.3/bin/php"

alias php74="/opt/homebrew/opt/php@7.4/bin/php"

alias php80="/opt/homebrew/opt/php@8.0/bin/php"

alias php81="/opt/homebrew/opt/php@8.1/bin/php"

alias php82="/opt/homebrew/opt/php@8.2/bin/php"

刷新环境变量:

source ~/.bash_profile
source ~/.zshrc

刷新后可以测试一下别名是否能够切换不同的php版本,具体如下:

php72 -v

php73 -v

php74 -v

php80 -v

php81 -v

php82 -v

默认php -v命令:

此处也提供一个更简单的手动切换php版本方法:

在~/.bash_profile加入如下代码即可。

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

同于手动切换版本命令:

# brew
brew unlink php
brew link --overwrite --force php@7.4# bash function
phpv 7.4

关于升级PHP的问题,如果出现升级错误,可以使用以下方式:

brew reinstall shivammathur/php/php@7.4

在WebStorm中新增debug的方法——Xdebug,这个方法是提供给喜欢在WebStorm中调试程序的小伙伴用的,不过我也喜欢,很是方便,具体配置如下:

brew link --overwrite --force php@7.2
pecl uninstall -r xdebug 
pecl install xdebugbrew link --overwrite --force php@7.3
pecl uninstall -r xdebug 
pecl install xdebugbrew link --overwrite --force php@7.4
pecl uninstall -r xdebug 
pecl install xdebugbrew link --overwrite --force php@8.0
pecl uninstall -r xdebug
pecl install xdebugbrew link --overwrite --force php@8.1
pecl uninstall -r xdebug
pecl install xdebugbrew link --overwrite --force php@8.2
pecl uninstall -r xdebug
pecl install xdebug

此处对于每个不同的版本都需要更新php.ini文件,例如,我在这里仅仅是更新php7.4的,具体内容如下:

# 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这里有一个小问题则需要说明:需要删除zend_extension="xdebug。因为在pecl安装过程中会将其添加到php.ini文件的顶部,并且xdebug默认端口是9003。
php.ini具体内容如下:
[xdebug]
zend_extension="xdebug.so"
xdebug.mode=debug
xdebug.client_port=9003
xdebug.idekey=PHPSTORM

当完成xdebug的配置后,并可以关闭所有的php-fpm进程,不过在生产环境不建议开启xdebug,新的mac或者是开发环境可以这么操作,请务必注意。

  1. Nginx

安装Nginx,命令如下:

brew install nginx
sudo nginx

成功后,做测试访问(端口请自行查看配置,默认为8080/80):

http://localhost:8080

修改Nginx默认配置:

# Intel x86 Chipset

code /usr/local/etc/nginx/nginx.conf

# Apple Silicon M1 Chipset

code /opt/homebrew/etc/nginx/nginx.conf

在http{}内容块中添加:

# 允许多服务器配置
server_names_hash_bucket_size 512;# 大文件配置
client_max_body_size 100M;

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

这下就可以开始配置FastCGI网关了,将其添加到默认的服务器的php-fpm中,建议安装最新版本的php,对于其他的服务器配置可以按项目需求配置。

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)(/.+)$;
}charset utf-8;

# 添加基础安全配置

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

配置完成后可以建立测试文件,具体路径如下:

Intel x86芯片路径:

mv /usr/local/var/www/index.html /usr/local/var/www/index.php

code /usr/local/var/www/index.php

Apple Silicon M1 芯片路径:

mv /opt/homebrew/var/www/index.html /opt/homebrew/var/www/index.php

code /opt/homebrew/var/www/index.php

此处我使用index.html/index.php

<?php echo phpinfo();
?>

重载nginx:

sudo nginx -s reload

访问http://localhost或http://localhost:8080

至此,nginx配置php单站点服务已经基本完成,可以进行初步的php开发。

下一节将讲述多站点配置。


http://www.ngui.cc/article/show-1007708.html

相关文章

Spring《二》bean的实例化与生命周期

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录一、bean实例化&#x1f34d;1.构造方法 ***2.静态工厂 *使用工厂创建对象实例化bean3.实例工厂 ***使用示例工厂创建对象实例工厂实例化beanFactoryBean二、生命周期&#x1f351;1.生命周期设置2.在main方法使…

Vector - CAPL - 实时时间on *

前面有简单的提到过on message的用法&#xff0c;但是对于整个on *家族来说&#xff0c;on message仅仅这是其中之一&#xff0c;为了能够的了解、学习这个家族的成员&#xff0c;因此做了专门的整理的&#xff0c;将囊括CALP用常用的所有的on *家族成员&#xff0c;并对其进行…

【JavaEE】Java设计模式-单例模式(饿汉式与懒汉式)

目录 1.设计模式是啥&#xff1f; 2.单例模式 2.1什么是单例模式 2.2饿汉模式 2.3懒汉模式 3.懒汉模式与饿汉模式的区别 1.设计模式是啥&#xff1f; 设计模式是前人经过总结&#xff0c;通过对不同应用场景应该运用何种方法解决问题的模式。我们可以将它看成NBA中的…

English Learning - L2-10 英音地道语音语调 鼻辅音 [m] [n] [ŋ] 舌边音 [l] [r] 2023.03.23 周四

English Learning - L2-10 英音地道语音语调 鼻辅音 [m] [n] [ŋ] 舌边音 [l] [r] 2023.03.23 周四课前准备活动和回顾鼻辅音鼻辅音 [m]鼻辅音 [n]鼻辅音 [ŋ]鼻辅音对比鼻辅音发音技巧对应单词对应的句子舌边音舌边音 [l]发音技巧对应单词[l] 和 [n] 的区分舌边音 [r]发音技巧…

基于51单片机的自动打铃打鸣作息报时系统AT89C51数码管三极管时钟电路

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;单片机打铃 获取完整无水印论文报告说明&#xff08;含源码程序、电路原理图和仿真图&#xff09; 本次设计中的LED数码管电子时钟电路采用24小时制记时方式,本次设计采用AT89C51单片机的扩展芯片和6个PNP三极管做驱动&…

Matlab如何计算功率谱熵?|信息熵之功率谱熵

信息熵 熵的概念最初在热力学中提出&#xff0c;熵的本质被解释为即熵的本质是一个系统“内在的混乱程度”。熵的概念在不同的学科中引申出更为具体的概念&#xff0c;在信息论中信息熵的具体定义为&#xff1a; H(X)p(xi)∑i1n1p(xi)−p(xi)∑i1np(xi)H(X)p(x_i)\sum_{i1}^n \…

扩散模型的数学理解

前置知识&#xff1a;标准高斯分布的乘法&#xff1a;若z~N(0, I)&#xff0c;则 n*z~N(0, n^2 * I)。因为期望为0&#xff0c;乘以n后还是为0&#xff0c;但方差为1&#xff0c;乘以n后还要加上平方&#xff0c;所以说是n^2 * I。概率公式中的逗号、分号、竖线&#xff1a;分号…

Vue中的常用指令!!

Vue 中的指令是 Vue 的核心功能之一&#xff0c;用于在模板中添加特殊的标签&#xff0c;使得 DOM 元素和 Vue 实例的数据绑定在一起&#xff0c;实现双向数据绑定和动态更新。下面是常用的 Vue 指令。 v-if 指令&#xff1a;根据条件动态渲染元素 <!-- 根据 show 布尔值的…

【算法基础】欧拉函数

一、欧拉函数 1. 公式法求欧拉函数 2. 筛法求欧拉函数 二、案例分析1 (公式法求欧拉函数) (一)Question 1. 问题描述 2. Input 第一行包含整数 n。接下来 n行,每行包含一个正整数 ai。(1 ≤ n ≤ 100, 1 ≤ ai ≤ 2109) 3. Output 输出共 n 行,每行输出一个正整数…

Python接口自动化 ❀ JsonPath提取器和正则提取器

Python接口自动化 ❀ JsonPath提取器和正则提取器一、前言1.1 正则提取器1.2 正则示例&#xff1a;1.3 JsonPath提取器1.4 JsonPath提取器具体使用一、前言 我们一般在做接口关联时&#xff0c;会通过保存中间变量实现接口关联&#xff0c;在关联时就需要用到变量提取&#xf…