0%

MacOS-Web开发工具安装

MacOS-Web开发工具安装


brew 软件包工具安装

  1. https://brew.sh 网站复制 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 脚本,在终端中,执行安装 brew 工具。

  2. brew 安装过程中,卡在 Downloading Command Line Tools for Xcode,至 https://developer.apple.com/download/more/ 下载,对应 xcode 版本的 Command_Line_Tools_for_Xcode_12.4.dmg 安装文件,进行手动安装。或者通过 xcode-select --intall 命令进行安装(可查看安装进度)。

  3. Xcode 命令行工具安装成功后,继续执行 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) 命令,安装 brew

1
2
3
4
5
6
7
$ brew update
error: Not a valid ref: refs/remotes/origin/master
fatal: ambiguous argument 'refs/remotes/origin/master': unknown revision or path not in the working tree.
$ rm -rf $(brew --repo homebrew/core)
$ brew tap homebrew/core
$ brew install nginx mysql
$ brew services start nginx

启动系统自带 php 版本的 php-fpm 程序。

1
2
3
4
5
6
7
8
9
10
11
12
# 解决:
# 1. ERROR: failed to open configuration file '/private/etc/php-fpm.conf': No such file or directory (2)
$ sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
# 2. ERROR: No pool defined. at least one pool section must be specified in config file
$ sudo cp /private/etc/php-fpm.d/www.conf.default /private/etc/php-fpm.d/www.conf

# 系统中并无 `/usr/var/log` 目录,修改配置 php-fpm.log 错误日志路径:error_log = /usr/local/var/log/php-fpm.log
# ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
$ sudo vi /private/etc/php-fpm.conf

# 启动 php-fpm
$ sudo php-fpm

启动 mysql 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ mysql --version
mysql Ver 8.0.23 for osx10.15 on x86_64 (Homebrew)
$ brew services start mysql
$ mysql -uroot phpcms < /Users/codezm/www/police/phpcmsv9.sql
# mysql 8.0 对 enum 有更严格的要求,对插入数据的 `5724` 行开始起,修改 `enum` 字段默认值由 `''` 为 `'0'`。
$ vi /Users/codezm/www/police/phpcmsv9.sql
$ mysql -uroot phpcms < /Users/codezm/www/police/phpcmsv9.sql

# 修改 mysql root 账号密码
$ mysql -uroot
mysql> use mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';

# mysql 配置文件
$ ls -la /usr/local/etc/my.cnf

# brew services start mysql 实际上将 /usr/local/opt/mysql/homebrew.mxcl.mysql.plist 复制到 /Users/codezm/Library/LaunchAgents/homebrew.mxcl.mysql.plist


# mysql.server start


# mysql 8.0
vim /usr/local/etc/my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password
# ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';

解决上传图片问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 解决 nginx:413 状态码错误
$ vi /usr/local/etc/nginx/nginx.conf

http {
...
client_max_body_size 20m;
...

server {
...
}
}

# 默认配置项值
$ vi php.ini
upload_max_filesize = 2M
post-max-size = 8M

$ vi /usr/local/var/log/nginx/error.log
[error] 63127#0: *180 FastCGI sent in stderr: "PHP message: PHP Warning: POST Content-Length of 11096034 bytes exceeds the limit of 10485760 bytes in Unknown on line 0" while reading response header from upstream, client: 127.0.0.1, server: , request: "POST /index.php"

# 更改配置项值
$ vi php.ini
upload_max_filesize = 100M
post-max-size = 100M

$ chmod -R 777 caches sites

PHP

Mac 自带 php 版本 GD 库缺少 Freetype

1
2
3
$ brew install php@7.2 --build-from-source
# 7.4 起, 已将 get_magic_quotes_gpc() is deprecated
$ brew install php@7.4 --build-from-source

配置 php 环境变量

默认系统自带 php 的版本是 7.1.23,而新安装的 php 版本是 7.2.34

1
brew link --overwrite php@7.2

