Dockerを用いたローカル環境にWebサーバー(nginx)を設置

内容

前回既存のRailsアプリにDockerを導入したが、Webサーバーも設置することにしたのでまとめる

現状

ここにwebコンテナ(nginx)を設置する(ちなみにappサーバーはpumaを設置)

手順1 必要なファイルを作成

既存アプリケーションのルートディレクトリにnginx_dockerフォルダを作成し、その配下にDockerfileとnginx.confファイルを作成

手順2 Dockerfileの編集

app用とnginx用のDockerfileを編集(app用は前回のそのまま)
※ここからアプリ名をmyappとして記述している
Dockerfile

FROM ruby:2.6.5
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update -qq && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    yarn
WORKDIR /myapp
COPY Gemfile ./Gemfile
COPY Gemfile.lock ./Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]

nginx_docker/Dockerfile

FROM nginx:1.21.3

# インクルード用のディレクトリ内を削除
RUN rm -f /etc/nginx/conf.d/*

# Nginxの設定ファイルをコンテナにコピー
ADD nginx.conf /etc/nginx/conf.d/myapp.conf

# ビルド完了後にNginxを起動
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

手順3 nginxの設定ファイル

nginx.conf

# プロキシ先の指定
# Nginxが受け取ったリクエストをバックエンドのpumaに送信
upstream myapp {
  # ソケット通信したいのでpuma.sockを指定
  server unix:///myapp/tmp/sockets/puma.sock;
}

server {
  listen 80;
  # ドメインもしくはIPを指定
  server_name localhost [or example.com or 192.168.xx.xx];

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  # ドキュメントルートの指定
  root /myapp/public;

  client_max_body_size 100m;
  error_page 404             /404.html;
  error_page 505 502 503 504 /500.html;
  try_files  $uri/index.html $uri @myapp;
  keepalive_timeout 5;

  # リバースプロキシ関連の設定
  location @myapp {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://myapp;
  }
}

手順4 docker-compose.ymlの編集

前回railsコンテナをwebと定義していたがそれをappに変更し、nginxコンテナをwebと定義する
docker-compose.yml

version: '3'
services:
  # Nginxコンテナ定義
  web:
    build:
      context: ./nginx_docker
    volumes:
      - public-data:/myapp/public
      - tmp-data:/myapp/tmp
    ports:
      - 80:80
    depends_on:
      - app
  # Railsコンテナ定義
  app:
    build: .
    command: bundle exec puma -C config/puma.rb
    environment:
      - MYSQL_HOST=${MYSQL_HOST}
      - MYSQL_USERNAME=${MYSQL_USERNAME}
      - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD}
    volumes:
      - .:/myapp
      - public-data:/myapp/public
      - tmp-data:/myapp/tmp
      - log-data:/myapp/log
    depends_on:
      - db
    tty: true
    stdin_open: true
  # MySQLコンテナ定義
  db:
    image: mysql:5.6.51
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
    ports:
      - "4306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  public-data:
  tmp-data:
  log-data:
  mysql-data:

手順5 puma.rbの編集

puma.rbの最下部に以下の記述を追加
bind "unix://#{app_root}/tmp/sockets/puma.sock"の部分は、nginx.confのserverと一致するようにする
config/puma.rb

app_root = File.expand_path("../..", __FILE__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"

stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

手順6 database.ymlの編集

Railsはデフォルトで、localhost上でDBが動作するようになっているので、hostを先ほど作成したdbに変更
また、ここにおける「MYSQL_USER」と「MYSQL_PASSWORD」はDBファイルで定義した環境変数名を設定
database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV.fetch('MYSQL_USER') { 'root' } %>
  password: <%= ENV.fetch('MYSQL_PASSWORD') { 'password' } %>
  host: db

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

手順7 イメージを作成

docker-compose.ymlで、web・app・dbのbuildに指定されているDockerfileを元にイメージを作成
ターミナル

% docker-compose build

手順8 コンテナを起動

以下のコマンドでコンテナを立ち上げ、コンテナが起動しているのかを確認
ターミナル

% docker-compose up -d
% docker-compose ps

手順9 データベースの作成、マイグレーションファイルの読み込み

最後に以下のコマンドでデータベースの作成とマイグレーションファイルの読み込みをする
ターミナル

% docker-compose exec app rails db:create db:migrate

コンテナの停止・削除をしたい時

以下のコマンドを実行
ターミナル

# 停止したい時
% docker-compose stop

# 停止・削除したい時
% docker-compose down

# volumeも一緒に削除したい時(MySQLのデータもすべて消えるので注意!)
% docker-compose down -v

docker-composeによる各種ファイルの変更時

内容

docker-composeによるコンテナ構成後、各種ファイルを変更した時の反映方法についてまとめる

docker-compose.ymlの変更時

  • イメージ:再構築の必要なし
  • コンテナ:再構築の必要あり
    →docker-compose up -d

Dockerfileの変更時

  • イメージ:再構築の必要あり
    →docker-compose build
  • コンテナ:再構築の必要あり
    →docker-compose up -d

ソースコード等の変更時

  • イメージ:再構築の必要あり
    →docker-compose build
  • コンテナ:再構築の必要あり
    →docker-compose up -d

既存のRailsアプリにDockerを導入

内容

すでにRailsアプリを作成している段階でDockerも導入したいと考えたので、アプリ作成後からDockerを導入する方法についてまとめる

バージョン

基礎知識

  • Dockerfileとは
    →Docker imageの設計図で、DockerfileからDocker imageを作る
    →INSTRUCTION argumentsの形で書いていく
  • FROM(instruction)
    →ベースとなるイメージを決定
    →DockerfileはFROMから書き始める
  • RUN(instruction)
    Linuxコマンドを実行
    →RUNを使うことで好きなようにカスタマイズ
    →RUN毎にImage Layerが作られる(RUNをずらっと書いていくとLayerの数が膨大になりimageが大きくなってしまう)
  • imageのLayer数を最小限にするには?
    →Layerを作るのはRUN、COPY、ADDの3つ
    →コマンドを&&で繋げる
    →バックスラッシュ(\)で改行する
  • $apt-get
    →$apt-get update:新しいパッケージリストを取得、$apt-get install をインストール
  • CMD(instruction)
    →コンテナのデフォルトのコマンドを記述
    →CMD["executable", "params1", "params2"]
    →原則Dockerfileの最後に記述
    →RUNはLayerを作る、CMDは作らない
  • COPYとADD(instruction)
    →単純にファイルやフォルダをコピーする場合はCOPYを使う
    →tarの圧縮ファイルをコピーして解凍したい時はADDを使う(大きいファイルの時)
  • CMDとENTRYPOINT(instruction)
    →ENTRYPOINTでもデフォルトのコマンドを指定することができるが、run時に上書きできない
    →ENTRYPOINTがある場合は、CMDは["params1", "params2"]の形を取る
    →コンテナをコマンドのように使いたい時に使う
  • ENV(instruction)
    環境変数を設定する
  • WORKDIR(instruction)
    →Docker instructionの実行ディレクトリを変更する
  • docker compose
    →複数のコンテナを簡単にrunできるDockerのツール
    →docker runコマンドが長くなる時や、複数のコンテナをまとめて起動する時に使う

手順1 DockerHubの登録とDockerのインストール

  • DockerHubのHPでサインアップ
  • 無料の枠を選択
  • メールが送られてくるのでログイン
  • 「Download the desktop application」でDocker Desktopをダウンロード
  • Docker.dmgがダウンロードできたらダブルクリックし、インストール→アプリケーションフォルダに移動

手順2 Dockerfileを作成

既存アプリケーションのルートディレクトリにDockerfileを作成し、下記のように記述
※今回はアプリのディレクトリ名をsample_appとする
Dockerfile

FROM ruby:2.6.5
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update -qq && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    yarn
WORKDIR /sample_app
COPY Gemfile ./Gemfile
COPY Gemfile.lock ./Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /sample_app
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]

手順3 docker-compose.ymlを作成

手順2同様にルートディレクトリにdocker-compose.ymlを作成し、下記のように記述
docker-compose.yml

version: '3' #docker-composeのバージョン
services:
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/sample_app
    ports:
      - 3000:3000
    depends_on:
      - db
    tty: true
    stdin_open: true
  db:
    image: mysql:5.6.51 #既存アプリとあわせる。ターミナルに[$ mysql --version]で確認
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} #あなたのパスワード
      MYSQL_DATABASE: root
    ports:
      - "4306:3306"
    volumes:
      - ./mysql-confd:/etc/mysql/conf.d
volumes:
  mysql-data:

手順4 config/database.ymlの編集

configディレクトリにあるdatabase.ymlを下記のように編集
config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: <%= ENV.fetch("DATABASE_PASSWORD") %> #あなたのパスワード
  socket: /tmp/mysql.sock
  host: db

development:
  <<: *default
  database: sample_app_development

test:
  <<: *default
  database: sample_app_test

手順5 .envファイルに環境変数を設定し、.gitignoreに.envを追加

手順6 entrypoint.shを作成

手順2、3同様にルートディレクトリにentrypoint.shを作成し、下記のように記述
entrypoint.sh

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /sample_app/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

手順7 Dockerイメージの作成

ターミナルで下記のコマンドを実行し、Dockerイメージを作成
ターミナル

sample_app% docker-compose build

手順8 Dockerコンテナを起動

ターミナルで下記のコマンドを実行し、Dockerコンテナを起動 ターミナル

sample_app% docker-compose up -d

手順9 コンテナ内にデータベースを作成する

ターミナルで下記のコマンドを実行し、コンテナ内にデータベースを作成 ターミナル

sample_app% docker-compose run web rails db:create

手順10 作成したデータベースのマイグレーションを実行

ターミナルで下記のコマンドを実行し、データベースのマイグレーションを実行 ターミナル

sample_app% docker-compose run web rails db:migrate

手順11 Gemのインストール(これいらないかも)

ターミナルで下記のコマンドを実行し、Gemをインストール ターミナル

sample_app% docker-compose exec web bundle install

以上で導入完了
localhost:3000に接続するとアプリケーションが表示される(rails sはいらない)

エラー1

手順9のコマンド実行時、以下のエラーが出現
ターミナル

Creating sample_app_web_run ... done
warning Integrity check: System parameters don't match                                                    
error Integrity check failed                                                                              
error Found 1 errors.                                                                                     


========================================
  Your Yarn packages are out of date!
  Please run `yarn install --check-files` to update.
========================================


To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).


yarn check v1.22.5
info Visit https://yarnpkg.com/en/docs/cli/check for documentation about this command.


ERROR: 1

yarnのパッケージの中に古いものが存在していることが原因のようなので、以下のコマンドを実行してyarnをアップグレードしてみた
ターミナル

% yarn upgrade

しかし同じようなエラーが出たので、再度エラーを確認
ターミナル

To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).

上記のようなエラーが出ていたため、「config/webpacker.yml」ファイルのcheck_yarn_integrity箇所をfalseに変更すれば良いと解釈して、実際に変更してみる
config/webpacker.yml

# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
check_yarn_integrity: false

上記で解決した

DBサーバーを構築(AWS、RDS)

内容

AWSでDBサーバーを構築する

基礎知識

  • RDS
    →フルマネージドなリレーショナルデータベースのサービス(AWSが運用管理までしてくれる)
    →オンプレミス(自分でDBサーバーを構築)やOn EC2(EC2上にMySQLをインストールしDBサーバーとして運用)よりも、構築や運用の手間が軽減され、コア機能の開発に注力できるというメリットがある
    →高い可用性(複数のアベイラビリティゾーンにマスターとスレイブを設計し、マスターの接続ができなくなった時でもスレイブが動く)

DBサーバーを構築

1. プライベートサブネットを作成

2. RDSを設置(作成準備)

  • DB用のセキュリティグループを作成
  • EC2ダッシュボードでセキュリティグループタブを開く
  • セキュリティグループの作成→セキュリティグループ名と説明を入力、VPCは作成したもの→インバウンドルールで追加→タイプ「MySQL/Aurora」、ソース「作成した〜-webのセキュリティグループ」(Webサーバーのインスタンス)→作成
  • RDSのダッシュボードでサブネットグループタブを開く
  • DBサブネットグループの作成→名前と説明を入力、VPCを関連付け→アベイラビリティゾーンで1aと1c、サブネットもプライベートの番号の方を2つ選択→作成
  • パラメーターグループタブを開く
  • パラメーターグループを作成→パラメーターグループファミリー「mysql8.0」、名前と説明を入力→作成
  • オプショングループタブを開く
  • グループを作成→名前と説明はパラメーターグループと同じにし、エンジンは「mysql」、メジャーエンジンバージョンは「8.0」→作成

3. RDSを設置(作成)

  • RDSダッシュボードでデータベースタブを開く
  • データベースの作成→エンジンのオプションは「MySQL」の最新バージョンを選択→テンプレートは今回は「無料利用枠」→DBインスタンス識別子は「〜-web」→マスターユーザー名とパスワードを設定→ストレージの自動スケーリングは無効にしておく→接続は自身で設定したものを選択、パブリックアクセスはなし、セキュリティグループは「既存のdbの方」、アベイラビリティゾーンは「1aの方」→データベースポートは「3306」→追加設定でDB パラメータグループとオプショングループを設定、バックアップは有効にし長めに設定しておく→あとはマイナーバージョン自動アップグレードの自動化だけチェック→作成
    ※自動スナップショットは設定期間が過ぎると消える(RDSインスタンスを削除しても一緒に削除される)が、手動で取得したスナップショットは削除されない(RDSインスタンスを削除しても)→存在していると料金がかかるのでRDSインスタンスを削除した際は、スナップショットも削除する
    ※RDSインスタンスの停止は、本番環境ではしない方が望ましい

4. WebサーバーからRDSに接続

ターミナル

[ec2-user@ip-〜]$ sudo yum -y install mysql
  • RDSダッシュボードでデータベースを開く
  • 作成したDBを開き、エンドポイントをコピー

ターミナル

[ec2-user@ip-〜]$ mysql -h エンドポイント -u root(マスターユーザー名) -p
Enter password:

exit;
# 終了

次回

通信について

ドメインを登録(AWS、Route53)

内容

AWSドメインを登録する

基礎知識

ドメインの登録

1. ドメインの購入

  • 迷ったら「お名前.com」で購入しておけば無難
  • お名前.comから指定したドメイン名で購入する
  • 1年目はキャンペーン等で安くなっていることが多いが、2年目からの料金もチェックしておくことが大事
  • 購入後はドメイン設定から、自動更新設定を解除しておく

2. Route53でDNSを設定

ターミナル

# ネームサーバーを調べる
[ec2-user@ip-〜]$ dig ドメイン名 NS +short
  • ネームサーバーをお名前.comからRoute53に変更
  • お名前.comのHPにログインし、ドメイン一覧→ネームサーバー→他のネームサーバーを利用をクリック
  • ネームサーバーをRoute53のNSで表示されていた値に変更(最後の.は入力しなくてよい)→設定
  • 設定完了まで数日かかるので、後でネームサーバーが変更できているかターミナルでコマンド入力して確認しておく
  • Route53のダッシュボードに戻る
  • レコードセットの作成→値にパブリックIPアドレスを入力→作成

次回

DBサーバーを構築

Webサーバーを構築(AWS、EC2)

内容

EC2でWebサーバーを構築する

基礎知識

  • EC2(Elastic Compute Cloud)
    AWSクラウド上の仮想サーバー
    インスタンスとはEC2から立てられたサーバーのこと
  • AMI(Amazon Machine Image)
    インスタンス起動に必要な情報が入ったOSのイメージ、サーバーのテンプレートのようなもの
  • インスタンスタイプ
    →サーバーのスペックを定義したもの
    →アクセス数等に応じて必要なスペックのタイプを選択し、スペックにより料金が異なる
  • ストレージ
    →サーバーにくっつけるデータの保存場所
    →EC2のストレージには、EBS(Elastic Block Store)とインスタンスストアの2種類ある
  • Elastic IP
    AWSから割り振られた固定の「パブリックIPアドレス」のこと
    →このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタンスの起動・停止にかかわらず常に同じIPアドレスで通信をすることが可能となる
  • SSH
    →サーバーと自分のパソコンをセキュアに繋ぐサービスのこと(EC2にログインする時はSSHを使用する)
    →通信内容が暗号化された遠隔ログインシステム
  • ポート番号
    →プログラムのアドレスで、同一コンピューター内で通信を行うプログラムを識別する時に利用される(住所でいう部屋番号みたいなもの)
  • ウェルノウンポート番号
    →代表的なプログラムが使うポート番号で、0〜1023までの整数値をとる
    例)SSHは22番、SMTPは25番、HTTPは80番、HTTPSは443番
  • 動的に決まる番号
    →49142〜65535までの整数値をとる
  • ファイアウォール
    →ネットワークを不正アクセスから守るために、「通してよい通信だけを通して、それ以外は通さない」機能の総称
    AWSでは、セキュリティグループがファイアウォールの役割を担っている
  • yumコマンド
    Linuxにおけるソフトウェア管理の仕組みで、MacOSにとってのhomebrewと同じ役割を果たす
    yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできる
  • パッケージ
    →LinuxOS下におけるある役割/機能をもったプログラムの集合のことで、「ソフトウェア」や「ライブラリ」とも呼べる
  • -yワイオプション
    yum install などのコマンドでは、本当にインストールして良いのか [y/n](「Yes or No」の意味)が問われるので、あらかじめオプションで「-y」を設定する事で「すべての問いにYesで自動的に答える」という設定してコマンドを実行している

Webサーバーの構築

1. EC2インスタンスを設置

  • EC2を開き、インスタンスを選択
  • インスタンスを起動
  • AMIを選択→クイックスタートからAmazon Linux 2を選択
  • インスタンスタイプの選択→無料利用枠のt2.microを選択
  • インスタンスの詳細の設定→ネットワークは設定したpvc、サブネットはpublic、自動割り当てパブリックIPは有効、キャパシティの予約はなし、ネットワークインターフェイスのプライマリIPを設定したIPアドレスの範囲内で設定
  • ストレージの追加
  • タグの追加→キーを「Name」、値を任意で設定
  • セキュリティグループの設定→セキュリティグループ名を先ほど設定した値とする→確認と作成
  • インスタンス作成の確認→起動
  • キーペアを作成→新しいキーペアの作成からキーペア名を任意でを設定→キーペアのダウンロード→インスタンスの作成

2. Elastic IPを作成

さきほど作成した「EC2インスタンス」には作成時にIPアドレスが自動で割り振られている、これを「パブリックIP」と言う
しかし、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点を持っていて、IPが変わってしまうと、設定ファイル等をその都度書き換えなければならない
これを解決してくれるのが「Elastic IP」
インスタンスが停止していても、Elastic IPアドレスが複数存在する場合は料金が発生するため、インスタンスを停止するときには、そのインスタンスと紐づいているElastic IPアドレスも解放する必要がある

  • Elastic IPタブを開き、Elastic IP アドレスの割り当てをクリック
  • AmazonIPv4 アドレスプールにチェックが入ってることを確認後、割り当てをクリック
  • 取得したElastic IPアドレスとEC2インスタンスを紐付け→右上にあるアクションをクリックし、Elastic IP アドレスの関連付けを選択
  • インスタンスにチェックが入っていることを確認→インスタンスの入力欄をクリックし、表示されたインスタンスIDを選択→関連付けるをクリック
  • Elastic IPが設定されているか確認

3. ファイアウォールを設定

  • 現状SSH以外ではWebサーバーにアクセスできない
  • EC2ダッシュボードのインスタンス→セキュリティ→セキュリティグループ→インバウンドルールの編集
  • ルールの追加→タイプ「HTTP」、ソース「0.0.0.0/0」と「::/0」→保存

4. Apacheをインストール

  • SSHでサーバーにログイン

ターミナル

% cd ~

% mkdir ~/.ssh
# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進む

% mv Downloads/ダウンロードした鍵の名前.pem .ssh/
# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.sshディレクトリに移動する
# 「ダウンロードした鍵の名前」の部分は、Finderでダウンロードフォルダから「〜.pem」というファイルを探し、「〜」の部分の名前に置き換える

% cd .ssh/

% ls
# pemファイルが存在するか確認

% chmod 600 ダウンロードした鍵の名前.pem
# 「ダウンロードした鍵の名前」はFinderのダウンロードフォルダから探す

% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスに紐付けたElastic IP
# 「作成したEC2インスタンスに紐付けたElastic IP」は自身のものに編集
  • Elastic IPを設定していない場合は以下の通りパブリック IPv4 アドレスをコピーして記述する
  • マネジメントコンソールでEC2ダッシュボードのインスタンスを選択
  • 作成したインスタンスのパブリック IPv4 アドレスをコピー
  • 初めてログインするサーバーの場合信頼できるかyes/noで聞かれるため、yesとうつ
    ssh接続は、一定時間操作をせずにいるとタイムアウトしてしまう、その場合は「ssh -i 〜」のコマンドを再度実行することでサーバーに接続できる
  • 何も作業がない時は「exit」でログアウトしておく
  • 再度ログイン(ssh -i 〜)
  • sudo lsof -i -n -Pコマンドで右端のNAME欄で、LISTENを書かれているものが受け入れているポート番号
  • Apacheをインストール

ターミナル

# パッケージをアップデート
[ec2-user@ip-10-0-10-10 ~]$ sudo yum update -y

# Apacheをインストール
[ec2-user@ip-10-0-10-10 ~]$ sudo yum -y install httpd

# Apacheを起動
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl start httpd.service

# 起動しているか確認
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl status httpd.service

# その他の確認方法
[ec2-user@ip-10-0-10-10 ~]$ ps -axu

# サーバー起動時にApacheも起動されるように設定
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl enable httpd.service

# 自動起動できているか確認
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl is-enabled httpd.service

以上でWebページを表示するところまで実装

5. 使用しない時は無料枠を超えないように設定変更

次回

ドメインを登録

ネットワークを構築(AWS)

内容

AWSのネットワークについて

基礎知識

  • リージョン
    AWSの各サービスが提供されている地域のこと
     基本アメリカが最先端のサービスを提供するが、日本にいるなら東京を選択するのが良い)
  • アベイラビリティゾーン
    →独立したデータセンターのこと
  • VPC(Virtual Private Cloud)
    AWS上に仮想ネットワークを作成できるサービス
  • サブネット
    VPCを細かく区切ったネットワーク
    →パブリックサブネットはインターネットから接続できて、プライベートサブネットはインターネットから接続できない
  • IPアドレス
    →ネットワーク上の機器を識別するためのインターネット上の住所
  • パブリックIPアドレス
    →インターネットに接続する際にしようするIPアドレス
    →重複すると正しく通信できなくなるのでICANNという団体が管理しており、プロバイダーやサーバー事業者から貸し出される
  • プライベートIPアドレス
    →インターネットで使用されないIPアドレス
    →決められた範囲内のアドレスを自由にしようすることができる

ネットワーク構築

1. VPC作成

  • リージョンを東京に設定(画面右上)
  • IAMユーザーでVPCを開く
  • 新規作成
  • nameとIPv4 CIDR ブロックを設定し、VPCを作成

2. サブネットを作成

  • IAMユーザーでサブネットを開く
  • 新規作成
  • 先ほど作成したVPCを選択し、name、アベイラビリティゾーン、IPv4 CIDR ブロックを設定
  • 同じ手順でパブリックサブネットとプライベートサブネットを作成

3. ルーティングを設定

  • IAMユーザーでインターネットゲートウェイを開く
  • 新規作成
  • nameを設定
  • VPCにアタッチ
  • IAMユーザーでルートテーブルを開く
  • 新規作成
  • nameとVPCを設定し、作成
  • 作成したルートテーブルで、「サブネットの関連付け」タブを開き、編集をクリック
  • public-subnetを選択し、保存
  • 作成したルートテーブルで、「ルート」タブを開き、編集をクリック
  • ルートの追加で、デフォルトルートをインターネットゲートウェイに設定し、保存
    以上により、パブリックサブネットからインターネットに接続できるようになる

考慮するポイント

  • プライベートIPアドレス範囲から指定する
    VPCでは仮想のプライベートネットワーク空間を作成するので、プライベートIPアドレスの使用が推奨
  • 作成後は変更できないので、大きめに設定
    →大きさは/28〜/16だが、/16が推奨
  • オンプレミスや他VPCのレンジと重複しないように注意
    →相互接続する可能性がある場合は、重複しないように設計
  • 異なるシステムの場合はアカウントを分ける
    →異なるシステムを同一アカウントで管理すると煩雑になる
  • サブネットの設計は、将来に必要なIPアドレス数を見積もって設定
    →/24が標準的

次回

Webサーバーを構築