0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Webサーバーを構築してみた

Posted at

始まり

現在、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では複数アプリやサイトをまとめるとコストを削減できます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?