CISにドメインを登録する

# はじめに
この記事では、IBM Cloudのソリューション"Cloud Internet Services"(以下CIS)を初めて使う人向けに、ドメインの取得から証明書発行、CISへのドメイン登録方法をStep by stepで説明するものです。Code Engineにアプリケーションをデプロイしてドメインマッピングの設定を行い、取得したドメインを使ってアクセスしてみます。

# 手順
1. ドメインを取得　(すでに取得している方は飛ばして大丈夫です)
2. ドメインをCISに登録
3. CISのネームサーバーをお名前.comに登録 
4. ドメインの証明書を発行
5. Code Engineにアプリケーションをデプロイ
6. Code Engineでドメインマッピング設定
7. CISでDNSレコードの登録
8. 取得したドメインでアプリケーションにアクセス

# 1. ドメインを取得
今回は、[お名前.com](https://www.onamae.com/)を使って取得しました。
記事執筆した2024/12月時点では、ドメインの取得のみなら1つ無料で出来ました。(レンタルサーバー代は別途)

希望のドメイン名を入力して検索してみます。
![スクリーンショット 2024-12-18 10.50.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/8f51558c-b23e-45f9-75d8-62a24cc3b214.png)

利用可能なドメインには○がついています
私はなかなか決まりませんでした、、
![スクリーンショット_2024-12-18_10_50_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/96960d27-98c8-18a4-f003-85ad3338d1a8.png)

利用したいドメインが決まったら、○マークをクリック
今回は`toulouse0505.com`を取得してみます。
![スクリーンショット 2024-12-18 10.54.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/b8a5063c-7985-d71d-1ee3-c32a19283342.png)
ここから、購入画面です。
利用用途を選択
![スクリーンショット 2024-12-18 10.54.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/d6c35863-d39f-69fb-d9e0-46e8b9c15d71.png)
申し込み内容の確認です。
レンタルサーバーは今回不要でしたので削除しました。
この画面より下にあるオプションは、今回は不要でしたのでつけませんでした。
購入内容が決まったら、右側で会員登録をします。
![スクリーンショット_2024-12-18_10_55_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/e31da592-ca11-5b2a-b9c2-8c1f150f16e2.png)
続いて、会員情報の登録
![スクリーンショット_2024-12-17_15_20_42-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/443baba7-4a3a-b8d1-d4d2-1f6b81034d87.png)
支払い方法の登録
登録が終わったら画面右上の「申込む」をクリック
![スクリーンショット_2024-12-17_15_21_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/2b542aa6-0232-b01f-c6a8-38d74a4fd7ba.png)

申し込みの受付が完了しました！
![スクリーンショット_2024-12-17_15_23_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/375cb88f-a51d-c5ad-10be-5325191f43d6.png)
管理画面を見てみます。
![スクリーンショット_2024-12-17_15_25_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/f744ac0b-5e36-0e79-089b-3e6125d6a728.png)
この時点では、お名前.comのネームサーバーが名前解決をすることになっていることが確認出来ます。

# 2. ドメインをCISに登録
"Overview"画面を開きます。
このアカウントでは既に登録してあるドメインがありますが、右側のポチをクリックして`New Domain`を選択します。
![スクリーンショット_2024-12-18_12_18_41-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/2b89324b-569f-5283-bb39-fa9487140cd0.png)


登録したいドメインを入力します。
Standard Next Planでは、1つ以上ドメインを登録する場合、2つ目からは追加で月額料金がかかります。その旨が書いてあるチェックボックスにチェックを入れ、"Next"を押します。

![スクリーンショット_2024-12-17_16_50_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/f01cad21-5be7-df79-2fc4-c0bdb860288a.png)

DNSレコードはあとで登録するので、ここは飛ばして"Next"を押します。
![スクリーンショット_2024-12-18_12_35_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/e09c32a4-4816-685d-9e12-1147f04ea494.png)

`New NS records`の欄にある新たなCISのネームサーバー情報をコピーしてどこかにメモしておきます。
コピーしたネームサーバー情報を、次のステップでお名前.comに登録します。ネームサーバー情報がDNSのシステムに反映されてからでないとCISの方でも登録完了できないので、ここでは一度"Cancel"しておきます。
![スクリーンショット_2024-12-17_16_52_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/7add88d8-25de-6a7a-6bd0-bc85a50d1c73.png)
"Pending"になりました。ここで一旦CISの画面から離れます。
![スクリーンショット_2024-12-17_16_52_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/ff807667-4d97-8461-3611-12991e28767f.png)


# 3. CISのネームサーバーをお名前.comに登録 
CISのネームサーバーをお名前.comに登録します。
"ドメイン"＞"ドメイン詳細"＞"ネームサーバー設定"から以下の画面に辿り着きました。"その他のサービス"の欄から、CISのネームサーバーを登録します。
![スクリーンショット_2024-12-17_16_54_59-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/6d2bfb7c-6909-6d13-a8ad-a01fe1de4b1a.png)
![スクリーンショット_2024-12-17_16_55_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/78d17a71-51d6-62fc-e1f0-1dd5ec9c5f8b.png)
これで、取得したドメインの名前解決を行うネームサーバーを、お名前.comのものからCISのものに変更することが出来ました。この変更がDNSのシステムに反映されるまで24~72時間ほどかかるそうです。(今回は24時間後には反映されていました)

# 4. ドメインの証明書を発行
続いて、Let's Encryptでドメインの証明書を発行します。
Let's Encryptとは、ACMEプロトコルを使用して動作する認証局(CA機関)です。ユーザーはACMEクライアント(Certbotなど)を通じて Let's Encryptの証明書を取得・管理します。(Let's encrypt参照：https://letsencrypt.org/ja/docs/challenge-types/)


## certbotをインストール
```
brew install certbot
```
## 証明書発行のコマンド
```
sudo certbot certonly 
--manual 
--server https://acme-v02.api.letsencrypt.org/directory 
--preferred-challenges dns 
-d "*.toulouse0505.com" 
-d "toulouse0505.com" 
-m "xxxxxx@gmail.com"
```

* コマンドはこちらのQiitaを参考にさせていただきました。
https://qiita.com/F_clef/items/136d81223c030904523c

* サブドメインを作った場合も、同じ証明書が使えるように、ワイルドカード　-d "*.toulouse0505.com"を入れています。

利用規約が表示されるので"Y"で同意します。
またメールでのお知らせに関する承諾を聞かれますがこれはどちらでも大丈夫です。

## ACMEチャレンジのTXTレコードに設定する値が表示される
続いて以下のコマンドが返ってきます。
```
- - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.toulouse0505.com.
with the following value:
xxxxxxxxxxxxxxxx
- - - - - - - - - - - - - - - - - - - -
```
ここで、ターミナル画面が`"Press Enter to Continue"`とEnterキー待ちの状態となりますが、まだ押しません。認証用のトークンであるvalue`xxxxxxxxxxxxx`の値をコピーし、CISに登録しに行きます。

## DNSへTXTレコードを設定
ドメイン名`toulouse0505.com`が登録されているDNSがきちんと制御下にあることを証明するために、認証用のトークンをCISのDNSレコードに登録します。
ポータルでCISを開き、"Reliability" > "DNS records"と進みます。
"Add"を押すと以下の画面が出てきます。
![スクリーンショット_2024-12-18_15_54_49-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/87ee2445-5b8b-8d1b-2c1b-8bf6ef8d0419.png)
* タイプ：TXT
* ホスト名：_acme-challenge
* Content：コピーしておいた認証用のトークン`xxxxxxxxxxxxx`をペースト

"Add"を押して完了です。
TXTレコードが追加されたことが確認できます。ここで5分ほど待ちます。
![スクリーンショット_2024-12-20_11_14_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/f4e4e0bf-2c8e-565a-cd82-e1f21ed749ad.png)

## 証明書発行
5分ほど待ってTXTレコードが反映された頃に、Enterを押すと証明書が発行されます。
```
Successfully received certificate.
Certificate is saved at:
/etc/letsencrypt/live/toulouse0505.com/fullchain.pem
Key is saved at:
/etc/letsencrypt/live/toulouse0505.com/privkey.pem
This certificate expires on 2025
These files witl be updated when the certificate renews.
```
* 発行された証明書が以下のディレクトリで確認できます。
証明書 : /etc/letsencrypt/live/ドメイン名/fullchain.pem
秘密鍵 : /etc/letsencrypt/live/ドメイン名/privkey.pem

* 証明書の自動更新の案内も表示されますが今回は省略します。

# 5. Code Engineにアプリケーションをデプロイ
Code Engineを用意します。
![スクリーンショット_2024-12-18_16_06_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/43ccb6eb-e0c6-8d6a-6ad8-28b5ac2ac38c.png)
![スクリーンショット_2024-12-18_16_06_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/830b9775-d158-fc51-11d8-4f7782f7f910.png)
* コンポーネントタイプ：アプリケーション
* アプリケーション名：`application-toulouse`
* コード：既存のコンテナイメージ(helloworld)を使う
* リソースは課金を抑えるため最小限のもの
* インスタンス1台のみでの稼働
* ドメインマッピング：パブリック

プロビジョニングが完了したら、アプリケーションの動作確認をします。
![スクリーンショット_2024-12-18_16_09_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/d9a522ec-c95c-db29-517f-7d66b124d0ab.png)
![スクリーンショット_2024-12-18_16_09_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/7d894319-9c22-120c-efed-d1fdb032fa82.png)
Code Engineでデプロイしたアプリケーションの動作確認ができました。

# 6. Code Engineでドメインマッピング設定
続いて、Code Engineのドメインマッピング機能で、今回私が取得したドメイン`toulouse0505.com`でアプリケーションにアクセスできるようにします。

"Domain Mappings"のページを開きます。
"Custom domain mappings"から"Create"をクリックします。 
![スクリーンショット_2024-12-18_16_11_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/d8149ebe-890b-c64b-84a2-727317772af2.png)
先ほどLet's encryptで発行した証明書(サーバー証明書、中間証明書を含むフルチェーン)とPrivate Keyをコピペします。
![スクリーンショット_2024-12-18_16_17_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/1715652e-7407-5060-7171-3f53038108e5.png)
続いて画面下部で、アプリケーションを公開する際に使うFQDNを作成します。今回は`www.toulouse0505.com`にします。
CNAME targetも後ほどCISに設定を入れるのでコピーをしてどこかにペーストしておきます。
![スクリーンショット_2024-12-18_16_22_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/601781ec-d1e2-0372-51d9-6a9641613acb.png)
"Create"を押します。

# 7. CISでDNSレコードの登録
CISを経由してCode Engineにアクセスさせるために、DNSレコードの登録をします。
CISの"Reliability"から、ページ下部のDNS recordsの"Add"をクリック。
(先程使った"_acme-challenge"は削除して大丈夫です)
![スクリーンショット_2024-12-18_16_24_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/3a12b49b-818b-4b28-6874-6707cf5962e2.png)
Code Engineにアクセスする為のDNSレコードの中身
![スクリーンショット_2024-12-18_16_25_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/6dcb1ac0-bdb1-91b1-c538-c82be596a6cd.png)
* DNSレコードタイプ：CNAME
* ホスト名：www
* Alias domain name：Code Engineのカスタムドメイン設定時にコピーしておいたCNAME target 

"Add"でDNSレコードを追加します。

![スクリーンショット_2024-12-18_16_25_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/724d0a6b-1921-6bcb-ba46-9c0efbaf5090.png)
"Proxy"をオンにしておきます。
これでDNSレコード追加作業は完了です。

# 8. 取得したドメインでアプリケーションにアクセス
![スクリーンショット_2024-12-18_16_32_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523945/f2b7caa6-26f0-7195-a01b-270df3b57eb0.png)
取得したドメインを使ってアプリケーションにアクセスすることが出来ました。