はじめに
Gitlab Pagesに大きなファイルをデプロイしたい場合、基本的には設定のMaximum size of pages
を大きくすれば問題ありません。ただそうは言ってもその分サーバの容量は食ってしまうので、数GBのコンテンツをデプロイしたいようなケースでなんとか圧縮できないかやってみました。
動作確認したバージョンはGitLab Community Edition 10.4.2になります。
Support for statically compressed gzip content-encoding
このMRの通り、ブラウザがgzip圧縮をサポートしている場合、Gitlab Pagesは事前にgzip圧縮されたファイルを返すことができます。
例えば
index.html
index.html.gz
という構成になっているとき、gzipサポートされたブラウザでアクセスすればindex.html
ではなくindex.html.gz
が表示され、gzipがサポートされていなければindex.html
が表示されます。
つまりgzipサポートされたブラウザからアクセスする限りにおいてはindex.html
は空でもよい、ということになります。
ただしindex.html
が不要というわけではなく、存在しない場合は404エラーとなります。
.gitlab-ci.yml
というわけで以下のような.gitlab-ci.yml
でGitlab PagesをデプロイすればOKです。
find ...
にてデプロイする全コンテンツをgzip圧縮し、ダミーの空ファイルを生成しています。
pages:
script:
- mkdir -p public
- touch public/large.html
- find public/* -type f | xargs -I {} sh -c "gzip {}; touch {}"
artifacts:
paths:
- public
単に空ファイルにするのではなくエラーメッセージ的なものを入れておいた方が後々混乱しにくいでしょう。
(下記の通りcurl
で取りに行くと空ファイルが返ってきてびっくりするかもしれません)
curl
/wget
での取得
gzip非対応のブラウザというのはもはや想定しなくていい気がしますが、curl
/wget
はデフォルトではgzipを受け取りません。そのため以下のようにAccept-Encoding:gzip
ヘッダを明示的に付けるか直接.gz
ファイルを取りに行く必要があります。
> wget --header="Accept-Encoding:gzip" -O index.html.gz http://.../index.html
> curl -H "Accept-Encoding:gzip" -o index.html.gz http://.../index.html
> wget -O index.html.gz http://.../index.html.gz
> curl -o index.html.gz http://.../index.html.gz