始まり
現在、githubaction で構築されているものを実際の環境にデプロイする。
環境
項目 | 使用したもの |
---|---|
サーバー | AWS |
OS | Ubuntu |
webサーバー | nginx |
AWSの設定
アカウントの開設は省略します
EC2インスタンスの設定
OSは無料なので、Ubuntuを使用しました。
特に設定するものはないので、デフォルトのもので設定しました。
しかし、AWSはデフォルトでインバウンドルール(サーバーへの接続)で接続が拒否されています。
なので、接続を許可する必要があります。
インバウンドルールの設定
設定するものは、http,https,icmp,sshです。
プロトコル | ポート番号 | 許可するもの | 説明 |
---|---|---|---|
ssh | 22 | マイip | サーバーに接続し、設定を行う |
http | 80 | 0.0.0.0 | webサーバーのリクエスト受付 |
https | 443 | 0.0.0.0 | httpと基本的には同じだが、暗号化されている |
icmp | 0.0.0.0 | 疎通確認を行うため |
sshは基本的にマイIPなどに制限したほうが安全です。
サーバーの接続(ssh)
今回は、macで接続をします。
ターミナルで操作を行います。
公開鍵が保存されている場所(~/.sshなど)で以下コマンドを入力。
ssh -i "key" ubuntu@0.0.0.0
ssh -i "公開鍵" ユーザー名@ipアドレス
左側にユーザー@ipアドレスが表示されれば接続成功です。
サーバー環境構築
今回は、静的サイトを立ち上げるので、高速に処理できるnginxを採用します。
nginxのインストール
下記コマンドを入力
apt update
apt install nginx
動作確認
まず、nginxを起動します。
sudo systemctl start nginx //サービスの起動
sudo systemctl status nginx //確認
nginxが動作しているか確認を行います。
ブラウザでhttp://サーバーのipアドレス
で「welcome to nginx」と表示されれば接続成功です。
接続出来ない場合は、サーバーの疎通確認を行います。
ターミナルを立ち上げ下記コマンドを入力。
ping -c 5 サーバーのipアドレス
//5回接続を試します。
疎通確認ができれば、nginxの設定が間違っているか、httpのインバウンドルールが間違って可能性があります。
確認できない場合は、nginxが立ち上がっていないか、インバウンドルールが間違っている可能性があります。
githubからclone
コードはgithubで管理しているので、cloneする必要があります。
gitのインストール
まず、gitのインストールを行うために、下記コマンドを入力
apt update
apt install git
公開ディレクトリに移動
nginxは/var/www/htmlディレクトリに公開するものを配置します。デフォルトでは、htmlディレクトリがあります。
cd /var/www/html
cloneを行う
レポジトリーからコードをコピーするために下記コマンドを入力
git clone https://github.com/ユーザー名/レポジトリー
ドメインの設定
ドメインの取得は割愛します。
DNSサーバーはRoute53使用しました。
Aレコードに設定したいドメインを設定します。
nginx.confにドメインの設定を行います。
nginxの設定変更
このままだと、デフォルトのままです。
なので、cloneしたものを公開するように変更します。
設定ファイル
実際に保存されている場所に対しリンクつけします。
設定ファイルを開くために、下記コマンドを入力。
cd /etc/nginx
vi nginx.conf
nginx.confを編集
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ドメイン名;
root /var/www/html;
location / {
try_files $uri $uri/ =404;
}
location ~ /.well-known/acme-challenge/ {
allow all;
}
}
構文チェック
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
以上2個がでればOKです。
リンクの作成
リンクには、ハードリンクとシンボリックリンクがあります。
ハードリンクとは
コピーとは違い、ハードリンクから編集すると元のファイルも書き換わります。
ハードリンクの特徴
- ディレクトリのリンクを作成することができない
- 作成したリンクにアクセスしてファイルの編集が可能
- リンク先ファイルを削除してもアクセスできる
シンボリックリンクとは
リンク先は、元のファイルです。
流れは、直線的になります。
- ディレクトリのリンクを作成することが可能
- リンク先ファイルを削除するとアクセスできない
- リンク元ファイルのアクセス権限が摘要される
sudo ln -s /etc/nginx/sites-available/<your_domain> /etc/nginx/sites-enabled/
SSL証明書取得(https対応)
今回は、Let’s Encryptを使用しました。
ドメインを登録し、証明書を取得します。
まず、Certbot のインストールをします。
sudo apt update
sudo apt install certbot python3-certbot-nginx
証明書の取得
sudo certbot --nginx -d example.com #ドメイン名
動作テスト
ステータス確認
sudo systemctl status nginx
Active: がactive(running)の場合は、正常に動作しています。
ブラウザで動作確認
アクセスする場合はipアドレスを直打ちもしくはドメインを使用します。
httpの場合
http://example.com
http://ipアドレス
httpsの場合
https://example.com
https://ipアドレス
ドメインのみ接続できない場合は、DNSの問題の可能性が高いです。
両方接続できない場合は設定が間違っている可能性が高いです。
おわり
今回は静的サイトをデプロイしましたが、webアプリも公開することができます。
また、一つのサーバーで複数のドメインを登録できます。
AWSでは複数アプリやサイトをまとめるとコストを削減できます。