🐶
Docker環境で構築したアプリケーションをAWS EC2 にデプロイする方法
はじめに
ローカル環境でDockerを用いてFastAPIで作成したアプリケーションを作成していました
それを今回はAWS EC2を使ってデプロイする方法をご紹介します
前提
- Docker環境ですでに何かしらのアプリケーションを作成している
- Github上にプロジェクトがある
手順
インスタンス作成
-
EC2ダッシュボードに移動
-
インスタンスを起動
-
名前の入力
-
Amazon マシンイメージは Ubuntu を選択
-
インスタンスタイプ はt2.micro (今回は無料のt2.microにしました。規模に合わせて変えてください)
-
キーペア (ログイン) の設定(これはSSH接続できるようにするため)
- 新しいキーペアの作成をクリック
- 新しいキーペアの作成をクリック
-
Network settings
- SSH トラフィックを許可
- HTTPS トラフィックを許可
- HTTP トラフィックを許可(FastAPIがHTTPのみをサポートしているため)
作成したインスタンスに接続
- インスタンス一覧から接続したいインスタンスのインスタンスIDをクリック
- 「〇〇のインスタンス概要」から「接続」をクリック
- 「SSHクライアント」から接続
ディレクトリーをキーのところまで移動して以下を実行
cd [.sshがあるフォルダ]
chmod 400 "〇〇-key.pem"
ssh -i "〇〇-key.pem" ubuntu@ec2-〇〇-〇〇〇-〇〇〇-〇〇〇.ap-northeast-1.compute.amazonaws.com
Dockerのインストール (Ubuntuの場合)
パッケージリストを更新
sudo apt update
必要なパッケージをインストール
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
Dockerの公式GPGキーを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Dockerリポジトリを追加
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
パッケージリストを更新してDockerをインストール
sudo apt update
sudo apt install -y docker-ce
Dockerを起動して自動起動を有効にする
sudo systemctl start docker
sudo systemctl enable docker
現在のユーザーをdockerグループに追加
sudo usermod -aG docker ${USER}
グループの変更を反映するために新しいシェルを開く
newgrp docker
Docker Composeのインストール
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Githubにあるプロジェクトをcloneする
SSHキーを生成してGitHubに追加する
SSHキーを生成
ssh-keygen -t rsa -b 4096 -C "example@mail.com"
公開鍵の内容を表示
cat ~/.ssh/id_rsa.pub
Githubアカウントの設定
- GitHubにログインし、右上のプロフィールアイコンをクリックして「Settings」を選択。
- 左側のメニューから「SSH and GPG keys」を選択。
- 「New SSH key」ボタンをクリック。
- 適切なタイトルを入力し、公開鍵をペーストして「Add SSH key」をクリック。
リポジトリをクローン
cd ~
git clone あなたのプロジェクトのpassword-protected SSH key
cd あなたのプロジェクト
環境変数がある場合は設定
# .envファイルを作成
touch .env
# エディタで開く
vim .env
# 必要な環境変数を記入
Dockerコンテナをビルドして起動する
Dockerコンテナをビルド
docker-compose build
Dockerコンテナを起動(-d でログの非表示)
docker-compose up -d
Discussion