PHP 安装部署相关路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# php-fpm 日志路径
$ tail -f /usr/local/var/log/php-fpm.log

# php 可执行文件
$ ls -la /usr/local/Cellar/php@7.4/7.4.16_1/bin
total 78640
drwxr-xr-x 12 codezm admin 384 6 3 15:48 .
drwxr-xr-x 15 codezm admin 480 6 3 15:48 ..
-r-xr-xr-x 1 codezm admin 970 6 3 15:48 pear
-r-xr-xr-x 1 codezm admin 991 6 3 15:48 peardev
-r-xr-xr-x 1 codezm admin 904 6 3 15:48 pecl
lrwxr-xr-x 1 codezm admin 9 3 2 18:35 phar -> phar.phar
-rwxr-xr-x 1 codezm admin 14912 6 3 15:48 phar.phar
-r-xr-xr-x 1 codezm admin 13377808 6 3 15:48 php
-r-xr-xr-x 1 codezm admin 13322488 6 3 15:48 php-cgi
-r-xr-xr-x 1 codezm admin 7108 6 3 15:48 php-config
-r-xr-xr-x 1 codezm admin 13510436 6 3 15:48 phpdbg
-r-xr-xr-x 1 codezm admin 4581 6 3 15:48 phpize
ls -la /usr/local/Cellar/php@7.4/7.4.16_1/sbin
-r-xr-xr-x 1 codezm admin 13411132 6 3 15:48 php-fpm

# 配置文件
$ php --ini
$ vim /usr/local/etc/php/7.4/php.ini

# PHP扩展目录
$ ls -la /usr/local/lib/php/pecl/20190902

安装PHP扩展

在安装 php-7.2.34_2 版本时,通过执行 pecl install 安装命令,so 文件生成路径与 php.ini 中路径配置不一致。

下面将介绍如何使两处配置为同一引用路径。

修改 vim $(which php-config) 生成 so 文件保存路径。

1
2
3
4
# 源
extension_dir='/usr/local/Cellar/php@7.2/7.2.34_2/pecl/20170718'
# 改为
extension_dir='/usr/local/Cellar/php@7.2/7.2.34_2/lib/php/20170718'

vim $(php --ini | grep Loaded | awk '{print $4}')

1
2
3
4
# 源
;extension_dir = "/usr/local/lib/php/pecl/20170718"
# 改为
extension_dir = "/usr/local/Cellar/php@7.2/7.2.34_2/lib/php/20170718"
安装PHP扩展:swoole

配置 openssl 库路径

1
2
3
4
5
6
7
8
9
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

# swoole-4.6.6
pecl install --configureoptions 'enable-sockets="yes" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="yes" enable-swoole-curl="yes"' swoole
# pecl install -D 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes"' swoole

# swoole-1.10.5
pecl install --configureoptions 'enable-swoole-debug="no" enable-sockets="no" enable-openssl="no" enable-http2="no" enable-async-redis="no" enable-mysqlnd="no"' https://pecl.php.net/get/swoole-1.10.5.tgz
安装PHP扩展:yaf、redis、memcached、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# yaf-3.3.2
pecl install yaf

# redis-5.3.4
pecl install -D 'enable-redis-igbinary="no" enable-redis-lzf="yes" enable-redis-zstd="yes"' redis

# memcached-3.1.5
pecl install memcached libmemcached
pecl install -D 'with-libmemcached-dir="yes" with-zlib-dir="yes" with-system-fastlz="no" enable-memcached-igbinary="no" enable-memcached-msgpack="no" enable-memcached-json="yes" enable-memcached-protocol="no" enable-memcached-sasl="yes" enable-memcached-session="yes"' memcached

