サーバーが壊れて修理した話
投稿日: 2025/12/09
自宅サーバーが壊れました

Tailscale 内で立てた WEB サービスを https 化する方法を備忘録的に書きます (HTTPS Certificates は使いません)。
現在、Proxmoxで様々なWEBサービスを立てていますが、外部に公開するものとしないものがあります。
外部に公開するものとしては、ファイル共有サービスや WEB アプリケーションがあります。これらは Cloudflare Tunnels で簡単に外部公開することができます。
一方で、外部に公開しないものとしては Nextcloud や拡張子変換サービスなどがあります。これらは Tailscale のネットワークに属させることで、外部からは見えない形で簡単にアクセス可能となります。
Tailscale のネットワーク内でアクセスするとき、IP アドレスや Magic DNS を使う方法がありますが、自分は Tailscale 内に DNS サーバーを立てています。
自分が保有するドメインを割り当てて Split DNS を使うことでドメインを使って Tailscale 内の各サービスにアクセスできます。
このとき、1つだけ問題が発生します。
証明書がないのでブラウザで警告が出たり、最悪の場合アクセスできなかったりします。
今回はこれを解決する方法を説明します。
通常の SSL 証明書発行 (HTTP-01) は、認証局がそのサーバーにアクセスできる必要があります。
しかし、今回使う DNS-01 チャレンジは、「ドメインの DNS レコードを書き換えられるか」で所有権を確認します。そのため、サーバーが見えない状態でも、正規の証明書が発行可能です。
この記事では以下を前提に説明しています。
今回はPDFファイル操作ができる Stirling-PDF を使います。
Getting Started | Stirling-PDF
Benefits of Stirling-PDF
docs.stirlingpdf.com

ホスト内で以下のような docker-compose.yml を作成します。
stirling-pdf が今回立てたいWEBサービスです。この部分は基本的にWEBサービスのドキュメント通りでよいです。
特殊な設定として、今回は nginx のプロキシとなるコンテナからアクセスできるようにしたいので expose で外部コンテナからのアクセスを許可しています。コンテナ内のどのポートでサービスが動いているか確かめてここに書き込みます。
加えて、jc21/nginx-proxy-manager:latest を入れています。これを使うことで、簡単に nginx のプロキシを設定できます。この部分はコピペで問題ありません。
services:
stirling-pdf:
image: stirlingtools/stirling-pdf:latest-fat
container_name: stirling-pdf
restart: always
expose:
- "8080"
volumes:
- ./stirling-data:/configs
nginx-proxy:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: always
ports:
- '80:80'
- '443:443'
- '81:81'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt以下コマンドでコンテナ群を作成します。
docker compose up -dCloudflareのコンソールを開いて、左側メニューの 「アカウントの管理」>「アカウント API トークン」を開きます。
「トークンを作成する」をクリックし、下部「API トークン テンプレート」に「ゾーン DNS を編集する」があるので「テンプレートを使用する」をクリック。
以下の画像のような画面になるので、「ゾーンリソース」の一番右側で今回使用したいドメインを選択します。

ドメインを選択したら「概要に進む」>「トークンを作成する」でAPIトークンの作成を完了させます。
画面にトークンが表示されるのでコピーしておいてください (一度画面を閉じると見れなくなります)。
IP アドレスを使ってホストのポート 81 にアクセスすると以下のような画面になります。
後ほどのDNS編集の際に使っている可能性があるので、メールアドレスは正しいものを入れておいた方がいいかもしれません。

設定が終わるとダッシュボードが開き、「0 Proxy Hosts」と表示されている部分をクリックします。
「Proxy Hosts」の画面になるので、「Add Proxy Host」をクリックして、まずは「Details」に以下のように情報を入力します。
httpexpose で指定したポート番号
次に、上部「SSL」を開き、以下のように設定します。
dns_cloudflare_api_token= 以降を先ほど取得した API トークンに書き換え (画面に映っているのはダミーの値)
すべての入力が終わったら、「Save」を押します。
しばらくするとモーダルが閉じます。STATUS が Online になっていれば設定完了です。
設定したドメインにアクセスしてみます。

問題なくアクセスできています。証明書に関する警告も表示されていません。
何度か証明書の設定は行ってきましたが、毎回調べたりして詰まっていたので記事を書きました。
かなり楽に設定できる手順を開拓できた気がします。