概要
AzureのAppServiceにて自作Webサイトの運営を行っていたのですが、カスタムドメインやSSLバインディングをするためには月約7000円程度のプランを選択する必要があり、収益の見込めないシステムには少し高いな~と思っていたところ、Linuxであればもう少し安く済むことを知り、乗せ換えることを決意。
###以下、自作Webサイトの構成
フロントエンド | Vue.js |
バックエンド | .Net Core 3.1(C#) |
データベース | SQLServer |
CI/CD | AzureDevopsPipelines |
SSL証明書 | Let’s Encrypt |
その他使用サービス | BlobStorage、SendGrid |
AppServiceの「Windows」と「Linux」の違い
とりあえず出来るかどうかはわからないけど、一回作ってみよ~ってことで、AppService(Linux)を作成してみた。
ちらちら~っと中身を見たところ、以下の機能がLinuxだと使用できない。
- Application Insight
- Webジョブ
- MySql in App
- アプリの複製
- 拡張機能
- App Service Planの種類が少ない
拡張機能が使えない。。。
ということは、「Let's Encrypt」の導入は手動でやらなければいけないのか。。。
波乱の予感。。。(Windows版であれば拡張機能の「Azure Let's Encrypt」を使用して楽に適用できた)
何はともあれやってみる
とりあえずサービスは作成したので、ソースをデプロイして、構成情報設定してなんなく起動はできた。
カスタムドメインの設定方法もWindowsの時と変わらないので、特に困ることもなく完了。
ということで、最後の難関、手動での「Let's Encrypt」によるSSL証明書の取得
Certbotのインストール
該当のAppServiceにSSH接続(Azureポータルから可能)し、以下のコマンドを実行
$ apt-get update
$ apt-get install certbot
これでCertbotがインストールされているはず。
証明書の発行
Certbotを使用して証明書の発行を行います。
先度と同じように、SSHにて以下のコマンドを実行
certbot certonly -d <ドメイン> --manual --preferred-challenges dns
「--preferred-challenges dns」の部分は、認証方式の選択。
今回はDNSチャレンジという、証明書を取得したいドメインにTXTレコードを追加することで認証を行うことにした。
(他にも特定の場所にファイルを配置して参照させるHttpsチャレンジなどがある)
コマンドを進めていくと、途中で「DNSにこの値を使用してTXTレコード作れ」みたいな指示がでるので、指示に従う。
TXTレコード作成しても5分くらいは反映されないと思うので、以下のコマンドで反映されていることを確認してから次に進むこと。
nslookup -q=TXT [ドメイン]
以下のような文字列が表示されれば成功です。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/[ドメイン]/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/[ドメイン]/privkey.pem
Your cert will expire on <some-date>. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
プライベート証明書の作成
Let's Encryptから取得した中間証明書等を使用し、プライベート証明書を作成。
$ mkdir /tmp/sandbox -p
$ cd /tmp/sandbox
$ SOURCE=/etc/letsencrypt/live/[ドメイン]
$ sudo cp $SOURCE/{cert.pem,privkey.pem,chain.pem} .
$ sudo chown ope *.pem
$ openssl pkcs12 -export -out certificate.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
最後のopensslコマンドを実行した際に、パスワードの設定を要求されるので入力。
ここで入力したパスワードは、AppServiceに証明書を登録する際にも要求されるので覚えておくこと。
AppServiceへの設定
作成されたpfxファイルをダウンロードし、AppServiceのカスタムドメインから対象のドメインにSSLバインディング。
これで作業は完了!
終わりに
企業等で運用する場合には、ApplicationInsightとか分析ツール使えると便利ですが、個人運営の小規模サイトであればLinuxでいいかなぁ~と個人的には思いました。
Linuxサーバーで.NetCore動作させるのってどうなんやろ。。。って思っていたけど、案外普通に動いてて良かったです。
(ただ、Windowsに比べて多少の動作のもっさり感を感じました。気のせい?)
Windowsサーバーだと月約7000円だったのが、Linuxサーバーだと月約2000円!!
これならもう幾つかサーバ立ち上げてWEBサービス作ってもいいかなぁ~と考える今日この頃。