Jun 19

Mac OS X 是由美国苹果公司开发的操作系统,通常它运行在如 MacBook、Mac 等个人电脑中。事实上,经过适当的配置以及软件的安装,也可以以 Mac OS X 为基础构建服务器。这里就来介绍一下如何在 Mac OS X 运行 Web 服务器。由于 Mac OS X 内置了 Apache 和 PHP,因此,几乎非常少的配置即可让 Web 服务运行在 Mac OS X 上。不过,这种非常少的配置是需要用户具有比较良好的 Unix 使用经验做基础的,后面的介绍也基本围绕着这种方式展开的。由于 Mac OS X 是一款非常优秀的操作系统,想要把 Web 服务的配置变得平易近人,也是非常容易的。OS X Server 就为用户提供了诸如 Web 服务、VPN 服务、FTP 服务等简明的图形化操作,有需要的用户可去 App Store 下载、安装 Server.app。除此而外,单就 Web 服务而言,另有 XAMPP、MAMP Pro 等已经打包好的开箱即用软件可供使用。

一、启动 Apache

在 Mac OS X 10.8 以前启动 Apache 很简单,只需在系统设置偏好(System Preferences)中设置 Web 共享(Web Sharing)即可。不过自 Mac OS X 10.8 以后,Web 共享(Web Sharing)取消了。因此,启动 Apache 需采用下述方法,先打开终端(Terminal.app),然后在终端运行

$ sudo apachectl start

再输入帐号密码,这样 Apache 就运行了。为了确认 Apache 是否正常工作,可在浏览器中输入 http://127.0.0.1 ,或者在终端输入

$ open http://127.0.0.1 &

正常情况下,就可以看到一个内容为 “It works!” 的页面,该页面对应 /Library/WebServer/Documents/index.html.en 文件。其中,/Library/WebServer/Documents/ 是 Apache 的默认(系统级)根目录。若想获知 Apache 的版本,可运行

$ apachectl -v
Server version: Apache/2.2.26 (Unix)
Server built:   Jun 20 2014 13:57:09

便会看到 Mac OS X 自带 Apache 版本信息。 为了更好的配置 Apache 服务,这里再来指出几个非常重要的文件与目录。第一个是 Apache 服务的配置文件目录,位于 /etc/apache2,里面包含了 Apache 服务的基本配置文件 httpd.conf。/etc/apache2 中还有很多其他文件和目录,在后面会陆续涉及到其中的一些。第二个是管理 Apache 服务的启动、停止等配置的文件,位于 /Library/LaunchDaemon/org.apache.plist。第三个是 Apache 的日志文件目录,位于 /var/log/apache2/,如果 Apache 启动后有任何问题,记得去这个地方看看,兴许就能找到解决问题的蛛丝马迹。

二、开启 PHP 支持

在终端中运行

$ sudo nano -w /etc/apache2/httpd.conf

打开 Apache 的配置文件,找到如下的行

#LoadModule php5_module libexec/apache2/libphp5.so

把前面的#号去掉,也即

LoadModule php5_module libexec/apache2/libphp5.so

保存 Apache 的配置文件。该来配置 PHP 了,首先查看 PHP 的配置文件 /etc/php.ini 是否存在,若没有的话,请运行

$ sudo cp /etc/php.ini.default /etc/php.ini

适当的调整一下配置,通过编辑 /etc/php.ini 文件,也即

$ sudo nano -w /etc/php.ini

来配置各种 PHP 功能。比如:

;调整时区
date.timezone = "Asia/Shanghai"
;通过 display_errors 来控制是否显示 PHP 程序的报错信息,这在调试 PHP 程序时非常有用
display_errors = Off

再来看一下 PHP 与 Apache 的整合配置文件:

$ sudo nano -w /etc/apache2/other/php5.conf
<IfModule php5_module>
    AddType application/x-httpd-php .php 
    AddType application/x-httpd-php-source .phps

    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>

为了让所有的配置生效,需运行

$ sudo apachectl restart

重启 Apache,这样 PHP 就可以用了。

为了测试 Apache 服务器上的 PHP 是否正常工作,可在终端中运行

$ mkdir -p ~/Sites

来创建 Apache 的用户级根目录,随后再在用户级根目录中新建一个 info.php 文件

$ cat > info.php << EOF
<?php
    phpinfo();
?>
EOF

不妨假设 Mac OS X 系统用户 james 便是 Apache 服务的主要使用者,以上 Apache 的用户级根目录都是在 james 用户的家目录创建的。于是,在 Mac OS X 的浏览器 Safari 的地址栏中输入 http://127.0.0.1/~james/info.php,或者

$ open http://127.0.0.1/~james/info.php &

便会看到有关 PHP 的信息,比如 Mac OS X 10.9 中内置 PHP 版本号是 5.3.13。

