VuePressのブログをカスタムドメイン+SSL対応させたGitLab Pagesにデプロイする
こんにちは、最近スパにハマっているn0bisukeです。
今日はタイトル通りVuePressで作ったブログをGitLab Pagesに乗せてカスタムドメイン+SSL対応していきます。 2019年1月時点版です。UIなどはガンガン変わっていくと思いますので適宜読み替えましょう。
過去に書いたこの記事とは別のサイトの運用話です。
気持ち的にHugoブログもVuePressに移行したいと思っている感じですね。
GitLab Pagesの基本
GitLab PagesはGitLabで利用できる無料ホスティング環境です。
GitHub PagesのGitLab版って認識で大丈夫です。
GitLab Pagesでサイト公開の仕方
- publicフォルダを作成します。
リポジトリのルートにpublic
フォルダを作成して、その中にindex.htmlや関連するcssやjsファイルなどを入れていきます。基本的にはpublic/index.html
がプロジェクトのトップページとして認識されます。
- .gitlab-ci.ymlを作成します。
リポジトリのルート(public
フォルダと同じ階層)に.gitlab-ci.yml
を作成します。
pages:
stage: deploy
script:
- echo 'Nothing to do...'
artifacts:
paths:
- public
only:
- master
あとはGitLabのリポジトリにプッシュするだけです。 この場合masterブランチにプッシュすると更新されます。
ファイル構成はイメージはこんな感じです。
.gitlab-ci.yml
がある状態でGitLabのリポジトリにプッシュするとCIが動いてごにょごにょやってくれます。
- https://<ユーザー名>.gitlab.io/<リポジトリ名> にアクセス
https://<ユーザー名>.gitlab.io/<リポジトリ名>
が公開URLです。
GitLabのリポジトリのURLがhttps://gitlab.com/<ユーザー名>/<リポジトリ名>
となっているので適宜読み替えましょう。
例えば、リポジトリのURLがhttps://gitlab.com/n0bisuke/akihabara
だとしたら、公開用のGitLab PagesのURLはhttps://n0bisuke.gitlab.io/akihabara
になります。
プッシュしてから更新まで数分時間が掛かることがあるので少し経ってからまた確認してみましょう。
うまくいかない場合はhttps://gitlab.com/<ユーザー名>/<リポジトリ名>/-/jobs
に行くとジョブの確認が出来るので、エラーなどを確認してみましょう。
VuePressをGitLab Pagesにデプロイ
先ほどの利用したGitLab CIを利用します。
VuePressはVue.jsの作者が作ったVue.js製の静的サイトジェネレータです。
公式のドキュメントに、VuePressをGitLab PagesとGitLab CIにデプロイする方法が載っていますが、個人的には以下の2ステップだけで問題ないと思います。
1. VuePressのconfig.jsの設定
docs/.vuepress/config.js
の中にbase
というキーがあります。
ここにリポジトリ名をパスとして設定してあげます。
例えばhttps://gitlab.com/n0bisuke/hogehoge
というリポジトリでhttps://n0bisuke.gitlab.io/hogehoge
という公開URLになる場合は、base
の箇所を/hogehoge/
にしましょう。
後述しますが、もし、この後の手順のカスタムドメインまでを設定するならばここのbase
は/
の設定のままで大丈夫です。
2. .gitlab-ci.yml
の記述
以下のyml記述だけで完了です。プッシュしてhttps://n0bisuke.gitlab.io/hogehoge
(自分の環境に読み替え)などにアクセスして確認しましょう。
image: node:current-alpine
pages:
cache:
paths:
- node_modules/
before_script:
- node -v
- npm i
script:
- npm run docs:build
- cp -pr docs/.vuepress/dist public
artifacts:
paths:
- public
only:
- master
デフォルトのチュートリアル通りだとビルドのコマンドがnpm run docs:build
になっているはずなので、プッシュするとCI環境側でnpm run docs:build
でビルドして、ビルド後のdistフォルダをpublicフォルダにコピー、その後publicフォルダをGitLab Pagesとしてデプロイします。
公式ドキュメントにはビルド先のフォルダをdistではなくpublicにする設定などがありましたが、この記述でも問題ないです。
カスタムドメインの利用 & SSL対応
現状で、https://n0bisuke.gitlab.io/hogehoge
というアドレスが公開URLになっているものをhttps://hogehoge.dotstud.io
でアクセスさせるようにしていきます。
Cloudflareを利用します。
Let’s Encryptを利用する手もあるのですが、更新の手間があるのと既にdotstud.ioでCloudflareを使ってDNSやSSL設定をしていたのでCloudflareを利用してのGitLab Pagesのカスタムドメイン&SSL対応を紹介します。
GitLab公式のSetting up GitLab Pages with CloudFlare Certificatesを見ながら試してみました。
DNSのAレコードをGitLab Pagesに向けることも出来るみたいですが、今回はCNAMEでサブドメインをリダイレクトさせる形にします。
1. 証明書の作成
CloudflareのCrypto画面を開きます。
Origin Certificates
の項目にあるCreate Certificate
(証明書の作成)の青いボタンを押します。
モーダルウィンドウが開かれますが、List the hostnames
の箇所だけ変更して、利用したいドメイン名を記述して、NEXTボタンで進みましょう。
今回はhttps://hogehoge.dotstud.io
でアクセスしたいので、ここにはhogehoge.dotstud.io
などのドメイン名だけを入力しておきます。
これで証明書の文字列が生成されます。
Ker format
はデフォルトのPEM
のままで大丈夫です。
- Origin certificate
- Private key
この二種類の文字列をあとで使うのでコピーしておきましょう。
2. GitLab Pagesに設定する
GitLabのリポジトリ設定画面からPagesの設定画面に行きます。
https://gitlab.com/<ユーザー名>/<リポジトリ名>/pages
が設定画面です。
ここからNew Domain
ボタンを押してカスタムドメインの設定をします。
また、この際にForce domains with SSL certificates to use HTTPS
のチェックがありますが、SSL対応させるのでデフォルトのままチェックしておきましょう。
Domain
の項目に設定したいカスタムドメイン(今回はhogehoge.dotstud.io
)を設定します。
以下の二箇所には先ほどのCloudflareで生成した証明書文字列を指定します。
- Certificate (PEM):
Origin certificate
の文字列 - Key (PEM):
Private key
の文字列
----BEGIN CERTIFICATE----
などの文字を含めて全部コピペしましょう。
ここにさらにCloudflareの証明書の文字列が必要になります。CloudFlare’s Origin CA — RSA Rootというらしいです。
以下の文字列(CloudFlare’s Origin CA)をコピーしましょう。
-----BEGIN CERTIFICATE-----
MIID/DCCAuagAwIBAgIID+rOSdTGfGcwCwYJKoZIhvcNAQELMIGLMQswCQYDVQQG
EwJVUzEZMBcGA1UEChMQQ2xvdWRGbGFyZSwgSW5jLjE0MDIGA1UECxMrQ2xvdWRG
bGFyZSBPcmlnaW4gU1NMIENlcnRpZmljYXRlIEF1dGhvcml0eTEWMBQGA1UEBxMN
U2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZvcm5pYTAeFw0xNDExMTMyMDM4
NTBaFw0xOTExMTQwMTQzNTBaMIGLMQswCQYDVQQGEwJVUzEZMBcGA1UEChMQQ2xv
dWRGbGFyZSwgSW5jLjE0MDIGA1UECxMrQ2xvdWRGbGFyZSBPcmlnaW4gU1NMIENl
cnRpZmljYXRlIEF1dGhvcml0eTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEG
A1UECBMKQ2FsaWZvcm5pYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AMBIlWf1KEKR5hbB75OYrAcUXobpD/AxvSYRXr91mbRu+lqE7YbyyRUShQh15lem
ef+umeEtPZoLFLhcLyczJxOhI+siLGDQm/a/UDkWvAXYa5DZ+pHU5ct5nZ8pGzqJ
p8G1Hy5RMVYDXZT9F6EaHjMG0OOffH6Ih25TtgfyyrjXycwDH0u6GXt+G/rywcqz
/9W4Aki3XNQMUHNQAtBLEEIYHMkyTYJxuL2tXO6ID5cCsoWw8meHufTeZW2DyUpl
yP3AHt4149RQSyWZMJ6AyntL9d8Xhfpxd9rJkh9Kge2iV9rQTFuE1rRT5s7OSJcK
xUsklgHcGHYMcNfNMilNHb8CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgAGMBIGA1Ud
EwEB/wQIMAYBAf8CAQIwHQYDVR0OBBYEFCToU1ddfDRAh6nrlNu64RZ4/CmkMB8G
A1UdIwQYMBaAFCToU1ddfDRAh6nrlNu64RZ4/CmkMAsGCSqGSIb3DQEBCwOCAQEA
cQDBVAoRrhhsGegsSFsv1w8v27zzHKaJNv6ffLGIRvXK8VKKK0gKXh2zQtN9SnaD
gYNe7Pr4C3I8ooYKRJJWLsmEHdGdnYYmj0OJfGrfQf6MLIc/11bQhLepZTxdhFYh
QGgDl6gRmb8aDwk7Q92BPvek5nMzaWlP82ixavvYI+okoSY8pwdcVKobx6rWzMWz
ZEC9M6H3F0dDYE23XcCFIdgNSAmmGyXPBstOe0aAJXwJTxOEPn36VWr0PKIQJy5Y
4o1wpMpqCOIwWc8J9REV/REzN6Z1LXImdUgXIXOwrz56gKUJzPejtBQyIGj0mveX
Fu6q54beR89jDc+oABmOgg==
-----END CERTIFICATE-----
このCloudFlare's Origin CA
をコピーしたら、先ほどCertificate (PEM)
のフォームに入れ込んだ文字列の後ろに改行をいれて、CloudFlare's Origin CA
を貼り付けます。
この画面のような感じです。
ここまで出来たら、ページ下部のCreate New Domain
のボタンを押して進みましょう。
3. DNSの設定
無事に作成出来ると、以下のような確認画面になります。
この画面の指示にしたがってCloudflareのDNS設定画面でCNAMEとTXTレコードを設定してあげる必要があります。
CNAMEレコード設定
まずはCNAMEレコードです。 以下のように設定します。
- Type: CNAME
- Name: 利用したいカスタムドメイン名
- Value: <ユーザー名>.gitlab.io
例えばhttps://hogehoge.dotstud.io
にしたい場合はNameをhogehoge
にし、元々のGitLabリポジトリがhttps://n0bisuke.gitlab.io/hogehoge
などであれば,Valueをn0bisuke.gitlab.io
にします。
これでhttps://hogehoge.dotstud.io
にアクセスした際にhttps://n0bisuke.gitlab.io
側にリダイレクトされるようになります。
TXTレコード設定(所有者確認)
GitLab側から見るとhogehoge.dotstud.io
をそのユーザーが所有しているか分からないため、所有権の確認作業が発生します。
GitLabの設定画面にVerification status
の箇所に_gitlab-pages-verification-code.hogehoge.dotstud.io TXT gitlab-pages-verification-code=xxxxxxxxxxxxxxxxxx
などの文字列が表示されていることが分かります。この情報をCloudflareに登録してあげればOKです。
登録が出来たら、おそらく赤くなっているUnverifiedのボタンを押して確認しましょう。
上手くいくとこんな感じでSuccessfully verified
などの文字が表示されます。
4. SSLの設定
CloudflareのCrypto画面からSSLの設定が出来ます。Full
もしくはFull(strict)
にしておきましょう。
あとは、ドメインが浸透したりするのを少し待ちましょう。
https://hogehoge.dotstud.io
にアクセするとhttps://n0bisuke.gitlab.io/hogehoge
に内部的にリダイレクトされるようになりました。
5. VuePressの設定を戻す
先ほどの紹介で、VuePressをGitLab Pagesで公開する際にdocs/.vuepress/config.js
のbase
キーを/リポジトリ名/
とする紹介がありましたが、カスタムドメインまでやった人はbase
キーを/
に戻しておいてください。
ここの設定を間違えるとCSSやJSが上手く読み込まれなくなってしまいます。
まとめ
如何でしょう。GitLab Pagesや周辺ツール/サービスを活用して無料でカスタムドメイン+SSLのVuePressブログを作ることが出来ました。
この辺のことを試す際の参考になれば幸いです。