目录

mac10.13配置apache2 php mariadb

前戏

最近经常碰到没网的情况,看到behance的desplay应用,可以很单纯的只上传、管理自己的项目(设计),然后可以很方便的演示,就动心了…… 经过n轮各种过程,最后还是决定在本机配置php环境,直接用wp的博客演示更富弹性。

→ 开工

mac 自带apache php , 只是默认未开启,只需要开启就行了。 至于mysql以前装过,只需要启动就可以了。

先从简单的着手,结果图样图森破了,mysql并启动不起来。想起来mariadb为什么不用mariadb呢? why? 经过0轮思想斗争,卸载mysql。想卸载干净听说要手动的,如下:

1
2
3
4
5
6
7
8
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*

ok,世界清爽了。

安装 mariadb

brew 太好用了,为啥不用。

1
brew install mariadb 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
==> Installing mariadb
==> Downloading https://homebrew.bintray.com/bottles/mariadb-10.2.11.high_sierra
######################################################################## 100.0%
==> Pouring mariadb-10.2.11.high_sierra.bottle.tar.gz
==> /usr/local/Cellar/mariadb/10.2.11/bin/mysql_install_db --verbose --user=jovi
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.

MySQL is configured to only allow connections from localhost by default

To connect:
    mysql -uroot

To have launchd start mariadb now and restart at login:
  brew services start mariadb
Or, if you don't want/need a background service you can just run:
  mysql.server start
==> Summary
🍺  /usr/local/Cellar/mariadb/10.2.11: 640 files, 170MB

稍等一会儿,安装好了。 就喜欢省心的,看提示,有两条还很方便:

1
2
To have launchd start mariadb now and restart at login:
  brew services start mariadb
1
2
Or, if you don't want/need a background service you can just run:
  mysql.server start

接下来是apache 和 php

mac 自带,直接启动就好了

查看当前版本:

httpd -v

1
2
Server version: Apache/2.4.28 (Unix)
Server built:   Oct  9 2017 19:54:20

没错,继续

1
2
3
sudo apachectl start  //启动
sudo apachectl restart  //重启
sudo apachectl stop  //停止 是不是可以有reload 的?  命令跟linux一样,很亲切有木有。

浏览器输入地址确定是否成功:

http://localhost

http://127.0.0.1

如果Apache服务启动成功,页面会显示It works!

apache 的默认目录

/private/etc/apache2

mac方便进入隐藏、系统文件的方式就是在“仿达”(翻译碉堡了)按 shift+command+G 输入路径,同样支持tab匹配。

默认web路径 /资源库/WebServer/Documents/

你肯定不会愿意吧网站文件放到这里的,想直接修改那就改httpd.conf 或者你可以考虑直接用 用户级的web路径,上面这个是系统级的,修改系统级路径一会儿再说,先说用户级路径。

访问地址:

http://localhost/~username

http://127.0.0.1/~username

默认系统是没有这个目录的,需要手动创建一下,如果你用户目录下有 “站点”这个目录,就不用了。

1
mkdir ~/Sites

你可以再目录下放个index.php,写上如下内容。 测试站点&php是否正常。

1
2
3
<?php 
phpinfo(); 
?>

继续,在apache用户配置目录配置用户目录权限

  • 打开终端
  • 输入: cd /etc/apache2/users
  • 输入: sudo nano username.conf ( 注意:这里的username是当前用户名,请根据实际情况修改 ) 如果你装了nano编辑器的话,或者用vim,我喜欢nano,更小白。
  • 输入:
1
2
3
4
5
6
<Directory "/Users/username/Sites/">
    Options Indexes MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
  • 修改当前文件的访问权限:sudo chmod 775 username.conf 打开浏览器,访问http://localhost/~username/ , 此时页面提示~username服务器不存在,我们还需要进入下一步的设置

修改apache的httpd.conf文件

  • cd /etc/apache2/
  • cd /etc/apache2/
  • sudo vim httpd.conf

找到以下信息,将其前面的#去掉:

1
2
3
4
5
6
7
8
LoadModulephp5_module libexec/apache2/libphp7.so  //php 支持

LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so

LoadModule userdir_module libexec/apache2/mod_userdir.so //用户目录

Include /private/etc/apache2/extra/httpd-userdir.conf
  • cd /etc/apache2/extra/
  • sudo vim httpd-userdir.conf

系统级目录更改搜索 “DocumentRoot”

1
2
DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">

btw: nano 搜索是 ctrl+w ,输入关键词Enter搜索下一个是搜索完以后再按ctrl+w 然后直接 Enter

找到以下信息,将其前面的#去掉: Include /private/etc/apache2/users/*.conf

此时访问http://localhost/~username/, 依然无法访问,提示:You don‘t have permission to access /~username/ on this server

修改 httpd.conf

  • sudo vim /etc/apache2/httpd.conf

找到:

1
2
3
4
5
<Directory />
    AllowOverride none
    Require all denied
</Directory>

修改为:

1
2
3
4
5
<Directory />
    AllowOverride none
    Require all granted
</Directory>

验证结果

重启apache:sudo apachectl restart 访问:http://localhost/~username/