こんにちは、なかにしです。
今回は、ちょっとインフラ寄りになります。
最近はインフラまわりも触ることが多く、自分の知識不足を痛感してます😂
趣味の範疇ですが、「自宅に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!!