🙆

[Deno] freshでTLS Serverを立ち上げる方法

2024/01/12に公開

はじめに

freshはDenoで動作するWeb Application Frameworkです。
freshでWebアプリを開発する際にLet's Encryptなどの証明書を利用してTLSサーバーとして起動する方法を調べました。以外にも公式ドキュメントに書いてなかったので。

プロジェクトを作成する

まず、freshのプロジェクトを作成します

deno run -A -r https://fresh.deno.dev
Project Name [fresh-project] fresh-tls
Fresh has built in support for styling using Tailwind CSS. Do you want to use this? [y/N] n
Do you use VS Code? [y/N] n
The manifest has been generated for 5 routes and 1 islands.

Project initialized!

Enter your project directory using cd fresh-tls.
Run deno task start to start the project. CTRL-C to stop.

Stuck? Join our Discord https://discord.gg/deno 

Happy hacking! 🦕

fresh.config.ts を編集する

cd fresh-tls
vi fresh.config.ts

以下のようにdefineCinfigkeycertを追加し、証明書ファイルの内容を設定します。

import { defineConfig } from "$fresh/server.ts";

const keyPath = "/[YOUR_KEY_PATH]/privkey.pem";
const certPath = "/[YOUR_CERT_PATH]/fullchain.pem";
const key = await Deno.readTextFile(keyPath);
const cert = await Deno.readTextFile(certPath);

export default defineConfig({
  key,
  cert,
});

TLSサーバーを起動する

deno task start
Task start deno run -A --watch=static/,routes/ dev.ts
Watcher Process started.
The manifest has been generated for 5 routes and 1 islands.

 🍋 Fresh ready 
    Local: http://localhost:8000/

出力はhttp://localhost:8000/となっていますが、Webブラウザなどでhttps://[YOUR_DOMAIN]:8000 にアクセスするとサンプルアプリにアクセスできます。

以上です。簡単ですね。

おわりに

わかってしまえば簡単ですが、今のところドキュメントに明記されていないのでわりとソースコード掘ってやり方わかりました。過去のIsueeやプルリクを回って最終的にこのテストコードがにたどり着きました。

一方で、公式ドキュメントのConfigの仕様を見るとserver?: Partial<Deno.ServeTlsOptions>;と定義されていて、

export default defineConfig({
  key,
  cert,
});

じゃなくて

export default defineConfig({
  server: {
    key: key,
    cert: cert,
  },
});

でもいけるように見えます。こっちも試してみたら問題なく動作したのでどっちでもいけるっぽいです。

Discussion