From e87e2ba37bb25a7f11edf1cd81b89e688c43c091 Mon Sep 17 00:00:00 2001 From: Antony Konstantinidis Date: Sat, 15 Jul 2023 18:23:09 +0200 Subject: [PATCH] feat: add `iis` server preset (#1436) --- docs/content/2.deploy/providers/iis.md | 26 +++++++++++ src/presets/iis-node.ts | 65 ++++++++++++++++++++++++++ src/presets/iis.ts | 34 ++++++++++++++ src/presets/index.ts | 2 + 4 files changed, 127 insertions(+) create mode 100644 docs/content/2.deploy/providers/iis.md create mode 100644 src/presets/iis-node.ts create mode 100644 src/presets/iis.ts diff --git a/docs/content/2.deploy/providers/iis.md b/docs/content/2.deploy/providers/iis.md new file mode 100644 index 0000000000..f6db091daf --- /dev/null +++ b/docs/content/2.deploy/providers/iis.md @@ -0,0 +1,26 @@ +# IIS + +Deploy Nitro apps to IIS. + +::alert{type="warning"} +This is an experimental preset. +:: + +## Using [IISnode](https://github.com/Azure/iisnode) (recommended) + +**Preset:** `iis-node` ([switch to this preset](/deploy/#changing-the-deployment-preset)) + +1. Install [IISnode](https://github.com/azure/iisnode/releases), and the [IIS URL Rewrite Module](https://www.iis.net/downloads/microsoft/url-rewrite). +2. In IIS, add `.mjs` as a new mime type and set its content type to `application/javascript`. +3. Deploy the contents of your `.output` folder to your website in IIS. + + +## Using IIS directly + +**Preset:** `iis-handler` ([switch to this preset](/deploy/#changing-the-deployment-preset)) + +If you do not wish to use IISnode, you can use IIS directly. + +1. Make sure that [Node.js](https://nodejs.org/en/) is installed on your Windows Server. +2. Make sure [`HttpPlatformHandler` Module](https://www.iis.net/downloads/microsoft/httpplatformhandler) is installed. +3. Copy your `.output` directory into the Windows Server, and create a website on IIS pointing to that exact directory. diff --git a/src/presets/iis-node.ts b/src/presets/iis-node.ts new file mode 100644 index 0000000000..300f3b6fed --- /dev/null +++ b/src/presets/iis-node.ts @@ -0,0 +1,65 @@ +import { resolve } from "pathe"; +import { writeFile } from "../utils"; +import { defineNitroPreset } from "../preset"; +import type { Nitro } from "../types"; + +export const iisNode = defineNitroPreset({ + extends: "node-server", + hooks: { + async compiled(nitro: Nitro) { + await writeFile( + resolve(nitro.options.output.dir, "web.config"), + iisnodeXmlTemplate() + ); + + await writeFile( + resolve(nitro.options.output.dir, "index.js"), + "import('./server/index.mjs');" + ); + }, + }, +}); + +function iisnodeXmlTemplate() { + return ` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; +} diff --git a/src/presets/iis.ts b/src/presets/iis.ts new file mode 100644 index 0000000000..bc335a15f5 --- /dev/null +++ b/src/presets/iis.ts @@ -0,0 +1,34 @@ +import { resolve } from "pathe"; +import { writeFile } from "../utils"; +import { defineNitroPreset } from "../preset"; +import type { Nitro } from "../types"; + +export const iis = defineNitroPreset({ + extends: "node-server", + hooks: { + async compiled(nitro: Nitro) { + await writeFile( + resolve(nitro.options.output.dir, "web.config"), + iisXmlTemplate() + ); + }, + }, +}); + +function iisXmlTemplate() { + return ` + + + + + + + + + + + + + +`; +} diff --git a/src/presets/index.ts b/src/presets/index.ts index 6faaf29f88..28aa5ffbb6 100644 --- a/src/presets/index.ts +++ b/src/presets/index.ts @@ -26,5 +26,7 @@ export * from "./cleavr"; export * from "./layer0"; export * from "./flightcontrol"; export * from "./lagon"; +export * from "./iis-node"; +export * from "./iis"; export { _static as static } from "./static"; export * from "./github-pages";