macOS开发环境

macOS Cataline
macOS Cataline

最近几年一直在使用macbook进行开发,现在这台电脑已经是换过的第三台了,每次拿到一台崭新的mac当然是兴奋的,但同时也是枯燥的,因为你还要重新把你上一台已经习惯的工作开发环境迁移过来,想想也比较头疼,重复性的事情太多,还包括一些遗忘的,都要回顾一下,缺少一些统一的笔记记录。本文就根据之前更换笔记本的经历记录下自己的macOS开发环境的搭建记录。可以预估的是如果我继续在目前的公司工作两年,可能又要换新的macbook,估计又会面临开发环境迁移的问题。

macOS Catalina预装了Apache(2.4.41),svn(1.10.4),git(2.21.0),PHP(7.4.1),Ruby(2.6.3),Python(2.7.10),Python(3.7.5),Perl(5.18.4)等常见的工具和脚本语言,而这些工具和脚本语言正是很多开发者所需要的,从这一点上来看,macOS确实做到了天然与开发者友好的可能。

Homebrew

Homebrew是macOS下的软件包管理工具,非常好用,是自己从使用mac开始就安装使用的一个工具,虽然使用频率不高,但对mac开发环境的管理维护起到了非常重要的作用,他的作用就像apt之于ubuntu,yum至于CentOS,maven之于java,npm之于node,pip之于Python,composer之于PHP。

所以还能说什么呢?装就完了!

# 终端执行下面代码
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# 更多详细安装使用查看以前的文章:https://sobird.me/mac-install-brew.htm

Apache

macOS内置了Apache服务,如果要使用,可以按照如下的配置配合PHP使用。考虑到未来macOS升级带来Apache的升级。本人转向使用Nginx服务。

通过下面命令设置开机(禁止)启动

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

httpd.conf

php 配置
打开下面三个模块的注释
LoadModule alias_module libexec/apache2/mod_alias.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php7_module libexec/apache2/libphp7.so

#ServerName www.example.com:80
打开上面行注释并修改为:
ServerName localhost:80

否则启动的时候会报下面的错误:
 httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

Nginx

# 安装
brew install nginx

# 启动n
brew services start nginx

nginx.conf

Nginx安装之后的默认配置如下:


#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       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #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/*;
}

为了后续方面维护和管理多个virtual host,参考目前流行的目录规范,在当前目录下新建:sites-availablesites-enabled目录。

mv servers sites-enabled
mkdir sites-available

# 修改nginx.conf尾部,注释掉原来的include servers/*;

# include servers/*;
include sites-enabled/*;

更改默认root

nginx 的默认root 是 html,一般指向的本地磁盘地址:/var/www/,我需要更改到我的个人www目录

server{
    ...
    root /Users/sobird/www;
    ...
    location / {
        #root   html;
        index  index.html index.htm;
    }
    ...
}

# ... 表示省略掉的配置

php-fpm配置

在nginx下一般采用php-fpm的方式来解运行php文件,为此我们需要在nginx中配置php-fpm服务。nginx与php-fpm有两种通信方式:Unix socket 和 TCP监听127.0.0.1。

Unix socket

unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要在nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。

# 配置
location ~ \.php$ {
    root           html;
    fastcgi_index  index.php;
    include fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

TCP监听

TCP监听0.0.0.0: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;
}

PHP

PHP是世界上最好的语言

所以连macOS系统都已经帮你内置了PHP语言环境:

➜  ~ php -v
PHP 7.4.1 (cli) (built: Dec 18 2019 14:46:18) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.1, Copyright (c), by Zend Technologies

➜  ~ php-fpm -v
PHP 7.3.9 (fpm-fcgi) (built: Nov  9 2019 08:08:19)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.9, Copyright (c) 1998-2018 Zend Technologies

那么我们直接使用就好了,PHP配置文件模板:/etc/php.ini.default 复制出一份php.ini配置即可。

PHP是我非常喜欢的一门语言,这是我在大学四年级期间在学校图书馆里自学的一门语言,也算是当年比较流行的一门Web语言,可惜自己毕业工作后并没有去做PHP相关的开发,反而去做了前端开发,然后一抹黑的走到现在。

当然,这我自己快十年的工作过程中,PHP这门语言给了我很多帮助,比如:

  • 8天写了一个留言本系统
  • 设计了一个MVC框架
  • DiscuzX源码学习
  • 日常写爬虫去爬取网络数据
  • WordPress主题&插件开发
  • 等等…

因为PHP是有史以来最好的语言,没有之一。它快速,非常强大,而且免费。

Project Beehive Forum

正因如上所说,我以前开发的东西也都免费,没有赚到什么钱~~

php-fpm

设置macOS开机启动

phpMyAdmin

phpMyAdmin是一款MySQL数据库管理软件,作为一名前端工程师,确实不太擅长使用终端命令行的方式来查询数据,所以这是我工作环境中必备的一款软件,毕竟免费开源,不用白不用。当然一个问题是,在一些大数据的导出导入操作,还是在命令行下操作来的方便且效率也高。一般可以通过homebrew安装:

brew install phpmyadmin

phpmyadmin报错:mysqli_real_connect(): (HY000/2002): No such file or directory

修改phpmyadmin配置文件
$cfg['Servers'][$i]['host'] = ‘localhost’;
改成
$cfg['Servers'][$i]['host'] = '127.0.0.1’;

或者 修改php.ini

默认下面的两个配置为空,指定mysql.sock的位置即可
pdo_mysql.default_socket= /tmp/mysql.sock
mysqli.default_socket =/tmp/mysql.sock
➜  ~ apachectl -v
Server version: Apache/2.4.41 (Unix)
Server built:   Nov  9 2019 07:53:54

除了在命令行下执行PHP外,Web开发中更多需要网页浏览PHP页面,这就需要Apache来解析PHP并提供Web服务。这也是我工作开发环境的必装软件,如果系统没有装这个软件,总感觉少点啥。

httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin xxx@sobird.me
    DocumentRoot "/Users/sobird/www"
    <Directory /Users/sobird/www>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
        Require all granted
    </Directory>
</VirtualHost>

phpmyadmin.conf

Alias /phpmyadmin /usr/local/share/phpmyadmin
<Directory /usr/local/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>

MySQL

# 一行代码安装
brew install mysql

登录phpmyadmin时,报mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]错误

mysql8.0用户密码加密方式为caching_sha2_password,phpmyadmin暂不支持,需要修改下mysql的加密方式:

登录mysql:
mysql -u root -p 
查看当前加密方式:
use mysql; select user,plugin from user where user='root'; 
修改加密方式(注,后面的password为你新的mysql密码):
alter user 'root'@'localhost' identified with mysql_native_password by 'password'; 
生效:
flush privileges; 

Java

Java开发环境需要JDK的支持,在安装之前可以通过下面命令来查看是否已安装了JDK。

java --version
java 11.0.5 2019-10-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.5+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode)

# 或者
/usr/libexec/java_home 
/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk/Contents/Home
# 显示下面内容表示未安装
Unable to find any JVMs matching version "(null)".
No Java runtime present, try --request to install.

否则弹出下面提示框,则表示没有安装JDK。

访问Java 11 LTS 下载jdk-11.0.5_osx-x64_bin.dmg到本地,双击即可完成JDK的安装。

NodeJS

brew install node

nvm可以用来管理电脑本地的NodeJS版本,nrm可以用来方便的切换registry源

这篇文章目前没有评论。

回复

(必填项)

(必填项)

(可选)