mac部署php环境
最近才入手了macbook pro m1芯片系列的,发现环境配置和之前的不同,很多不兼容芯片,brew安装路径也需要更改,带来了环境很多路径不一致的问题;好在能避开的都避开了.
https://www.jianshu.com/p/8d0b42470679
不是m1芯片的都可以安装的:
https://github.com/shivammathur/homebrew-php
php7.0 以下都已经停止了更新,可能都安装不了了!!!!!
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
mysql@5.7 is keg-only, which means it was not symlinked into /opt/homebrew,
because this is an alternate version of another formula.
If you need to have mysql@5.7 first in your PATH run:
echo 'export PATH="/opt/homebrew/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc
For compilers to find mysql@5.7 you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/mysql@5.7/lib"
export CPPFLAGS="-I/opt/homebrew/opt/mysql@5.7/include"
For pkg-config to find mysql@5.7 you may need to set:
export PKG_CONFIG_PATH="/opt/homebrew/opt/mysql@5.7/lib/pkgconfig"
To have launchd start mysql@5.7 now and restart at login:
brew services start mysql@5.7
Or, if you don't want/need a background service you can just run:
/opt/homebrew/opt/mysql@5.7/bin/mysql.server start
==> Summary
???? /opt/homebrew/Cellar/mysql@5.7/5.7.32: 318 files, 233.1MB, built in 4 minutes 5 seconds
mysql --- mysql安装,需要brew安装好了,否则会重启就丢掉,m1芯片安装brew,需要改变路径;
brew install --build-from-source mysql@5.7
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
PHP
基本正确的,有些路径需要根据项目跑
php-fpm 关闭命令
通过进程来关闭有时候不方便
brew 也可以关闭开启php-fpm
zb@zbdeMacBook-Pro etc % brew services stop php@7.1
Stopping `php@7.1`... (might take a while)
==> Successfully stopped `php@7.1` (label: homebrew.mxcl.php@7.1)
zb@zbdeMacBook-Pro etc % brew services start php@7.1
==> Successfully started `php@7.1` (label: homebrew.mxcl.php@7.1)
nginx.conf 测试用的配置,注意php-fpm配置开启的是9999 端口----用mac自带的php,需要新开启端口
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /Users/zb/www/gaodian;
index index.html index.htm index.php;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
location ~ \.php$ {
root /Users/zb/www/gaodian;
fastcgi_pass 127.0.0.1:9999;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
include servers/*;
}
用自带php,配置nginx.conf ---- 如果加上最下面正确解决pathinfo问题的,相信也可以跑起来,不过有的说自带的php很多扩展没打开;
user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
# add zb
server_names_hash_bucket_size 64;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root html;
# index index.html index.htm;
#}
location / {
root /Users/zb/www;
index index.php;
}
location ~ \.php$ {
root /Users/zb/www;
fastcgi_pass 127.0.0.1:9999;
fastcgi_index index.php;
# add later
#fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# add later
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
include servers/*;
}
项目nginx 配置路径
···
zb@zbdeMacBook-Pro servers % pwd
/opt/homebrew/etc/nginx/servers
server {
listen 80;
server_name local.gaodian.com;
index index.html admin.php index.php;
root /Users/zb/www/gaodian/store/Public;
location / {
root /Users/zb/www/gaodian/store/Public;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /Users/zb/www/gaodian/store/Public;
fastcgi_pass 127.0.0.1:9999;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location /nginx_status
{
stub_status on;
access_log off;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /\.
{
deny all;
}
#access_log /home/wwwlogs/access-gaodian.log;
}
brew 安装php,用mac自带的php,发现很多配置文件找不到
就用brew来安装php,发现brew list中的7.2 7.3 安装都发现m1 芯片的问题
结果brew install php@7.1 可以顺利安装-----有条活路了!!!!!
https://www.debug8.com/php/t_77676.html
- 安装php7.1成功提示:
Caveats
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php7_module /opt/homebrew/opt/php@7.1/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:
/opt/homebrew/etc/php/7.1/
php@7.1 is keg-only, which means it was not symlinked into /opt/homebrew,
because this is an alternate version of another formula.
If you need to have php@7.1 first in your PATH, run:
echo 'export PATH="/opt/homebrew/opt/php@7.1/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/opt/homebrew/opt/php@7.1/sbin:$PATH"' >> ~/.zshrc
For compilers to find php@7.1 you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/php@7.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/php@7.1/include"
To have launchd start shivammathur/php/php@7.1 now and restart at login:
brew services start shivammathur/php/php@7.1
Or, if you don't want/need a background service you can just run:
php-fpm
==> Summary
???? /opt/homebrew/Cellar/php@7.1/7.1.33: 513 files, 63.6MB
==> Caveats
==> php@7.1
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php7_module /opt/homebrew/opt/php@7.1/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:
/opt/homebrew/etc/php/7.1/
php@7.1 is keg-only, which means it was not symlinked into /opt/homebrew,
because this is an alternate version of another formula.
If you need to have php@7.1 first in your PATH, run:
echo 'export PATH="/opt/homebrew/opt/php@7.1/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/opt/homebrew/opt/php@7.1/sbin:$PATH"' >> ~/.zshrc
For compilers to find php@7.1 you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/php@7.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/php@7.1/include"
To have launchd start shivammathur/php/php@7.1 now and restart at login:
brew services start shivammathur/php/php@7.1
Or, if you don't want/need a background service you can just run:
php-fpm
设置php7.1 为默认版本,启动php7.1 服务
sudo vim ~/.bash_profile
export PATH="$(brew --prefix php@7.1)/bin:$PATH"
source ~/.bash_profile
注意:在运行下面命令之前先把原先的PHP服务关闭,避免端口冲突,启动失败!
brew services start php@7.2
关闭之前php-fpm 可以直接sudo kill ....; 加上-USR2 为平滑重启
设置php7.1 开机自动启动
原本brew 路径没变情况下的安装
mkdir -p ~/Library/LaunchAgents
cp /usr/local/opt/php@7.2/homebrew.mxcl.php@7.2.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php@7.2.plist
brew在新路径下的安装
mkdir -p ~/Library/LaunchAgents
cp /opt/homebrew/opt/php@7.1/homebrew.mxcl.php@7.1.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php@7.1.plist
项目可以跑起来终结nginx.conf 配置----主要解决了nginx的pathinfo问题;
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
# add zb 此处解决了,在servers下单独配置***.conf 文件;
server_names_hash_bucket_size 64;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm index.php;
#下面主要是解决在url地址中省略"index.php"时使用的规则
if ( -f $request_filename) {
break;
}
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if (!-e $request_filename) {
#地址作为将参数rewrite到index.php上
rewrite ^/(.*)$ /index.php?s=/$1 last;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(.*)$; #新加第一句
fastcgi_param PATH_INFO $fastcgi_path_info;#新加第二句
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
server {
listen 80; #监听端口
server_name local.txsq.com; #域名名称
root /Users/zb/www/txsq/tortoise/Public; #网站根目录
index index.html index.htm index.php; #默认打开文件
#access_log logs/xsxcx.access.log main;
location / {
#下面主要是解决在url地址中省略"index.php"时使用的规则
if ( -f $request_filename) {
break;
}
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if ( !-e $request_filename) {
#地址作为将参数rewrite到index.php上
rewrite ^/(.*)$ /index.php?s=/$1 last;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(.*)$; #新加第一句
fastcgi_param PATH_INFO $fastcgi_path_info;#新加第二句
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 此处解决了pathinfo的问题,路径必须指向项目!
location ~ \.php/?.*$ {
root /Users/zb/www/txsq/tortoise/Public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#加载Nginx默认"服务器环境变量"配置
include fastcgi.conf;
#设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
set $fastcgi_script_name2 $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
set $fastcgi_script_name2 $1;
set $path_info $2;
}
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
}
}
include servers/*;
}
brew 安装phpmyadmin
* brew search phpmyadmin
* brew install phpmyadmin
phpmyadmin.config.inc.php 路径
The configuration file is /opt/homebrew/etc/phpmyadmin.config.inc.php
由于brew安装路径改变了,博文上phpmyadmin 的路径不同了;
zb@zbdeMacBook-Pro share % cp -rf phpmyadmin /Users/zb/www/
zb@zbdeMacBook-Pro share % pwd
/opt/homebrew/opt/phpmyadmin/share
zb@zbdeMacBook-Pro nginx % brew search phpmyadmin
==> Formulae
phpmyadmin
zb@zbdeMacBook-Pro nginx % brew install phpmyadmin
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 3 taps (shivammathur/php, homebrew/core and homebrew/cask).
==> New Formulae
htmltest mpdecimal
==> Updated Formulae
Updated 56 formulae.
==> New Casks
digital slippi-dolphin
==> Updated Casks
Updated 163 casks.
==> Deleted Casks
oni project-slippi-dolphin
==> Downloading https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.tar.gz
######################################################################## 100.0%
==> Caveats
To enable phpMyAdmin in Apache, add the following to httpd.conf and
restart Apache:
Alias /phpmyadmin /opt/homebrew/share/phpmyadmin
<Directory /opt/homebrew/share/phpmyadmin/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
Then open http://localhost/phpmyadmin
The configuration file is /opt/homebrew/etc/phpmyadmin.config.inc.php
==> Summary
???? /opt/homebrew/Cellar/phpmyadmin/5.0.4: 3,200 files, 43.8MB, built in 3 seconds
我是单独给phpmyadmin配置域名访问的
server {
listen 80; #监听端口
server_name local.phpmyadmin.com; #域名名称
root /Users/zb/www/phpmyadmin; #网站根目录
index index.html index.htm index.php; #默认打开文件
#access_log logs/xsxcx.access.log main;
location / {
#下面主要是解决在url地址中省略"index.php"时使用的规则
if ( -f $request_filename) {
break;
}
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if ( !-e $request_filename) {
#地址作为将参数rewrite到index.php上
rewrite ^/(.*)$ /index.php?s=/$1 last;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(.*)$; #新加第一句
fastcgi_param PATH_INFO $fastcgi_path_info;#新加第二句
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 此处解决了pathinfo的问题,路径必须指向项目!
location ~ \.php/?.*$ {
root /Users/zb/www/phpmyadmin;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#加载Nginx默认"服务器环境变量"配置
include fastcgi.conf;
#设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
set $fastcgi_script_name2 $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
set $fastcgi_script_name2 $1;
set $path_info $2;
}
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
}
}
brew 安装redis
- 一开始安装博客安装redis@3.2 redis@4.0的,结果都报错提示;
brew install redis
Warning: Treating redis as a formula. For the cask, use homebrew/cask/redis
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/redis-6.0.10.arm64_big_sur.bottle.tar.gz
######################################################################## 100.0%
==> Pouring redis-6.0.10.arm64_big_sur.bottle.tar.gz
==> Caveats
To have launchd start redis now and restart at login:
brew services start redis
Or, if you don't want/need a background service you can just run:
redis-server /opt/homebrew/etc/redis.conf
==> Summary
???? /opt/homebrew/Cellar/redis/6.0.10: 13 files, 4MB
博客配置:
If you need to have redis@3.2 first in your PATH run:
echo 'export PATH="/usr/local/opt/redis@3.2/bin:$PATH"' >> ~/.zshrc
brew 路径被更改后,路径实际情况:
echo 'export PATH="/opt/homebrew/opt/redis/bin:$PATH"' >> ~/.zshrc
/opt/homebrew/etc 下修改redis.conf找到
daemonize no改成yes 以守护进程的方式启动
安装php-redis
下载php-redis
http://pecl.php.net/package/redis
解压
cd redis-4.*/
通过phpize生成编译configure配置文件
phpize
找到自己安装php路径,加上\
./configure --with-php-config=/opt/homebrew/Cellar/php\@7.1/7.1.33/bin/php-config
编译
make
make install
配置 php.ini文件 -- 通过phpinfo找到php.ini 位置
加上:
extension="redis.so"
测试 访问 localhost/redis.php
<?php
//实例化redis对象
$redis = new redis();
//连接redis,第一个参数是redis服务的IP127.0.0.1是自己的,6379是端口号
$redis->connect('127.0.0.1', 6379);
echo "Server is running: " . $redis->ping();