―― 全程记录 Server Core 上部署 IIS7 + PHP FastCGI + MySQL
近段时间由于网站服务器断电而出现一系列问题,让人感到很是郁闷!虽然目前 Blog 能够正常运转,但是效率明显降低很多。于是萌发将系统升级到 Windows Server 2008 平台的想法,这几天一直都在做 Windows Server 2008 和 IIS7 的评估测试,收获颇丰!不敢独享,特以大家都很关注的 Server Core 为中心,撰写此篇关于在 Server Core 上部署 IIS7、PHP FastCGI 和 MySQL 的 Blog 与大家一同学习分享。同时也希望大家能参与讨论。
之所以拿 Server Core 来讲,我个人感觉非常有代表性,而且在部署过程中通过相对复杂的命令行反而更能深入地了解和认识 Server Core 与 IIS7 的特性和相关知识。
目标:
此次部署过程将使大家详细了解如何在一台全新安装的 Windows Server 2008 Web Edition Server Core (以下简称:WS08WebCore)上部署以 IIS7 为 Web 平台的 PHP + MySQL 服务器,同时会向大家展现如何修改服务器名称、分配静态IP、开启远程桌面、在防火墙上开启远程桌面支持、开启自动更新、安装 II7、安装配置 PHP FastCGI 以及 安装 MySQL 的全部过程。
涉及到的关键词:Windows Server 2008 Web,Server Core,IIS7,FastCGI,PHP,Netsh,Scregedit.wsf,Pkgmgr,Ocsetup,Oclist,Appcmd
测试环境:
宿主:
ThinkPad X60 1706-BM8:T7200/2G*2/120G/3945ABG/Windows Vista Ultimate with SP1
虚拟机平台:Virtual PC 2007 with SP1
虚拟机:Windows Server 2008 Web Edition Server Core,分配 512M 内存和 20G VHD,桥接到宿主3945ABG,开启VT支持
Step By Step :安装 WS08WebCore 的过程就不再复述,对于新一代操作系统的安装过程所体现出的特性,相信不少朋友与我有一样的认可度。
在开始之前我们先来了解并确定一些信息!根据新加坡 StreetDirectory.com 网站的数据了解到他们在 WS08 发布之际就已经开始在测试评估该产品,并取得了让人为之兴奋的成果,经过他们的实际评估,在 WS08 的 IIS7 上以 FastCGI 方式运行 PHP 的效率远远高出原生的 LAMP 环境,而这个数据着实的让人为之震惊和兴奋!足足的高出一倍还多--130%!
注意:这个数据是在没有进行任何优化的情况下得到的。如果这个数据还不能让你振奋,你现在就可以打开该网站亲身体验一下最终的效果。
正如我之前提到的,此次使用 Server Core 主要还是为了让大家能够额外了解到 Core 的一些操作特性,在未来我还会与大家分享在 Windows Server 2008 上部署 II7、PHP FastCGI 等等的心得体会。如果您的工作领域涉及到 Web 服务,我想现在就选择升级到 WS08是非常明智的,不论你是运行 ASP 还是 ASP.NET(注意:Server Core 不支持 .NET),甚至是 PHP,WS08 都提供了更强劲的动力支持,它更加稳定、效率更高、更安全、针对资源的控制更为出色。
很早以前我就开始了针对 WS08 系列产品的测试和评估,而这次当我怀着测试看看的心情接触了 WS08 的 Web 版本,我深深地被吸引了,要知道如果你仅仅只是为了部署一台用于 Web 服务的服务器,选择 WS08Web 意味着你拥有更大的剩余磁盘空间、减少更多不必要的角色和功能、更低的设备性能需求,更廉价得软件授权费用!从而在减少安全隐患的同时,还提升了运营系统的性能和稳定性,最终有效地降低了 TCO(总体拥有成本)。
GOD!来到这令人熟悉的命令行界面,是一个什么样的感觉?是不是跟我之前一样,马上开始在脑袋里搜索原来所知道的命令?!但是又突然觉得不知所措?!OK,还是先静下心,不要慌张,回到今天的主题中,跟随我的节奏继续下去,才会有更大的收获!
友情提示:如果命令行窗口被不小心关闭了,只需同时按下"Ctrl+Shift+Esc"即可调出任务管理器重新启动"cmd"即可。
一套全新的系统,在部署运营程序之前,我想还是应该先为其命名一个简单而又易于标注的计算机名。重新命名前,我们可以使用"hostname"命令来获取当前的计算机名。之后,使用"netdom renamecomputer . /newname:web-core",依照提示键入"Y",最后使用"shutdown -r -t 0"重新启动计算机使其新命名生效。使用"netdom renamecomputer help"可以获得详细参数说明。(图3)
重新启动之后,我们就需要为服务器配置一个静态IP,在配置之前我们可以通过"netsh interface ipv4 show interfaces"来获取当前网络适配器的信息。从而得知我要配置静态IP的网络连接名称为"本地连接",序列号(idx)为:"2"。之后键入"netsh interface ipv4 set address name=2 source=static address=192.168.0.193 mask=255.255.255.0 gateway=192.168.0.1";配置了 IP 之后我们还要为其指定 DNS 地址。
为此,键入"netsh interface ipv4 set dnserver name=2 source=static address=202.102.224.68 primary"为其指定主 DNS 服务器,并再键入"netsh interface ipv4 add dnsserver name=2 address=202.102.227.68 index=2"为其指定辅助 DNS 服务器。当然,可以使用该命令指定更多的 DNS 服务器地址,只需注意结尾的"index=X"。
另外需要提示的是,以上为了能够让大家详细了解命令和参数故使用的是完整的命令格式,如果你认真地学习了"netsh",你会发现其实完全可以简写完成!(图4)
为了方便今后远程管理,还需要启用远程桌面支持。为此,键入"cscript c:/windowssystem32scregedit.wsf /ar 0"启用远程桌面;为了让旧版的远程桌面连接器也能访问,还需要键入"cscript c:/windowssystem32scregedit.wsf /cs 0"。最后,使用"netsh advfirewall firewall set rule group="远程桌面" new enable=yes"命令行在防火墙中允许远程桌面通过。(图5)
在 Server Core 下安装 IIS7 有两种方法,一个是使用"ocsetup"命令,而另外一个也就是网上轻易能查找到的"pkgmgr"方式,两者的区别我会在以后与大家详细探讨,而此次则以"pkgmgr"命令进行安装支持 CGI 的 IIS7。首先我们可以使用"oclist"命令来列出当前的角色功能安装状态。内容如下所示:
Use the listed update names with Ocsetup.exe to install/uninstall a server role or optional feature. Adding or removing the Active Directory role with OCSetup.exe is not supported. It can leave your server in an unstable state. Always use DCPromo to install or uninstall Active Directory. ====================================== Microsoft-Windows-ServerCore-Package Not Installed:BitLocker Not Installed:BitLocker-RemoteAdminTool Not Installed:IIS-WebServerRole | |--- Not Installed:IIS-FTPPublishingService | | | |--- Not Installed:IIS-FTPServer | | | | |--- Not Installed:IIS-WebServer | | | |--- Not Installed:IIS-ApplicationDevelopment | | | | | |--- Not Installed:IIS-ASP | | | | | | | | |--- Not Installed:IIS-CGI | | | | | | | | |--- Not Installed:IIS-ISAPIExtensions | | | | | | | |--- Not Installed:IIS-ASP | | | | | | | | | | | | |--- Not Installed:IIS-ISAPIFilter | | | | | | | | |--- Not Installed:IIS-ServerSideIncludes | | | | | | | | |--- Not Installed:IIS-CommonHttpFeatures | | | | | |--- Not Installed:IIS-DefaultDocument | | | | | | | | |--- Not Installed:IIS-DirectoryBrowsing | | | | | | | | |--- Not Installed:IIS-HttpErrors | | | | | | | | |--- Not Installed:IIS-HttpRedirect | | | | | | | | |--- Not Installed:IIS-StaticContent | | | | | | | | |--- Not Installed:IIS-HealthAndDiagnostics | | | | | |--- Not Installed:IIS-CustomLogging | | | | | | | | |--- Not Installed:IIS-HttpLogging | | | | | | | | |--- Not Installed:IIS-HttpTracing | | | | | | | | |--- Not Installed:IIS-LoggingLibraries | | | | | | | | |--- Not Installed:IIS-ODBCLogging | | | | | | | | |--- Not Installed:IIS-RequestMonitor | | | | | | | | |--- Not Installed:IIS-Performance | | | | | |--- Not Installed:IIS-HttpCompressionDynamic | | | | | | | | |--- Not Installed:IIS-HttpCompressionStatic | | | | | | | | |--- Not Installed:IIS-Security | | | | | |--- Not Installed:IIS-BasicAuthentication | | | | | | | | |--- Not Installed:IIS-ClientCertificateMappingAuthentication | | | | | | | | |--- Not Installed:IIS-DigestAuthentication | | | | | | | | |--- Not Installed:IIS-IISCertificateMappingAuthentication | | | | | | | | |--- Not Installed:IIS-IPSecurity | | | | | | | | |--- Not Installed:IIS-RequestFiltering | | | | | | | |--- Not Installed:IIS-ASP | | | | | | | | | | | | |--- Not Installed:IIS-URLAuthorization | | | | | | | | |--- Not Installed:IIS-WindowsAuthentication | | | | | | | |--- Not Installed:IIS-WebServerManagementTools | | | |--- Not Installed:IIS-IIS6ManagementCompatibility | | | | | |--- Not Installed:IIS-LegacyScripts | | | | | | | | |--- Not Installed:IIS-Metabase | | | | | | | |--- Not Installed:IIS-FTPServer | | | | | | | | | | | |--- Not Installed:IIS-LegacyScripts | | | | | | | | | | | | |--- Not Installed:IIS-WMICompatibility | | | | | | | |--- Not Installed:IIS-LegacyScripts | | | | | | | | | | | | |--- Not Installed:IIS-ManagementScriptingTools | | | Not Installed:NetworkLoadBalancingHeadlessServer Not Installed:SNMP-SC Not Installed:TelnetClient Not Installed:WAS-WindowsActivationService | |--- Not Installed:WAS-ProcessModel | | | |--- Not Installed:IIS-ASP | | | | | |--- Not Installed:IIS-BasicAuthentication | | | | | |--- Not Installed:IIS-CGI | | | | | |--- Not Installed:IIS-ClientCertificateMappingAuthentication | | | | | |--- Not Installed:IIS-CustomLogging | | | | | |--- Not Installed:IIS-DefaultDocument | | | | | |--- Not Installed:IIS-DigestAuthentication | | | | | |--- Not Installed:IIS-DirectoryBrowsing | | | | | |--- Not Installed:IIS-HttpCompressionDynamic | | | | | |--- Not Installed:IIS-HttpCompressionStatic | | | | | |--- Not Installed:IIS-HttpErrors | | | | | |--- Not Installed:IIS-HttpLogging | | | | | |--- Not Installed:IIS-HttpRedirect | | | | | |--- Not Installed:IIS-HttpTracing | | | | | |--- Not Installed:IIS-IISCertificateMappingAuthentication | | | | | |--- Not Installed:IIS-IPSecurity | | | | | |--- Not Installed:IIS-ISAPIExtensions | | | | | |--- Not Installed:IIS-ASP | | | | | | | | |--- Not Installed:IIS-ISAPIFilter | | | | | |--- Not Installed:IIS-LoggingLibraries | | | | | |--- Not Installed:IIS-ODBCLogging | | | | | |--- Not Installed:IIS-RequestFiltering | | | | | |--- Not Installed:IIS-ASP | | | | | | | | |--- Not Installed:IIS-RequestMonitor | | | | | |--- Not Installed:IIS-ServerSideIncludes | | | | | |--- Not Installed:IIS-StaticContent | | | | | |--- Not Installed:IIS-URLAuthorization | | | | | |--- Not Installed:IIS-WindowsAuthentication | | | Not Installed:WindowsServerBackup |
在了解了系统角色和功能的安装状态之后,就可以根据需要来进行 IIS7 + CGI 的定制安装。为此,键入"start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-HttpErrors;IIS-ApplicationDevelopment;IIS-CGI;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-Performance;IIS-HttpCompressionStatic;WAS-WindowsActivationService;WAS-ProcessModel",
注意:命令行中间没有换行。有关 pkgmgr 安装 IIS7 的有关参数可以参考:在 Server Core 下执行 IIS7 的完整安装、脚本方式安装 IIS7、IIS7安装场景对照表,这几篇日志。其实经过我个人亲身实践证明,IIS7 的默认安装包含了静态内容的访问支持,而这些功能也正是我们所需要的,那么我个人认为使用"ocsetup"反而更为简便,因为不需要再输入繁琐的命令参数。
在执行"start /w ocsetup IIS-WebServerRole"后,再执行"start /w ocsetup WAS-WindowsActivationService",才算真正的安装上了 IIS7,因为 IIS7 需要 "WAS-WindowsActivationService"支持。至此,还只是完成了一半,因为我们完成了 IIS7 的默认安装,并没有安装上 CGI 支持,为此我们还需要执行"start /w ocsetup IIS-CGI"才是真正的完成安装,当安装了"IIS-CGI"后系统会提示重新启动,根据向导完成即可!
而使用"pkgmgr"则不会出现此步骤,而两者的区别也并非仅仅如此!这里,大家不禁要问到为什么每个执行命令先都要加上"start /w ",这是为了能够识别出该命令是否执行结束,如果不加之,那么在执行命令后会直接回到光标状态,而很难识别该命令的是否执行完毕。(图7)
完成了 IIS7 + CGI 支持的安装后,我们便可以开始安装配置 PHP,首先我们还是需要从PHP 官方站点下载 PHP 的 noinstall 安装包,并将其解压缩到对应的位置,如:"c:php"。之后根据实际需要选择 php.ini-dist 或 php.ini-recommended 作为默认的 php 配置文件,此次选择 php.ini-dist 作为配置文件,为此,执行"copy c:/phpphp.ini-dist c:/phpphp.ini",之后根据自己的实际需要修改 php.ini。
可以参考:FastCGI PHP on Windows Server 2003。完成上述工作之后,我们需要将 PHP 集成到 FastCGI 中,为此执行"appcmd set config -section:system.webserver/fastcgi /+[fullpath='c:/phpphp-cgi.exe']",我们可以使用"appcmd list config -section:system.webserver/fastcgi"来查看验证写入是否正确。"appcmd"是 IIS7 的命令行管理工作,功能很强大,使用非常方便。通过"appcmd"我们完全可以轻易的对 IIS7 进行诸如:备份、修改配置、创建网站……(图8)
在完成了 PHP 与 FastCGI 的集成之后,我们还需要添加扩展来执行解释 PHP 文件,为此键入"appcmd set config -section:system.webserver/handlers /+[name='PHP-FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptprocessor='c:/phpphp-cgi.exe']",同样在添加之后我们可以使用"appcmd list -section:system.webserver/handlers"来查看验证。这里需要注意是请正确键入命令行中"FastCgiModule"的大小写格式。(图9)
至此,就完成了 PHP FastCGI 的安装。这里不要忘记,将"index.php"添加到默认文档中,为此执行"appcmd set config /section:defaultDocument /+files.[value='index.php']"。下来我们进入"c:/inetpubwwwroot"目录执执行"notepad phpinfo.php",根据提示创建该文件并编辑该文件写入"",好了现在我们可以在另外一台客户端计算机上打开浏览器测试一下成果!以上环节中涉及到的一些命令和参数我会在以后向大家一一介绍,其实细心体会,这些命令行和参数还是非常通俗易懂的!(图10)
大工程都已经完成了,那么接下来就要开始安装 MySQL,MySQL 在 WS08 下的安装过程并没什么特别之处,之所以要拿出来讲讲主要是为了保证该日志的连贯性和完整性。PHP 离开了 MySQL 就显得不完美了!MySQL 我们可以从 http://www.mysql.com 官方网站下载到,同样请选择下载 noinstall 的版本。
MySQL 手工安装非常简单,首先选择一个 适合自己硬件的 MySQL 的配置文件(my-huge.ini;my-innodb-heavy-4G.ini;my-large.ini;my-medium.ini;my-small.ini),将其拷贝到"c:windows"目录下并命名为"my.ini",之后执行"notepad my.ini"进行编辑,在"[mysqld]"段落首行加入"basedir = c:/mysql"和"datadir = c:/mysql/data",保存退出。
之后进入到"c:/mysqlbin"目录,执行"start cmd && mysqld",因为在手工启动 MySQL 服务后,该窗口会暂时被冻结在 MySQL 运行状态,无法执行其他命令,所以在启动 MySQL 前,我现打开一个 CMD 窗口。在新打开的窗体中键入"mysqladmin -u root status && mysqladmin -u root shutdown",用于检查 MySQL 的运行状态,之后再去手工停止 MySQL 服务。
确认没有问题之后执行"mysqld --install && net start mysql",将 MySQL 添加为系统服务,并启动该服务。(图11)
好了,今天到这里就算是结束了,在最后与大家分享一个经验,在部署 Server Core 时,可能服务器处于企业内部环境,为了方便文件的存取和系统的调试,可以使用"netsh firewall set opmode disable"先暂时关闭防火器,之后待工作完毕后再重新启动防火墙,不更加方便!当然这只是个建议,如果安全系数要求比较高,就可以忽略这个经验了!此外,这里还涉及到了一些其他的常规操作,如:创建一个新网站、绑定域名、备份 IIS7 的配置……等等,还是放到以后再与大家分享。
标签: