Firebaseの技術情報サイト

Firebaseの技術情報サイト

Firebase活用の為の技術情報サイトです

Raspberry PiのWebサーバーの詳細設定

Raspberry Pi の Web サーバーの詳細設定

Raspberry Pi の Web サーバーの設定を前回紹介しました。さらに実用に近い設定にするために、別の PC から Web サイトの中身を更新できるようにします。

目次
Web サーバーの管理に必要な事は?
Web サイトの中身を置くフォルダの設定
Nginx の設定の変更
色々やったのでまとめると
まとめ

Web サーバーの管理に必要な事は?

Raspberry Pi を利用した、Web サーバーのプロジェクトは基本的に家庭内のネットワークに Web サーバーを作るという前提で進めています。しかし、実際の Web サーバーの場合は、インターネットに接続されているため、外部からのアクセスが可能です。Web サイトを管理する上では、誰でもサイトの中身を変更できては困ります。

Raspberry Pi のプロジェクトでも、Web サーバーの Web サイトの中身は管理者だけが更新できる仕組みが必要です。 今回は、Raspberry Pi にデスクトップ版の Ubuntu をインストールしているので、直接ログインして管理する場合には、このログインの認証プロセスで管理者を選別する事が可能です。

直接、Raspberry Pi にアクセスしない場合でも、基本的には、このログインのプロセスを経ることで、一定のセキュリティを確保する事ができます。今回は、Web サイトの中身を管理するためのアカウントとして、webというユーザーを作成して管理するようにします。

直接アクセスして、ユーザーを追加する場合は、ウインドウシステムの設定ツールで簡単にできますが、今回はネットワークを経由して、SSH で Raspberry Pi の設定をやってみる事にします。

SSH の設定は、以前の記事で紹介していますが、復習しておきます。 この設定は、直接 Raspberry Pi にキーボード、マウス、ディスプレーを接続した上で直接行います。この設定を行う前は、ネットワーク経由で SSH でのアクセスができません。

$ sudo apt-get update
$ sudo apt-get install openssh-server
$ sudo ufw allow ssh

で SSH のサーバーパッケージとファイアウォールの設定を行います。

これで、別の PC から SSH でアクセスできるようになります。

Raspberry Pi で設定したユーザー名が「rasuser」、IP アドレスが、「192.168.86.218」の場合は、ターミナルから以下のコマンドを入れてアクセスします。パスワードを聞かれるのでパスワードを入力します。

$ ssh rasuser@192.168.86.218

ログインしたら、新たに Web サイト管理用のユーザーのアカウントを作成します。

$ sudo adduser web

で必要な情報を入力します。パスワード以外は余り重要ではないので、名前などは「Web admin」のような感っじで入力すれば問題ありません。

Web サイトの中身を置くフォルダの設定

標準では、「/var/www/html」のフォルダが指定されていますが、今回作成した「web」ユーザーのホームフォルダの下に「www」というフォルダを作成して、Web サイトの中身を置くように変更します。 従って、Web サイトの中身は「/home/web/www」というフォルダに置くことになります。 (ホームホルダ「/home/web」はユーザーを作成すると自動的に作成されます)

新規のユーザーwebを作成した後一旦、「exit」を実行して、SSH の接続を切ります。 その上で、改めて「web」で SSH でログインします。

$ ssh web@192.168.86.218

webのパスワードを入れてログインします。 次に、Web サイトの中身を置くフォルダwwwを作成します。

$ mkdir www

このあとは、管理者権限を持ったユーザー、つまり Raspberry Pi を設定したときのユーザーで作業を行います。

$ su rasuser

でパスワードを入力すると、「rasuser」として作業できるようになります。

各フォルダには、アクセス権限があって権限がない人はアクセスできないようになっています。 この Web ユーザーのホームホルダ/home/webは全てのユーザーがアクセスできるように変更します。

$ sudo chmod 777 /home/
$ ls -al /home/
total 20
drwxr-xr-x  5 root     root     4096 Oct  6 22:19 .
drwxr-xr-x 20 root     root     4096 Apr 21 17:13 ..
drwxr-x---  2 abc      abc      4096 Oct  6 22:19 abc
drwxr-x--- 25 rasuser  rasuser  4096 Oct  6 21:22 rasuser
drwxrwxrwx  6 web      web      4096 Oct  6 22:15 web

この「777」はアクセスの権限を示しています。 3種類の権限があって、所有者(最初の7)、同じグループ(二番目の7)、それ以外(三番目の7)になっています。「ls -al」で表示される最初の部分、webフォルダの場合、「drwxrwxrwx」がありますが、最初の「d」はフォルダ(directory)を示していて、その後の「rwxrwxrwx」が権限を示しています。全部で9桁ありますが、これがそれぞれの7に対応しています。「r」が読み込みの権限、「w」が書き込みの権限、「x」が実行の権限です。これを3桁の2進数で表しています。7はこの2進数「111」を 16 進数「7」で表したものです。これが、所有者、同じグループ、それ以外で、それぞれ3桁づつです。

