在 IIS 服务器上安装
这些说明适基于 Windows Server 2016, IIS 10, Node.js 10.15.0, iisnode 0.2.26 和 verdaccio 3.11.0.
- 安装 IIS 并安装 iisnode。 确保按照 iisnode 的说明安装先决条件(Url 重写模块 & 节点)。
- 在资源管理器中创建一个新的文件夹,用于托管 verdaccio 文件。 例如
C:\verdaccio
。 在此文件夹里保存 package.json, start.js 和 web.config 。 - 在因特网信息服务管理器中创建一个新站点。 您可以随意给它命名。 我将在这些用法说明中称它为 verdaccio。 指定保存所有文件和端口号的路径。
- 返回到资源管理器中,把对您刚创建的文件夹的修改权限赋予给运行此应用程序池的用户。 如果您已命名此站点为 verdaccio,并没有修改该应用程序池,它正在 ApplicationPoolIdentity下运行,您就应该给用户 IIS AppPool\verdaccio 修改权限。 如果您需要帮助的话,请参照用法说明。 (如果需要,可以在日后限制访问,这样它只有 iisnode 和 verdaccio\storage 的修改权限)
- 启动命令行并执行以下命令来下载 verdaccio:
cd c:\verdaccio
npm install
- 确保在 Windows 防火墙中有一个入站规则,接受到指定端口的 TCP 流量
- 就这样! 现在您可以导航到您指定的主机和端口
我希望 verdaccio
站点成为IIS中默认的站点,因此我执行了以下操作:
- 我停止了“默认网站”,只在 IIS 中启动“verdaccio”站点
- 我将端口 80 绑定设置为"http", ip 地址为"全部未定义",解决了任何警告或提示。
这些指南是基于Host Sinopia in IIS on Windows。 我不得不依照以下调整我的网页配置,但是您可能发现上述提到链接里的原始配置可以更好作业
将创建默认配置文件c:\verdaccio\verdaccio\config.yaml
package.json
{
"name": "iisnode-verdaccio",
"version": "1.0.0",
"description": "Hosts verdaccio in iisnode",
"main": "start.js",
"dependencies": {
"verdaccio": "^3.11.0"
}
}
start.js
process.argv.push('-l', 'unix:' + process.env.PORT, '-c', './config.yaml');
require('./node_modules/verdaccio/build/lib/cli.js');
用于 Verdaccio 版本 < v3.0 的备用 start.js
process.argv.push('-l', 'unix:' + process.env.PORT);
require('./node_modules/verdaccio/src/lib/cli.js');
web.config
<configuration>
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<!-- indicates that the start.js file is a node.js application
to be handled by the iisnode module -->
<handlers>
<remove name="WebDAV" />
<add name="iisnode" path="start.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Execute" />
<add name="WebDAV" path="*" verb="*" modules="WebDAVModule" resourceType="Unspecified" requireAccess="Execute" />
</handlers>
<rewrite>
<rules>
<!-- iisnode folder is where iisnode stores it's logs. These should
never be rewritten -->
<rule name="iisnode" stopProcessing="true">
<match url="iisnode*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="None" />
</rule>
<!-- Rewrite all other urls in order for verdaccio to handle these -->
<rule name="verdaccio">
<match url="/*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="start.js" />
</rule>
</rules>
</rewrite>
<!-- exclude node_modules directory and subdirectories from serving
by IIS since these are implementation details of node.js applications -->
<security>
<requestFiltering>
<hiddenSegments>
<add segment="node_modules" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
故障排除
- 使用 https 托管时,Web 界面不会加载,因为它会尝试通过 http 下载脚本。 确保您已使用
enableXFF
在 IISNode 中启用了X-Forwarded-Proto
请参阅 相关问题。
<configuration>
<system.webServer>
<iisnode enableXFF="true" />
</system.webServer>
</configuration>