# memcache-4.0.5.2
# pecl install -D 'enable-memcache-session="yes"' https://pecl.php.net/get/memcache-4.0.5.2.tgz
# checking for the location of zlib... configure: error: memcache support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located
# ERROR: `/private/tmp/memcache/configure --with-php-config=/usr/local/opt/php@7.4/bin/php-config --enable-memcache-session=yes' failed
brew install zlib
pecl download https://pecl.php.net/get/memcache-4.0.5.2.tgz
tar zxf memcache-4.0.5.2.tgz
cd cd memcache-4.0.5.2
/usr/local/opt/php@7.4/bin/phpize
./configure --with-php-config=/usr/local/opt/php@7.4/bin/php-config --enable-memcache-session=yes --with-zlib-dir="/usr/local/Cellar/zlib/1.2.11"
make && make install

多个php版本切换使用

1
2
3
4
5
# 使用 php@7.2 版本
brew unlink php@7.4
brew link php@7.2

brew link --overwrite php@7.4

php 多版本启用

1
2
# listen=127.0.0.1:9074
vim /usr/local/etc/php/7.4/php-fpm.d/www.conf

Mysql-Server

mysql-8.0.24 server 部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
mv ~/Downloads/mysql-8.0.24-macos11-x86_64 /usr/local/opt/mysql@8.0
mdkir /Volumes/work/web/databases/3309-8.0
mkdir /usr/local/etc/mysql@8.0
vim /usr/local/etc/mysql@8.0/my.cnf

# 数据库初始化
/usr/local/opt/mysql@8.0/bin/mysqld --defaults-file=/usr/local/etc/mysql@8.0/my.cnf --initialize

# 启动数据库 Server
/usr/local/opt/mysql@8.0/bin/mysqld --defaults-file=/usr/local/etc/mysql@8.0/my.cnf


/usr/local/opt/mysql@8.0/bin/mysql --defaults-file=/usr/local/etc/mysql@8.0/my.cnf -u mysql



/usr/local/opt/mysql@8.0/bin/mysqld_safe --defaults-file=/usr/local/etc/mysql@8.0/master.cnf --user=mysql --skip-grant-tables --skip-networking



mkdir /Volumes/work/web/databases/master-13306-8.0.23 /Volumes/work/web/databases/slave-23306-8.0.23 /Volumes/work/web/databases/slave-33306-8.0.23

/usr/local/opt/mysql@8.0/bin/mysqld --defaults-file=/usr/local/etc/mysql@8.0/master.cnf --initialize
/usr/local/opt/mysql@8.0/bin/mysqld --defaults-file=/usr/local/etc/mysql@8.0/slave.cnf --initialize
/usr/local/opt/mysql@8.0/bin/mysqld --defaults-file=/usr/local/etc/mysql@8.0/slave-33306.cnf --initialize

# 启动主库
/usr/local/opt/mysql@8.0/bin/mysqld --defaults-file=/usr/local/etc/mysql@8.0/master.cnf

# 启动从库
/usr/local/opt/mysql@8.0/bin/mysqld --defaults-file=/usr/local/etc/mysql@8.0/slave.cnf
/usr/local/opt/mysql@8.0/bin/mysqld --defaults-file=/usr/local/etc/mysql@8.0/slave-33306.cnf

# 获取主库临时密码
grep "A temporary password" /Volumes/work/web/databases/master-13306-8.0.23/error.log
# 更改主库临时密码
mysql80-master -u root -p
alter user "root"@"localhost" identified by "1234";
# 查看主库状态
show master status\G;

# 获取从库临时密码
grep "A temporary password" /Volumes/work/web/databases/slave-23306-8.0.23/error.log
# 更改主库临时密码
mysql80-master -u root -p
alter user "root"@"localhost" identified by "1234";
# 1130 - Host '127.0.0.1' is not allowed to connect to this MySQL server
use mysql;
update user set host ='%'where user ='root' and host ='localhost';
# 刷新使用权限命令
FLUSH PRIVILEGES;

# 从库订阅主库
change master to master_host='127.0.0.1',master_port=13306,master_user='root',master_password='1234',master_log_file='mybinlog.000002',master_log_pos=477;
# 启动 slave 同步
start slave;
# 查看同步状态
show slave status\G;

