はじめに
Raspberry Pi 4を自宅サーバとして運用し始めたので、その際にやったことの備忘録として書き残しておきます。
本記事では以下のことをやります。
- ラズパイを固定IPアドレス化
- Docker環境構築
- ファイアウォール導入
- 独自ドメイン取得
- ドメイン名とグローバルIPアドレスの紐づけ
- サービスを外部公開する
ラズパイを固定IPアドレス化
Webブラウザを立ち上げて、URLの欄にルータのローカルIPアドレスを入力してください。ルータのIPアドレスはwindowsならコマンドプロンプトで以下のコマンドを入力すれば、「デフォルトゲートウェイ」という項目に出てきます。192.168.〇.1みたいなIPアドレスになってることが多いです。
ipconfig
IPアドレスを打ち込むと、自宅のルータの設定のページに飛びます。おそらく、ここでログインを要求されるので、IDとパスワードを入力してログインをします。IDとパスは今まで何もいじっていなければ、デフォルトのものが存在するはずなので、わからなけらば自宅のルータの種類に応じてググってみてください。
私の家のルータでは以下のようなページが表示されました。
このルータ機能の設定をクリック。
IPアドレス/DHCPサーバの設定をクリック。
固定割当というところにラズパイに割り当てたいIPアドレスを設定します。例えば、192.168.3.30という値を割り当てたいなら割当IPの4つ目の四角に30と入力。
MACアドレスはラズパイのものを入力。ラズパイ上で以下のコマンドを入力すれば、eth0て項目に多分出てくる。
ip addr
ポート転送の設定もやってしまいましょう。
ルータ設定のページに戻りまして、ポート転送設定をクリック。ここで80番ポート、443番ポートのアクセスはラズパイの固定IPアドレスに転送するようにしときます。IPアドレスの欄には先ほど設定した固定IPアドレスを入力。
Docker環境構築
ラズパイ上で以下のコマンドを入力。
sudo apt install docker docker-compose
以下のコマンドが動作すれば成功。
sudo docker version
このままだとdockerコマンド使う度にsudoを入力する必要があって非常に面倒なので、sudoなしでも使えるようにする。
sudo adduser ubuntu docker
これでsudoなしでも使えるはず。
docker version
ファイアウォールを導入
最終的に外部に公開するのでファイアウォールはちゃんと使いましょう。
外部から接続可能なポートを許可する設定をします。とりあえずここではssh、http、httpsを許可する。
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
設定できているか確認。
sudo ufw status
ssh接続して作業している場合、sshを許可してからファイアウォールを動作させないと接続できなくなってしまうので、順番には要注意です。
独自ドメインを取得
さて、いよいよ大詰めです。独自ドメインを取得しましょう。お名前.comでも、Xserverでもムームードメインでもお好きなサイトから取得してください。
値段やらインターネットの評判やらで比較検討するといいです。
私はXserverのものを使用しているので、以降はXserverを例に説明していきます。
ドメイン名とグローバルIPアドレスの紐づけ
IPアドレスとドメイン名の紐づけはDNSというものを使ってやるのですが、グローバルIPアドレスはプロバイダーの都合で変わる可能性があります。その対策として、ダイナミックDNS(DDNS)というサービスを利用します。今回は無料で使えるmydnsを利用することにします。
アカウントを作ったらメールにMaster ID&Passwordが送られてくるので確認しましょう。(gmailだと迷惑メールに振り分けられるみたいなので注意)
DOMAIN INFOからドメインを入力します。ここのDomainとMXの両方に先ほど取得したドメインを入力します。
さて、mydnsのネームサーバーを使わせてもらうことになるので、mydnsのページからName Server Listという部分を確認しておきましょう、
その他をサービスを利用するを押して、ネームサーバーに先ほど確認したものを入力。
次はXserver側でmydnsのネームサーバを利用するようにします。Xserver Domainのページに飛んで、ネームサーバー設定をクリック。
これで外部からのアクセスができるようになったはずです。
サービスを外部公開する
まだ、何もサービスを動かしていないので実際に動かして試してみましょう。
ラズパイで以下のコマンドを入力してください。
mkdir webtest
cd webtest
sudo vim docker-compose.yml
docker-compose.ymlには以下の内容を入力。今回はApacheを起動してみます。
https-portalはhttps対応させるために使うイメージです。非常にお手軽にサイトのhttps化ができるのでおすすめです。
(リバースプロキシサーバーとしても使えるよ)
version: "3"
services:
https-portal:
image: steveltn/https-portal:1
container_name: web_https-portal
ports:
- 80:80
- 443:443
networks:
- webnet
restart: always
volumes:
- ./certs:/var/lib/https-portal
environment:
DOMAINS: (取得したドメイン名) -> http://website:80
STAGE: staging
website:
image: httpd:2.4
container_name: testweb
networks:
- webnet
restart: always
networks:
webnet:
いざ、実行。
docker-compose up -d
少し接続ができるようになるまで時間がかかるので数分ほど待ちます。
そして、Webブラウザを立ち上げて、URLに「https://(ドメイン名)」と入力してやれば、**It works!**という文字が表示され、apacheに接続できることがわかります。
最後にIPアドレスを定期的に通知するようにしておわり
crontab -e
一番下に以下を追加。
*/10 * * * * wget -q -O /dev/null http://(Master ID):(password)@ipv4.mydns.jp/login.html
*/10 * * * * wget -q -O /dev/null http://(Master ID:(password)@ipv6.mydns.jp/login.html
終わりに
以上、ラズパイを自宅サーバにするまででした。意外とやろうと思えば、簡単にできるのでやってみてください。サブドメインの設定方法もあるのですが、それはまた気が向いたら書きます()