53
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Qiita全国学生対抗戦Advent Calendar 2022

Day 11

【備忘録】ラズパイを自宅サーバにし、独自ドメインで外部公開するまで

Posted at

はじめに

Raspberry Pi 4を自宅サーバとして運用し始めたので、その際にやったことの備忘録として書き残しておきます。
本記事では以下のことをやります。

  • ラズパイを固定IPアドレス化
  • Docker環境構築
  • ファイアウォール導入
  • 独自ドメイン取得
  • ドメイン名とグローバルIPアドレスの紐づけ
  • サービスを外部公開する

ラズパイを固定IPアドレス化

Webブラウザを立ち上げて、URLの欄にルータのローカルIPアドレスを入力してください。ルータのIPアドレスはwindowsならコマンドプロンプトで以下のコマンドを入力すれば、「デフォルトゲートウェイ」という項目に出てきます。192.168.〇.1みたいなIPアドレスになってることが多いです。

ipconfig

IPアドレスを打ち込むと、自宅のルータの設定のページに飛びます。おそらく、ここでログインを要求されるので、IDとパスワードを入力してログインをします。IDとパスは今まで何もいじっていなければ、デフォルトのものが存在するはずなので、わからなけらば自宅のルータの種類に応じてググってみてください。
私の家のルータでは以下のようなページが表示されました。

スクリーンショット 2022-08-05 175852.png

このルータ機能の設定をクリック。

スクリーンショット 2022-08-05 182208.png

IPアドレス/DHCPサーバの設定をクリック。

スクリーンショット 2022-08-05 180109.png

固定割当というところにラズパイに割り当てたいIPアドレスを設定します。例えば、192.168.3.30という値を割り当てたいなら割当IPの4つ目の四角に30と入力。
MACアドレスはラズパイのものを入力。ラズパイ上で以下のコマンドを入力すれば、eth0て項目に多分出てくる。

ip addr

ポート転送の設定もやってしまいましょう。
ルータ設定のページに戻りまして、ポート転送設定をクリック。ここで80番ポート、443番ポートのアクセスはラズパイの固定IPアドレスに転送するようにしときます。IPアドレスの欄には先ほど設定した固定IPアドレスを入力。

スクリーンショット 2022-08-05 184712.png

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の両方に先ほど取得したドメインを入力します。
スクリーンショット 2022-08-05 191413.png

例)「example.com」というドメインを取得した場合
スクリーンショット 2022-08-05 191745.png

さて、mydnsのネームサーバーを使わせてもらうことになるので、mydnsのページからName Server Listという部分を確認しておきましょう、
スクリーンショット 2022-08-05 192212.png

その他をサービスを利用するを押して、ネームサーバーに先ほど確認したものを入力。

次はXserver側でmydnsのネームサーバを利用するようにします。Xserver Domainのページに飛んで、ネームサーバー設定をクリック。
スクリーンショット 2022-08-05 192548.png

これで外部からのアクセスができるようになったはずです。

サービスを外部公開する

まだ、何もサービスを動かしていないので実際に動かして試してみましょう。
ラズパイで以下のコマンドを入力してください。

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

終わりに

以上、ラズパイを自宅サーバにするまででした。意外とやろうと思えば、簡単にできるのでやってみてください。サブドメインの設定方法もあるのですが、それはまた気が向いたら書きます()

53
63
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
53
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?