Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What is going on with this article?
@terapyon

Bitbucket Pipelines を使って、レポジトリが更新されたら、S3経由してHTML更新

More than 3 years have passed since last update.

構成要素

  • Bitbucket レポジトリ (git or hg)
  • Sphinxのドキュメンテーション
  • AWS S3 バケット (データ保存用)
  • Webサーバ(nginx) (Basic認証を行う)
  • Bitbucket Pipelines (レポジトリのPushをキーにSphinx build & S3にPush)
  • Dockerコンテナ Pipelineで使用するコンテナ

補足

Web静的ホスト・認証

AWS S3 には、静的Webホスティングの仕組みがありますが、Basic認証が掛けられないため、別途Webサーバを準備し、S3の静的ホスティングにリバースプロキシする。

S3の閲覧権限をIPアドレスで制限する。

つまり、IP制限のみならWebサーバを別途準備する必要はない。

Pipelines と Dockerコンテナ

Bitbucket Pipelinesは、最近正式にサービスが始まった、Bitbucket内のCI(継続インテグレーションサービス)です。

Pipelinesでは、Dockerコンテナを指定して、テストやディプロイなどを行います。

SphinxのHTMLビルドを実行し、S3にアップロードを行う都合の良いDockerコンテナが見つからなかったので作成しました。
terapyon/sphinx-s3

設定手順

AWS設定

  • IAMで新規ユーザ作成(アクセスキーなどを取得)
  • S3バケットを作る
  • 上記バケットに静的ホスティングを有効にする
  • 上記バケットのアクセス権限(IAMユーザのアップロード許可及び指定IPからの静的ホスティング閲覧許可) *1

*1: バケットのアクセス権限()

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::BUCKET-NAME/*", # <- BUCKET-NAME変更
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "0.0.0.0/32" # <- WebサーバのIPアドレス
                }
            }
        },
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::5260xxxxxxxxx:user/IAM-USER" # <- IAM-USER変更
            },
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::BUCKET-NAME" # <- BUCKET-NAME変更
        },
        {
            "Sid": "statement2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::5260xxxxxxxxx:user/IAM-USER" # <- IAM-USER変更
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::BUCKET-NAME/*" # <- BUCKET-NAME変更
        }
    ]
}

Webサーバ

  • nginxでプロキシーパスの設定
  • Basic認証の設定

nginx設定

server {
    listen 80;
    server_name SERVER-NAME; # <- SERVER-NAME変更

    charset utf-8;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    index index.html index.htm;

    location / {
        #Basic auth
        auth_basic  "Restricted Area.";
        auth_basic_user_file "/etc/nginx/.htpasswd";
        proxy_pass http://BUCKET-NAME.s3-website-ap-northeast-1.amazonaws.com/doc/; # <- BUCKET-NAME変更
    }
}

Bitbucket

  • レポジトリの設定で Pipelines を有効にする
  • bitbucket-pipelines.yml をレポジトリrootに設置
  • s3_website.yml をレポジトリrootに設置。これは今回の仕組み上必要な設定を入れるもので、Pipelinesに必須のものではありません。
  • Pipelines の Environment variablesS3_IDS3_SECRET を保存。(S3にアクセするための物)

Pipelines を有効化

Pipelinesを有効化.png

bitbucket-pipelines.yml

image: terapyon/sphinx-s3

pipelines:
  branches:
    master:
      - step:
          script:
            - pip install -r requirements.txt
            - make html
            - s3_website push

s3_website.yml

s3_id: <%= ENV['S3_ID'] %>
s3_secret: <%= ENV['S3_SECRET'] %>
s3_bucket: BUCKET-NAME # <- S3バケット名を指定

s3_endpoint: ap-northeast-1
s3_key_prefix: doc # <- S3フォルダ名を指定
site: build/html # <- レポジトリ上 or ビルド後の転送対象のフォルダを指定 

Environment variables

Environment_variables.png

自動ディプロイ

設定が完了すると、push時に自動的にS3にHTMLが転送され、Webサーバで閲覧可能

最後に

このエントリーは、Bitbucketの自動ディプロイ方法を解説をしました。

部分的に記載ミスが残っている可能性があります。ミスについてはご指摘いただけたら幸いです。

著者関連Blog記事とあわせてお読みください。

Bitbucket Pipeline で Sphinxドキュメント自動更新

11
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
terapyon
CMScom http://www.cmscom.jp の代表 PyCon JP代表理事 Plone Foundation member 他

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
11
Help us understand the problem. What is going on with this article?