LoginSignup
0
1

More than 5 years have passed since last update.

Gitlab Pagesにgzip済ファイルをデプロイする

Last updated at Posted at 2018-02-26

はじめに

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
0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1