前置き
サーバーを構築する機会があり、その予行練習でRaspberry piを使いWebサーバーを立ててみました。
今回は立てたサーバーでPHPファイルが実行できれば成功です。
環境
PC:Mac book Pro
Raspberry pi 4
設定の流れ
- MacからRaspberry Piに接続
- Webサーバーを立てる
- FTPサーバーを立てる
- MariaDBをインストール
- phpMyAdminをインストール
サーバーの設定をしていく
Mac からRaspberry Pi に SSH接続
ラズパイからコマンドを開き、直接設定をしてサーバーを立てることもできますが、
設定しながら調べられるようにPCからラズパイにSSH接続を行い、PCからラズパイを操作していきます。
Raspberry Pi の SDカードにSSH接続ファイルを作成
ラズパイのSDカードをPCに読み込ませ、PC側のコマンド((ターミナル) ※コマンドに統一します。)を開き、SDカードにアクセスします。
下記のコマンドを実行することにより、SSH接続ファイルが指定のディレクトリ下に作成されます。
touch /Volumes/boot/ssh
ちなみに、touchコマンドを使うと指定のディレクトリにファイルが作成されます。
MacからRaspberry piにSSH接続を行う
ラズパイには既にWi-Fi設定をしており、ネットワークに接続してある状態です。
ラズパイを起動し、ラズパイのIPアドレスを取得します。
ここだけはラズパイのコマンドを開き、調べなければなりません。
以下のコマンドを打ち込むとIPアドレスが取得されます。
hostname -I
IPアドレスを取得したら、PC側のコマンドに以下を打ち込みラズパイに接続します。
「@192.x.x.x」にはラズパイのIPアドレスを入れてください。
「pi」の部分はユーザーネームですが、デフォルトは「pi」なのでユーザーネームを設定した覚えが無い人は「pi」を入力してください。
ssh pi@192.x.x.x
上記で接続できると、パスワードを求められます。
デフォルトは「raspberry」らしいのですが、自分は自分のパスワードをラズパイで設定していました。
ログインが完了すると以下のようにPC側で、ラズパイのコマンドが使えるようになり、SSH接続は完了です。
pi@raspberrypi:~ $
参考サイト
Webサーバーを立てる
次に様々なパッケージをインストールしていくのですが、その前にラズパイの環境を最新にします。
以下のコマンドを実行するとシステムのパッケージ情報を更新し、更新可能なすべてのパッケージをアップデートしてくれます。
sudo apt update && sudo apt upgrade
Apache2 をインストール
以下のコマンドを実行し、Apache2をインストールします。
sudo apt install apache2
インストール後、Chrome等で、「http://192.x.x.x」(192.x.x.x はラズパイのIPアドレスです。)で検索するとApache2の画面が表示されます。
FTPサーバーを立てる
次にFTPサーバーを立てていくのですが、FTPサーバーはファイル転送を行なってくれるサーバーです。FTPサーバーを立てることにより、PC側からFTPソフト(FileZilla など)を使用して、ラズパイにファイルをアップロードできるようになります。
vsftpd をインストール
以下のコマンド FTPサーバーを立てるための vsftpd パッケージをインストールします。
sudo apt install vsftpd
vsftpd を設定
vsftpdの設定ファイルを編集してFTPサーバーを設定します。
以下のコマンドで設定するファイを開きます。
sudo nano /etc/vsftpd.conf
以下の情報を加えて保存してください。
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
設定の値を説明すると、
- anonymous_enable=NO
匿名ユーザーによるFTPアクセスを無効化します。 - local_enable=YES
ローカルユーザーによるFTPアクセスを許可します。 - write_enable=YES
ローカルユーザーがファイルの書き込みを許可されます。 - chroot_local_user=YES
ローカルユーザーがFTPセッション中に自分のホームディレクトリに制限されます。 - allow_writeable_chroot=YES
ディレクト内の書き込みを許可します。
設定が完了したら、以下のコマンドを実行しFTPサーバーを再起動します。
sudo systemctl restart vsftpd
PC側のFTPソフトで接続
ここでは File Zilla ソフトを使用してラズパイのFTPサーバーに接続します。
以下の情報を入力すると接続することができます。
ホスト:ラズパイのIPアドレス( hostname -I のコマンドで確認が可能です。)
ユーザー:ラズパイのユーザー名
パスワード:ラズパイのパスワード
ラズパイのユーザー名は以下のコマンドから確認することができます。
whoami
接続できたら完了です。
接続ディレクトリの変更
ここまででラズパイのファイルに接続できたのですが、「Document」や「Desktop」等が置かれているホームディレクトリになっています。
Apache2でWebサーバーを立てているため、ラズパイの「/var/www/html/」ディレクトリ下にPHPファイルを配置しなければなりません。
そのため、接続するディレクトリを変更する必要があります。
以下のコマンドで先ほど設定した vsftpd の設定ファイルを開きます。
sudo nano /etc/vsftpd.conf
下記の「※この行を追加」の部分を加えてください
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
local_root=/var/www/html/ ※この行を追加
allow_writeable_chroot=YES
「local_root=/var/www/html/」を加えることにより、FTP接続時に表示されるディレクトリが変更されます。
注意点
FTPの設定ではローカル環境かつテスト環境を想定しているため、十分なセキュリティ対策ができていません。本番環境等で設定する場合は証明書の発行等が必要なため、気をつけてください。
この設定で外部からアクセスした場合、通信内容が丸見えですので絶対にローカルな環境でのみ行なってください。
MariaDB のインストール
PHPを使うにあたり、phpMyAdminを使用したいのですが、phpMyAdminをインストールする前にデータベースのインストールが必要です。
簡単に説明しますと、MariaDBhはデータベースサーバーであり、phpMyAdminはデータベース管理ツールです。
MariaDBのインストール
以下のコマンドでMariaDBをインストールします。
sudo apt install mariadb-server
MariaDBのセキュリティ設定
以下のコマンドを実行し、MariaDBのセキュリティ設定を行います。
sudo mysql_secure_installation
行う設定は、
- Change the root password? [Y/n](root権限のパスワードを変更するか)
→変更してください。 - Remove anonymous users? [Y/n](匿名ユーザーを削除するか)
→削除してください。 - Disallow root login remotely? [Y/n] (リモートでrootユーザーでログインを許可するか)
→許可してください。 - Remove test database and access to it? [Y/n](テストデータベースを削除するか)
→削除してください。 - Reload privilege tables now? [Y/n](テーブルをリロードするか)
→リロードしてください。
以上でMariaDBの設定は完了です。
参考サイト
phpMyAdmin のインストール
phpMyAdminのインストール
以下のコマンドからphpMyAdminをインストールします。
sudo apt install phpmyadmin
インストール中、「phpMyAdminを動作させるWebサーバーを選択してください」というメッセージが出てきますが、最初にインストールしたWebサーバーの「apache2」を選んでください。
また、「dbconfing-commonを設定するかどうか」というメッセージが出てきますが、
こちらは「はい」を選んでください。
他にもphpMyAdminで使用するパスワードを登録したりします。
WebサーバーにphpMyAdminを組み込む
以下のコマンドを実行して、Apache2 に phpMyAdminを組み込みます。
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo systemctl reload apache2
上記のコマンドを簡単に説明すると、
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
→phpMyAdminの設定をApacheに組み込んでくれます。sudo a2enconf phpmyadmin
:
→ApacheがphpMyAdminの設定を読み込んでくれます。sudo systemctl reload apache2
→新しく追加されたphpMyAdminの設定をApacheに適用してくれます。
phpMyAdminにログイン
http://192.x.x.x/phpmyadmin
にアクセスすると、phpMyAdminのログイン画面が表示されるようになります。
ここで、phpMyAdminのログインをするのですが、なぜか自分は上手くログインできませんでした。
そこで、ログインできるよう設定していきます。
phpMyAdminにログインできない場合の対処法
以下のコマンドでphpMyAdminの設定ファイルを開きます。
sudo nano /etc/phpmyadmin/config.inc.php
以下のコードのコメントアウトを外してください。
以下のコードをコメントアウトすることにより、パスワードが無くてもphpMyAdminにログインできるようになります。
$cfg['Servers'][$i]['AllowNoPassword'] = true; //コメントアウトを外す
編集が完了したら保存してください。
次にMariaDBのroot権限のパスワードを一旦削除します。
以下のコマンドでMariaDBにログインしてください
mysql -u ユーザー名 -p
上記を実行するとパスワード入力が促されるので入力してください。
次に以下のコマンドを実行し、root権限のパスワードを削除してください。
MariaDB [(none)]>set password for root@localhost=password('');
コマンド実行後、以下のコマンドからMariaDBを再起動してください。
sudo systemctl restart mariadb
再度、phpMyAdminのログインフォームに行くと以下の情報でログインできるようになっていると思います。
ユーザ名:root
パスワード:(記入なし)
phpMyAdminログイン後、rootユーザーのパスワードを再設定します。
phpMyAdminのSQLから以下のクエリを実行してください。
「newpassword」の部分には新しいパスワードを入れてください。
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');
ユーザーを追加したい場合は以下のクエリから追加することができます。
「newuser」の部分にはユーザー名、「newpassword」の部分には新しいパスワードを入れてください。 ※必須設定ではありません。
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'newpassword';
最後に必ず、先ほど有効化したphpMyAdminの設定を元に戻してください。
以下のコマンドから再度phpMyAdminの設定を開きます。
sudo nano /etc/phpmyadmin/config.inc.php
以下のコードをコメントアウトし、再度保存します。
//$cfg['Servers'][$i]['AllowNoPassword'] = true; //コメントアウトする
あとは、phpMyAdmin側でテーブルデータを作成しPHPを実装して、ラズパイの「/var/www/html/」ディレクトリ下にFTPソフトでファイルをアップロードして「http://192.x.x.x/phpファイルのディレクトリ」にアクセスすれば、ラズパイ上にあるデータを取得することができます。
PHPファイルにアクセスできない場合
「http://192.x.x.x/phpファイルのディレクトリ」でアクセスした際、「Not Found」が表示された場合、ファイル権限の設定を確認してください。
以下のコマンドから「/var/www/html」ディレクトリ内のファイル権限が確認できます。
ls -l /var/www/html
他のユーザーが読み取り権限がない場合、以下のコマンドで権限を付与できます。
sudo chmod -R o+r /var/www/html/
参考サイト
終わりに
以上、ラズパイでWebサーバーを立ててPHPファイルにアクセスしました。
今回の設定は、サーバーを立てる際の基礎知識であり、本番環境で一から実装するためには、まだまだセキュリティ対策が必要です。
ただ、サーバーを自分で立てる良い学習になります。
※本番環境や外部からのアクセスを想定する場合、必ず各設定のセキュリティ対策の知識をつけてから行なってください。最悪の場合、サーバーまたはネットワークに侵入される恐れもあります。