はじめに
この記事はフィヨルドブートキャンプ Part 1 Advent Calendar 2022 - Adventarの6日目の記事です。
昨日はトミーさんの2年半無職→ハイブリッド出社のWebエンジニアになってから買ったものリストでした。
フィヨルドブートキャンプの今年のアドベントカレンダーはこちらです。
- フィヨルドブートキャンプ Part 1 Advent Calendar 2022 - Adventar
- フィヨルドブートキャンプ Part 2 Advent Calendar 2022 - Adventar
憧れてたんですよね、アドベントカレンダー。
FBCでもやってるよってことで勢いで参加しちゃいましたが、上手にアドベントできるかな!?
nginxの学習をしました
Fjord Boot CampのプラクティスでnginxをDebianにインストールしました。
次はVirtualHostを使って複数ドメインの登録の方法も学ぶことになるのですが、そのためには外部に公開するwebサーバーが必要になります。
これまで学んだ知識にちょっとプラスしたら、家で暇そうにしてるラズパイちゃんが自宅サーバーになるのでは?と考え挑戦してみることにしました。
やってみるとあちこちで躓き、nginx、ラズパイ(linux)、ルーター、ドメイン、ネームサーバーと複合的な知識が必要になるのでなかなかやりごたえのある内容でした。
以下、やったことの記録になります。
ちなみにですが、この記事ではnginxの設定ファイルの中身を公開していますので、プラクティスで今まさにそこをやっている方は注意してください。
そしてFBCのプラクティスでこの設定をそのまま提出すると再提出になりますのでそこも注意してください。
前提
お名前ドットコムでドメイン(今回はrira100000000.com)を取得しています。
今回使ったのはRaspberry Pi2 Bです。
最近のモデルと比べるとWi-Fiがなかったりするので若干作業内容が変わるかもしれません。
初期設定
とりあえず0からやりたいのでラズパイを初期化します。
Raspberry pi imager を使えば簡単に初期化、インストールができます。
Raspberry Pi OS – Raspberry Pi
ssh接続の有効化
メインPCから接続、操作できるようにします。
手順はこちらのページがわかりやすかったです。
ラズベリーパイをリモート操作(SSHコマンド)
セキュリティ設定
ラズパイ3(Raspberry Pi)で自宅webサーバー構築してみた
こちらの記事に従いセキュリティ対策をします。
- デフォルトユーザーpiがいないことを確認
- ssh接続のポートをデフォルトの22番から変更
- ssh接続に公開鍵認証を設定
- /etc/hosts.allowと/etc/hosts.allowでローカルからのみssh接続を許可
- ファイアウォールのインストールと設定
nginxのインストール
コマンドラインからnginxをインストールします。
sudo apt install nginx
nginxの実行
サーバーを起動させます。
sudo /etc/init.d/nginx start
webページにアクセスしてみる
ifconfig
コマンドでIPアドレスを調べます。
ブラウザからIPアドレスにアクセスしてみます。
無事表示されました!
同一LAN内限定ですが、webサーバーを使ったページの公開ができました。
ここまではとっても簡単!そう、ここまではね・・・!
サーバーを公開する
ここからは一般的なwebページのようにインターネット上に公開する手順です。
プライベートIPを固定する。
IPアドレスはグローバルIPとプライベートIPの2種類あります。
まずはプライベートIPの固定をします。
※この作業は使っているルーターによって画面の操作方法などが異なります。
ifconfig
でラズベリーパイのMACアドレスを調べます。
次に、ルーターの管理画面からDHCP固定割り当て設定を行います。
ルーターのメーカーにより名称が異なる場合がありますが、プライベートIPをMACアドレスに紐づけて登録するのがポイントです。
ルーターで設定できない場合、ラズパイ側での設定も可能です。
Linuxで固定IP設定(設定ファイル・コマンド) - Qiita
(ただし、Wi-Fiで設定する場合eth0ではないはずです。私の環境だと確かめられないので断定的なことは言えませんが、wlan0とかだと思います。)
設定したら一度Raspberry Piを再起動して、ifconfig
してみます。
指定したIPになっていれば設定完了です。
ちなみにDHCP固定割り当てはルーターによって設定可能なIPに縛りがあったり色々ややこしいので、ルーター側で指定する場合は一度公式マニュアルを確認したほうがいいです。
バーチャルサーバの設定
ポート80に届いたリクエストをラズパイのバーチャルサーバで受け取る設定をします。
/etc/nginx/conf.d下に設定ファイルを作ります。
sudo vi /etc/nginx/conf.d/rira.conf
server { listen 80; server_name rira100000000.com; charset UTF-8; access_log /var/log/nginx/rira100000000.com.access.log main; location / { root /home/rira/web/public; index index.html; } }
server_name
とディレクトリ構成は自分のものに置き換えてください。
nginxの設定ファイルを開きます。sudo vi /etc/nginx/nginx.conf
ここにconf.d下のファイルを読み込ませる設定を追加します。
include /etc/nginx/conf.d/*.conf;
ルーターのポートマッピング設定
ルーターに届いたリクエストをラズパイに送るよう設定します。
これもルーターによって画面や機能名が異なる場合がありますが、重要なのはポート80に届いたリクエストを固定したラズパイのIPアドレスに送ることです。
ポート80(http)とポート443(https)を設定した画面です。
ネームサーバーの設定
グローバルIPを固定するためにDDNSを設定します。
正確に言うとグローバルIPを固定するわけではなく、「グローバルIPが変更されるたびにドメイン提供サービスにIPを登録しなおす」設定をします。
今回はMyDNSを使います。
こちらの記事に従って設定します。
MyDNS.JPで使う独自ドメインを設定する。
最後の
4. 独自ドメインを取得したレジストラでネームサーバーの設定をします。
についてですが、お名前.comの場合ドメインNavi(お名前.com Naviログイン後)から設定できます。
ページ中段の「他のネームサーバーを利用」タブを選択し、プライマリネームサーバーとセカンダリネームサーバーを設定します。
設定後に実際に適用されるまでは最大72時間かかるそうです(私は15分くらいでした)。
DDNSにグローバルIPを設定
アクセス情報【使用中のIPアドレス確認】
↑で自分のグローバルIPを確認します。
MyDNSに戻り、「IP Address Direct」ページの「IPv4 Address」フォームにグローバルIPを入力します。
DDNSの自動更新設定
DDNSが自動で更新されるように設定します。
MyDNSのIP自動更新 - Qiita
こちらの記事に従い設定します。とても簡単です。
アクセスしてみる
取得したドメインにアクセスしてみます。
Welcome to nginx!が表示されていればラズパイサーバー完成です!
うまく表示できない場合
- nginx startはできているか確認してください。起動時の自動実行を設定していないのでRaspberryPiの起動のたびにする必要があります。
- 自分のグローバルIPをブラウザのアドレス欄に入力してアクセスできるかチェックしてみてください。
アクセスできる場合、ネームサーバーの設定がうまくいっていない可能性が高いです。
アクセスできない場合、ルーター、nginxの設定で失敗している可能性があります。 - ポートチェック【外部からポート開放確認】で80番が解放できているかチェックしましょう。できていない場合、ルーターの設定を見直す必要があるかもしれません。ルーターによってはファイアーウォールやパケットフィルタリングの設定が必要かもしれません。