技術系

Webサーバであそぶ

技術系

こんにちは、なかにしです。

今回は、ちょっとインフラ寄りになります。
最近はインフラまわりも触ることが多く、自分の知識不足を痛感してます😂

趣味の範疇ですが、「自宅にWebサーバとアプリケーションサーバを立てて一般公開する」というエンジニアとしてのチュートリアル的な作業も無事完了しました。

その中で使用したWebサーバ、「nginx」について軽く触れようと思います。

いってみよう!

Webサーバとアプリケーションサーバ

そもそもどういう構成でアプリをみんなに使えるようにするの?
という部分が分かっていなかったので、調べました。

以下のサイトの図が分かりやすかったので、引用させていただきます。
uWSGI入門

(今回はDjangoというpythonのFWでアプリを作成しました)

WebサーバはWebページやWebアプリケーションを配信するサーバです。
認証やレスポンス速度向上の役割も持ちます。

Webサーバを配置することで、メリットが沢山あります。
特にイイネ!と思うメリットは以下の2点です。
①レスポンスが早くなる
②SSL/TLSによる暗号化

①ですが、静的ファイルが欲しいならすぐ返すよ、と設定すれば
アプリケーション側にリクエストを流さず、そのまま静的ファイルを返します。

「https://nakanishi-s.jp」というリクエストが来たら「index.html」を返す、
みたいな設定をwebサーバーに入れることで実現できます。

②ですが、Webサーバには証明書を配置することができます。
SSLやTLS証明書をおくことで、Httpsプロトコルが使用できます。

▽アクセスしたときにこれが出ます

Webサーバを起動してみる

趣味で作成したアプリの方は一般公開している(=本番環境で動かしている)のでnginxを直接インストールして設定をしましたが、今回はお遊びなので、Dockerを使用して仮想環境で動かします。

Dockerfileとdocker-compose.ymlを用意します。

Dockerfileだけでもいいのですが、
スケールすることを考えてdocker-compose.ymlも作成しちゃうことが多いです。

今回は以下の構成にしました。
Dockerfileやdocker-compose.ymlのパスは構成に合わせて変更してください。

FROM nginx:latest

COPY ../html/index.html /usr/share/nginx/html
version: '3.8'
services:
  sample:
    build:
      context: ../
      dockerfile: ./docker-nginx/Dockerfile
    ports:
      - "2000:80"
<!DOCTYPE html>
<html lang="ja">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>

  <body>
    <p>nice</p>
  </body>

</html>

※service名は「web」、portは「80:80」の方が望ましいです。
どこに何を設定するとどうなるかを確認する為、個人で動かす場合はわざと変えてます。

準備ができたら、docker-compose.ymlがある場所まで移動し、コンテナを立ち上げます。

docker compose up -d

▽立ち上がりました。

localhost:2000にアクセスすると、index.htmlの内容が表示されました。

nginxが、index.htmlを返してくれています。
嬉しいですね。

nginx側に設定入れてないのに、自動でindex.htmlが表示された!と驚きましたが、
これはnginxがデフォルトで「/usr/share/nginx/html」内に配置されたhtmlを「デフォルトのホームページ」として扱うからです。

Dockerfileで「/usr/share/nginx/html」内にこちらで用意した「index.html」を配置したので、自動で表示されたわけですね。嬉しいです。

さいごに

いかがでしたでしょうか?

今回は触りの部分しかご紹介しませんでしたが、
設定ファイルにコードを追記することで本当に色々なことが出来ます。

このあたりも触れるようになれば、安く個人サービスをリリースできるのでオススメです!

今までは
①ドメイン取得(100円 / 月)
②Webサーバ & アプリケーションサーバ (400円 / 月)

でしたが、②がなくなるので、100円 / 月程度で個人サービスがリリースできます!
(サーバー起動中の電気代などが増えるので実質は150円 / 月程度かな?)

あとは自宅で個人サービスを運用しているという経験も手に入ります。
これが一番価値がありますね。

今回はここまで!
Enjoy Hacking!!