vim /usr/local/opt/mysql@8.0/homebrew.mxcl.mysql.plist

原文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>homebrew.mxcl.mysql</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/mysql/bin/mysqld_safe</string>
<string>--datadir=/usr/local/var/mysql</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local/var/mysql</string>
</dict>
</plist>

改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>homebrew.mxcl.mysql</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/mysql/bin/mysqld_safe</string>
<string>--defaults-file=/usr/local/etc/mysql@8.0/master.cnf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/Volumes/work/web/databases/master-13306-8.0.23</string>
</dict>
</plist>

mysql-5.5.3 server 部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mv ~/Downloads/mysql-5.5.3-m3-osx10.6-x86_64/ /usr/local/opt/mysql@5.5
chown -R codezm:staff /usr/local/opt/mysql@5.5
mkdir /Volumes/work/web/databases/3305

# 配置文件
mkdir /usr/local/etc/mysql@5.5
vim /usr/local/etc/mysql@5.5/my.cnf

[client]
port=3305
socket=/Volumes/work/web/databases/3305/mysql.sock
[mysqld]
bind-address = 127.0.0.1
port=3305
datadir=/Volumes/work/web/databases/3305
socket=/Volumes/work/web/databases/3305/mysql.sock
pid-file=/Volumes/work/web/databases/3305/mysql.pid
table_open_cache=1024
max_allowed_packet=104857600

# 初始化数据库
sudo /usr/local/opt/mysql@5.5/scripts/mysql_install_db --user=root --datadir=/Volumes/work/web/databases/3305 --defaults-file=/usr/local/etc/mysql@5.5/my.cnf
chown -R codezm:staff /Volumes/work/web/databases/3305

# 启动 mysql server
sudo /usr/local/opt/mysql@5.5/bin/mysqld_safe --defaults-file=/usr/local/etc/mysql@5.5/my.cnf


# /usr/local/opt/mysql@5.5/bin/mysqld --defaults-file=/usr/local/etc/mysql@5.5/my.cnf --basedir=/usr/local/opt/mysql@5.5
遇到的问题及解决方案
[ERROR] Can't find messagefile '/usr/share/errmsg.sys'

mysql的启动目录不正确,使用 --basedir 参数设置启动目录。

Can't find file: './mysql/plugin.frm' (errno: 13)

mysql 脚本目录 或 mysql 数据库目录权限有问题。

修改默认 root 账号密码

默认 root 账号的密码是空的。

1
2
$ /usr/local/opt/mysql@5.5/bin/mysql --defaults-file=/usr/local/etc/mysql@5.5/my.cnf -u root
mysql> set password for root@localhost = password('1234');

注意:不要漏了 -u root 参数,作用是使用 root 账号登录。不加则是匿名登录,权限有限无法实现更改密码操作。

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| test |
+——————–+
2 rows in set (0.00 sec)

mysql> set password for root@localhost = password(‘1234’);
ERROR 1044 (42000): Access denied for user ‘’@’localhost’ to database ‘mysql’

禁止匿名登录
1
2
3
4
5
mysql> use mysql;
mysql> flush privileges;
mysql> delete from user where user='';
mysql> flush privileges;
mysql> \q
修改配置文件

修改了 root 账号密码、禁用了匿名登录,如何再使用命令行模式时无需输入账号密码?

vim /usr/local/etc/mysql@5.5/my.cnf

1
2
3
4
5
[client]
port=3305
socket=/Volumes/work/web/databases/3305/mysql.sock
user=root
password=1234

保存配置文件后,再通过 client 命令登录时,就无需输入账号及密码了。

1
2
3
4
5
6
7
8
9
10
11
$ /usr/local/opt/mysql@5.5/bin/mysql --defaults-file=/usr/local/etc/mysql@5.5/my.cnf
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
开启远程连接
1. 更改 mysqld 监听IP地址。