三、安装 MySQL

由于 Mac OS X 没有内置 MySQL,所以需要手动安装,可从 MySQL 的官方网站 http://mysql.com/downloads/mysql/MySQL 下载。目前 MySQL 的最稳定版本是 5.6,选择合适版本,如这里选择了 mysql-5.6.16-osx10.7-x86_64.dmg。进入下载页面,会提示注册 Oracle 帐号或者以 Oracle 帐号登录;当然,也可选择 “No thanks, just start my download.” 直接下载,例如

$ curl -O http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16-osx10.7-x86_64.dmg

打开下载的 dmg 文件,会发现里面有 4 个文件,分别是 mysql-5.6.16-osx10.7-x86_64.pkg、MySQLStartupItem.pkg、MySQL.prefPane 与 ReadMe.txt。首先点击安装 mysql-5.6.16-osx10.7-x86_64.pkg,这是 MySQL 主安装包。一般情况下,安装文件会自动把 MySQL 主程序安装到 /usr/local 下。为了让 MySQL 在 Mac OS X 开机时自动启动,安装包里提供了 MySQLStartupItem.pkg,安装它。有了它,可以在终端控制 MySQL 的运行、重启以及关闭之类,例如

$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM restart
$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop

若想以图形界面方式管理 MySQL 的启动,可安装包里的 MySQL.prefPane。安装它之后,就可在“系统设置偏好”中看到 MySQL 的图标,通过它就可以控制 MySQL 是否开启以及开机时是否自动运行。另外,使用 PHP 连接 MySQL 可能会报错

Can’t connect to local MySQL server through socket ‘/var/mysql/mysql.sock‘

或使用 localhost 无法连接 MySQL 而需要 127.0.0.1,原因是连接时 PHP 默认去找 /var/mysql/mysql.sock,但 MAC 版的 MySQL 改动了文件位置,放在 /tmp 下了。处理办法是按如下修改 php.ini:

$ nano -w /etc/php.ini
mysql.default_socket = /tmp/mysql.sock

到这里 MySQL 就基本安装完毕了。 通过运行

$ sudo echo /usr/local/mysql/bin >> /etc/paths.d/80-mysql

将 mysql 的路径加入系统环境变量 PATH 中;当然,也可以代之以用户级环境变量设置,例如

$ echo "export PATH=/usr/local/mysql/bin:\$PATH" >> ~/.bashrc'

这样就可以在终端中比较简单地通过命令进行相应的操作。 在 MySQL 没有启动时,直接运行 mysql 或 mysqladmin 命令会提示

Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

这就需要我们先通过控制面板或者直接运行

$ sudo /usr/local/mysql/support-files/mysql.server start
$ sudo /usr/local/mysql/support-files/mysql.server restart

命令来启动 MySQL,之后再运行 mysql 或 mysqladmin 命令就正常了。比如安装完毕后,MySQL 的 root 默认密码为空,如果要设置密码可以在终端运行

$ mysqladmin -u root password "mysqlpassword"

来设置,其中 mysqlpassword 即 root 的密码。再如查看 MySQL 的版本

$ mysql -V

注意:Mac OS X 的升级或其他原因可能会导致 MySQL 启动或开机自动运行时,在 MySQL 操作面板上会提示 “Warning:The /usr/local/mysql/data directory is not owned by the ‘mysql’ or ‘_mysql’”,这应该是某种情况下导致 /usr/local/mysql/data 的宿主发生了改变,只需要运行

$ sudo chown -R _mysql /usr/local/mysql/data

即可。 MySQL 的默认日志位于它的数据目录,也即 /usr/local/mysql/data 之中。不过默认的错误日志文件名是主机名生成的,稍作配置

$ sudo nano -w /usr/local/mysql/my.cnf
[mysqld]
log-error=/usr/local/mysql/data/mysqld.log

由于它与系统目录分离,因此 mysql 不会自动清除日志,可以使用它自带的 mysql-log-rotate 脚本,例如

$ sudo /usr/local/mysql/support-files/mysql-log-rotate

或手动编写脚本清除旧日志。

四、MAMP 的简单应用

1、WordPress 的配置

先通过下述命令行为 WordPress 创建一个名为 db_wordpress 的数据库,并设置数据库用户 wordpress_user、密码为 654321 以及对 WordPress 数据库赋予所有权限:

$ sudo mysql -uroot -p
mysql> create database db_wordpress;
mysql> grant all privileges on db_wordpress.* to 'wordpress_user'@'127.0.0.1' identified by '123456';
mysql> FLUSH PRIVILEGES;
mysql> EXIT

数据库创建完成之后,开始安装

