LoginSignup
1
1

More than 5 years have passed since last update.

Docker で AngularアプリをビルドしてAWS S3へデプロイする

Last updated at Posted at 2019-03-26

やりたい事

  1. git repo からソースを clone する(複数の repo を clone する必要がある)
  2. それは Angular のアプリなので、 ng --prod build する
  3. ビルドされたアプリのファイル群を aws cli を使って S3 にアップロードする

Dockerfile

AWS CLIをDocker環境で実行する で紹介されていた Dockerfile に、 node と Angular をインストールするスクリプトを追加したものです。

FROM python:3.6

ARG pip_installer="https://bootstrap.pypa.io/get-pip.py"
ARG awscli_version="1.16.76"

# Install awscli
RUN pip install awscli==${awscli_version}

# Install sam
RUN pip install --user --upgrade aws-sam-cli
RUN mkdir /data
RUN chmod -x /data

# Install nodejs
RUN apt-get update 
RUN apt-get install curl software-properties-common -y
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install nodejs

# Install angular
RUN npm install -g @angular/cli@7.3.6

ENV PATH $PATH:/root/.local/bin

実行スクリプト

次に Docker 内で実行するスクリプトです。
ファイル名は Deploy.sh としておきます。

#!/bin/sh

# Setup git user/password
echo -e "machine $GIT_DOMAIN\nlogin $GIT_USER\npassword $GIT_PW" > ~/.netrc

# Create work directory
mkdir work
cd work

# Clone projects
git clone -b $GIT_BRANCH https://xxxx/my-awesome-lib.git
git clone -b $GIT_BRANCH https://xxxx/my-awesome-app.git

# Restore node_modules
cd my-awesome-lib
npm ci
cd ..

# Build angular prod
cd my-awesome-app
npm ci
ng --base-href=./ --prod build

# Deploy to S3
aws s3 sync ./dist/my-awesome-app/ s3://my-awesome-bucket/www --acl public-read

冒頭で言ったように、複数のリポジトリから Clone する必要があるプロジェクトです。
また Private なので user/password が必要ですが、どうせ docker コンテナは使い捨てだし .netrc でいっか、と思ってますがどうなんでしょう?

clone した後、それぞれのディレクトリに移動して npm ci をして node_modules を復元します。

その後、Angular アプリをビルド (ng --prod build)します。

最後に、 s3 sync で AWS S3 の指定バケットにアップロードしています。--acl public-read は、誰でも閲覧できるサイトにするために付けています。

必要な環境変数

Dockerコンテナ内で、次の環境変数が必要です。

  • Git アクセス
    • GIT_DOMAIN - git リポジトリのドメイン
    • GIT_USER - git ユーザー
    • GIT_PW - ↑のパスワード
    • GIT_BRANCH - 取得する branch 名
  • AWS S3 アクセス
    • AWS_ACCESS_KEY_ID - S3 への書込権限を持った IAMユーザーのアクセスキー
    • AWS_SECRET_ACCESS_KEY - ↑のシークレットキー
    • AWS_DEFAULT_REGION - リージョン(S3 だから要らないかも)

これらの値は、後述の docker run する時に渡します。

Docker イメージのビルドとコンテナの実行

Docker イメージのビルド

Dockerfile のあるディレクトリで、以下のコマンドを実行します。

docker build -t aws-angular .

docker images で aws-angular が作成されていれば成功です。

コンテナ実行スクリプト

実行スクリプトファイル Deploy.sh があるディレクトリで、以下のコマンドを実行します。
環境変数に入れる値はそれぞれ準備してください。

docker run -it \
 -e AWS_ACCESS_KEY_ID=xxxx \
 -e AWS_SECRET_ACCESS_KEY=xxxxxxx \
 -e AWS_DEFAULT_REGION=ap-northeast-1 \
 -e GIT_DOMAIN=your.repo.com \
 -e GIT_USER=your_user_id \
 -e GIT_PW=your_password \
 -e GIT_BRANCH=master \
 -v $(pwd):/data \
 aws-angular sh /data/deploy.sh

これを実行すると、

  1. git repo からソースを clone する(複数の repo を clone する必要がある)
  2. それは Angular のアプリなので、 ng --prod build する
  3. ビルドされたアプリのファイル群を aws cli を使って S3 にアップロードする

が順次実行されます。

参考

1
1
0

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