今回は、全ての権限(読み、書き、実行)を許可するので、それぞれを「1」に設定します。許可しない場合は「0」を設定します。

「rasuser」の場合は、「drwxr-x---」となっているので、これがフォルダ(directory)を示していて、所有者は全ての権限(rwx=111=7)、同じグループの人は読み込みと実行のみ(r-x=101=5)、それ以外はアクセス不可(---=000=0)という権限が設定されています。

Linux や Mac のコマンドで出てくる「sudo」は、管理者としてコマンドを実行するという意味です。 Linux の OS に関係したファイルやフォルダは、通常のユーザーが誤って書き換えたり、アクセスできないようにアクセスの権限が制限されています。そのため、システムに関連した操作をする場合には、管理者(superuser)の権限で実行する必要があるため「sudo」を使います。通常、Unix や Linux 系の OS の管理者(superuser)は「root」というユーザーを使いますが、Ubuntu の場合、root でのログインを基本的に認めていないので、この方法が採用されています。

###  Nginx の設定の変更

標準設定とは違うフォルダに Web サイトの中身を置く事にしたので、Nginx の設定の変更が必要になります。 今回の設定では、/etc/nginxに設定ファイルが保存されています。

標準では、Virtual host という方法で設定されています。これは、/etc/nginx/sits-enabledのフォルダに有効なホストの設定が保存されています。 実際にsites-enabledのフォルダに行くと「default」というファイルがありますが、これに設定がされています。実際は、/etc/nginx/sites-availableというフォルダのファイルにリンクされています。これは、ファイルの実体は/etc/nginx/sites-availableにあって、/etc/nginx/sites-enabledはそのファイルを参照しているだけという事です。(この仕組みを Unix や Linux 系の OS ではシンボリックリンクと呼んでいます。)

$ cd /etc/nginx/sites-enabled
$ ls -al
total 8
drwxr-xr-x 2 root root 4096 Oct  6 22:06 .
drwxr-xr-x 8 root root 4096 Oct  6 21:35 ..
lrwxrwxrwx 1 root root   31 Oct  6 21:54 default -> /etc/nginx/sites-available/default
$

そこで、/etc/nginx/sites-availableのフォルダに入って、defaultをコピーしてwebというファイルを作ります。

$ cd /etc/nginx/sites-available
$ sudo cp default web
$ sudo vi web

コピーした後、webを編集します。

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /home/web/www;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

基本的に、「server」の「root」を「/var/www/html」から「/home/web/www」に書き換えるだけです。

これで、Nginx のサービスを再起動すると、このフォルダの中身を表示するようになります。

再起動は

$ sudo service nginx restart

でできます。

まずは、仮の中身として、index.htmlを作ります。

$ cd /home/web/www
$ vi index.html

で HTML ファイルの中身を編集します。

<!DOCTYPE html>
<html>
  <h1>Hello World!</h1>
</html>

というファイルを用意すれば、これが表示されるようになります。

別のコンピュータから「192.168.86.218」を Web ブラウザで指定すると、「Hello World!」が表示されます。

色々やったのでまとめると

  • Linux のユーザーの設定 (adduser)
  • ユーザーの切り替え(su)
  • ファイルやフォルダの所有権の変更や表示
  • システムファイルの編集
  • Nginx の仮想ホスト(virtual host)の設定

がポイントです。「vi」は、SSH などのコマンドラインから利用できるエディタです。VSCODE などを使い慣れていると少し不便ですが、Unix 系の OS ではほぼ必ず使えるエディタなので使い方を覚えておくと便利です。Ubuntu の場合、「nano」なども利用可能です。こちらの方が、現在主流で利用しているエディタに近いのでこちらを利用しても問題ありません。

Linux 系のシステムは、基本的に Unix を真似て作られているので、Unix のファイルのアクセス権限などがそのまま引き継がれています。権限の変更は、管理者か所有者以外は基本的にできません。また、操作の内容によって、ユーザーを「su」で切り替えたり、「sudo」を利用したりして対応する必要があります。

慣れるまで面倒かもしれませんが、失敗しても、OS を入れ直せば何度でもトライできます。 こうした、設定の学習には、Raspberry Pi が最適です。

まとめ

今回は、Ngnix の設定を変更して、別のフォルダに Web サイトの中身を置けるように変更しました。

別に変更する必要はなさそうですが、実はファイルを別の PC などから Raspberry Pi に送る場合、/var/wwwのフォルダは、余り都合が良くありません。理由は、フォルダがシステムのフォルダで所有者が「root(システム管理者)」になっているので、ファイルを送る際に、Raspberry Pi の管理者でログインする必要があるためです。Web サーバーの管理に、Raspberry Pi のシステム管理者でログインするのは管理の権限の分担上問題があります。また、Ubuntu の場合、基本的に「root」でのログインを有効にしていないので、別のユーザーがアクセスできるホルダに返納した方が都合が良いのが大きな理由です。

次回は、Web サイトの中身を別の PC で作成してファイルを送信する方法を紹介予定です。