$ curl -O http://wordpress.org/latest.zip
$ sudo unzip latest.zip -d /Library/WebServer/Documents/
$ sudo mv /Library/WebServer/Documents/wordpress/wp-config-sample.php /Library/WebServer/Documents/wordpress/wp-config.php

接着根据前面创建的数据库信息配置 WordPress:

$ sudo nano -w /Library/WebServer/Documents/wordpress/wp-config.php

// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define(‘DB_NAME’, ‘db_wordpress‘);

/** MySQL database username */
define(‘DB_USER’, ‘wordpress_user‘);

/** MySQL database password */
define(‘DB_PASSWORD’, ‘123456‘);

/** MySQL hostname */
define(‘DB_HOST’, ‘127.0.0.1‘);

为了让所有的 WordPress 设置生效,需重启 Apache

$ sudo apachectl restart

在浏览器输入 http://127.0.0.1/wordpress 进入 WordPress;或者

$ open http://127.0.0.1/wordpress &

第一次进入 WordPress 时,需要完成它的初始化安装。欢迎来到 WordPress 的世界,当然,还有后续的管理工作要做,例如

$ sudo nano -w /Library/WebServer/Documents/wordpress/.htaccess
Options +FollowSymLinks

有关这些的介绍,请查阅官网的相关介绍。

2、MediaWiki 的配置

先为 MediaWiki 创建一个数据库,也即

$ sudo mysql -uroot -p
mysql> create database db_mediawiki;
mysql> grant all privileges on db_mediawiki.* to 'mediawiki_user'@'127.0.0.1' identified by '654321';
mysql> FLUSH PRIVILEGES;
mysql> EXIT

创建了名为 db_mediawiki 的数据库,设置用户 mediawiki_user,密码为 654321,对 MediaWiki 数据库赋予所有权限。数据库创建完成之后,开始安装 MediaWiki:

$ curl -O http://releases.wikimedia.org/mediawiki/1.22/mediawiki-1.22.3.tar.gz
$ tar zxvf mediawiki-1.22.3.tar.gz -C ~/Sites/

重启 Apache

$ sudo apachectl restart

让所有的 MediaWiki 设置生效。由于 MediaWiki 是安装在 Apache 的用户级根目录中,需在浏览器中输入 http://127.0.0.1/~james/mediawiki,或者

$ open http://127.0.0.1/~james/mediawiki 

第一次打开 MediaWiki 会需要输入相关信息,并点击 Install/Upgrade Database 完成最后的安装。安装完成之后,会生成 Localsetting.php。将它下载到本地,再将它复制到 ~/Sites/mediawiki 目录,也即

$ cp /path/to/Localsetting.php ~/Sites/mediawiki

设置访问权限如下

$ sudo nano -w /etc/apache2/users/mediawiki.conf
 Alias /mediawiki "/Users/james/Sites/mediawiki"

 <directory "/Users/james/Sites/mediawiki/">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride None
       Order allow,deny
       Allow from all

 <directory "/Users/james/Sites/mediawiki/upload/">
    AllowOverride None
    AddType text/plain .html .htm .shtml
 # php_admin_flag engine off  # This doesn't seem to work.

  RewriteEngine on
  RewriteRule ^/wiki/en/(.*)$ /mediawiki/wiki.phtml?title=$1

至此,MediaWiki 站点基本完工了。

3. phpBB3 的配置

先为 phpBB3 创建数据库
$ mysql -u root -p
mysql> create database db_phpdb3;
mysql> grant all privileges on db_phpbb3.* to 'phpbb3_user'@'127.0.0.1' identified by '654123';
mysql> FLUSH PRIVILEGES;
mysql> EXIT
现在开始搭建 phpBB 论坛,目前 phpBB 的稳定版本是 3.0.12:
$ curl -O -J -L http://prdownloads.sourceforge.net/phpbb/phpbb-3.0.12.tar.bz2
将解压的 phpBB3 目录放到 ~/Sites 下:
$ tar jxvf phpbb-3.0.12.tar.bz2 -C ~/Sites
$ chmod 644 ~/Sites/phpbb/config.php
$ open http://127.0.0.1/~james/phpbb &
填写所连接数据库以及用户信息等。填写完成后开始安装。完成最后的安装之前,别忘了先将 phpBB 下的 install 目录删除
$ rm -rf ~/Sites/phpbb/install
 
本地化 phpBB,先到官方网站下载并解压语言包,例如下载简体中文包
$ curl -O -J -L https://www.phpbb.com/customise/db/download/id_91456
$ tar jxvf mandarin_chinese_simpliefied_script_1.0.3.tar.bz2
$ cd mandarin_chinese_simpliefied_script_1.0.3/mandarin_chinese(simpliefied_script)_1.0.3
$ cp -r * ~/Sites/phpbb/
后续操作,请参考 https://www.phpbb.com/kb/article/how-to-install-a-language-pack。