编辑 vim /usr/local/etc/mysql@5.5/my.cnf 配置文件,在 mysqld 中,禁用监听本地IP。

1
2
[mysqld]
# bind-address = 127.0.0.1
2. 开启外网访问权限。

grant all privileges on *.* to 'root'@'[允许的ip]' identified by '[密码]' with grant option;

其中 [允许的ip] 如果设置为 % 的话则表示所有ip都可以访问,[密码] 表示外网访问的密码是什么。此处设置成所有ip都可访问,密码是 1234

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> use mysql;
mysql> select user,host from user;
+------+--------------------+
| user | host |
+------+--------------------+
| root | 127.0.0.1 |
| root | ::1 |
| root | codezmdeiMac.local |
| root | localhost |
+------+--------------------+
4 rows in set (0.01 sec)

mysql> grant all privileges on *.* to 'root'@'%' identified by '1234' with grant option;
mysql> flush privileges;
mysql> select user,host from user;
+------+--------------------+
| user | host |
+------+--------------------+
| root | % |
| root | 127.0.0.1 |
| root | ::1 |
| root | codezmdeiMac.local |
| root | localhost |
+------+--------------------+
5 rows in set (0.00 sec)
优化 mysql-server 启动方式、客户端连接方式。

记不住这一长串命令启动 mysql-server 命令,客户端连接命令。通过以下方式创建命令别名。

1
2
3
4
5
6
7
8
9
echo "alias mysql55='/usr/local/opt/mysql@5.5/bin/mysql --defaults-file=/usr/local/etc/mysql@5.5/my.cnf'" >> ~/.zshrc
echo "alias mysqld55='cd /usr/local/opt/mysql@5.5 && (/usr/local/opt/mysql@5.5/bin/mysqld_safe --defaults-file=/usr/local/etc/mysql@5.5/my.cnf &) && cd -'" >> ~/.zshrc

source ~/.zshrc

# 启动 mysql-5.5.3 server
mysqld55
# 运行 mysql 客户端
mysql55

Redis Server

1
2
brew install redis
redis-server /usr/local/etc/redis.conf

Nginx 每次必须使用 sudo 权限,否则无法上传图片

查看错误日志: tail -f /usr/local/var/log/nginx/error.log,日志详情如下。

2021/05/11 13:49:26 [crit] 97853#0: *4 open() “/usr/local/var/run/nginx/client_body_temp/0000000001” failed (13: Permission denied), client: 192.168.36.47, server: , request: “POST /index.php?m=attachment&c=attachments&a=upload&module=content&catid=17&dosubmit=1 HTTP/1.1”, host: “192.168.36.47:8080”, referrer: “http://192.168.36.47:8080/index.php?m=content&c=content&a=add&menuid=&catid=17&pc_hash=542G5c&pc_hash=542G5c"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ /usr/local/var/run/
drwxr-xr-x 6 codezm admin 192 5 11 13:47 .
drwxrwxr-x 10 codezm admin 320 5 10 17:16 ..
drwxr-xr-x 2 codezm admin 64 3 11 17:21 httpd
drwxr-xr-x 4 codezm admin 128 9 29 2019 libvirt
drwxr-xr-x 7 codezm admin 224 7 11 2017 nginx
-rw-r--r-- 1 codezm admin 6 5 11 13:47 nginx.pid
$ ls -la /usr/local/var/run/nginx/
drwx------ 2 nobody admin 64 5 11 13:34 client_body_temp
drwx------ 2 nobody admin 64 7 11 2017 fastcgi_temp
drwx------ 12 nobody admin 384 9 11 2017 proxy_temp
drwx------ 2 nobody admin 64 7 11 2017 scgi_temp
drwx------ 2 nobody admin 64 7 11 2017 uwsgi_temp
$ sudo chown -R codezm:admin /usr/local/var/run/nginx
1
brew services start mysql@5.7 /usr/local/Cellar/mysql@5.7/5.7.32/homebrew.mxcl.mysql@5.7.plist

关于 brew 加速