ラズパイ4でLAMP環境を作る(メインはmariadbの設定)

Laravel案件もちらほら増えてるので、ラズパイにLAMP環境を整えたいなと思ったのと node.jsからmysqlに接続したいのでついでに入れることにしました。

XAMPPでもよかったのですが、せっかくなのでラズパイにいれてしまおうかなと。

mysqlといいましたが、ラズパイは基本mariadbという互換のあるDBなのですが 特に問題はないと思うのでmariadbを外部(LAN内に限る)からアクセスできるようにしようと思います。

初回にラズパイの設定をしてSSHログインができる状態のところからスタートになります。

あと、apt updateとapt upgradeを済ませている前提で進めます。

Apacheのインストール

まずはサーバーとなるApacheを導入します。

sudo apt install apache2 -y

インストールが終わったら特に何も設定せずとも「http://192.168.0.11」にアクセスすると Apache2 Debeanのデフォルトページが表示されます。

表示されていない場合は何かしらエラーかネットが繋がってないか確認してください。

ApacheについてはこれだけでOKです。

PHP7.2をインストールする

PHPはバージョンによって色々変わっちゃうので私は案件で7.2を使うことが多いため とりあえず7.2を導入していこうと思います。

普通に入れると違うバージョンが入ってしまいますので、初回にちょっと設定する必要があります。

ソースリストにダウンロード先を追加してphp7.2を導入する

php7.2を入れるにはソースリストに1行追加する必要があります。

sudo nano /etc/apt/sources.list

開いたら最終行に以下の文字列を追加してください。

deb http://mirrordirector.raspbian.org/raspbian/ buster main contrib non-free rpi

保存し終わったらapt updateを実行します。

sudo apt-get update

updateが終わったら以下のコマンドで存在しているか確認します。

apt-cache search php7.2

php7.2のリストがいっぱいでてきたらOKです。

sudo apt -y install php7.2 php7.2-common php7.2-mbstring php7.2-xml php7.2-mysql php7.2-zip php7.2-gd php7.2-curl php7.2-json mcrypt

少し時間はかかりますがインストール終わったら

php -v
PHP 7.2.9-1+b2 (cli) (built: Aug 19 2018 06:56:13) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.9-1+b2, Copyright (c) 1999-2018, by Zend Technologies

こんな感じにバージョンがでてきたらインストール完了です!

MariaDBをインストールする

今回はMariaDBを外部から使えるようにすることがメインなので PHPの動作は後回しにします。

エラーがでたら確認します。

sudo apt -y install mariadb-server

次にMariaDBを有効にして起動します。

sudo systemctl enable mariadb
sudo systemctl start mariadb

これで問題なければ「sudo mysql」でMariaDBにログインできます。

現状セキュリティもなにもないので書き込み権限があるユーザーを作成したいと思います。

なるべくRootで入らないようにしましょう。

とりあえずMariaDBに入りましょう。

sudo mysql

ユーザー作成

次にユーザーを作成します。

create user '[お好きなユーザー名]'@'localhost' identified by 'password';

@マークの手前の部分を好きなユーザー名に変えてください。

もちろんカッコもいらないです。

シングルクォーテーションで好きな名前を挟む感じです。

passwordも変更しておいたほうがいいでしょう。

お好きなパスワードにしておいてください。

問題なく作成できたらユーザーリストを確認しましょう。

select user, host from mysql.user; 

作成したユーザーとrootがあればOKです。

もし間違えて作ってしまって削除したい場合は

drop user [お好きなユーザー名]@localhost; 

で削除できます。

データベースの作成

とりあえず使うためのデータベースを作成します。

今回はnode.jsで使うためのDBを作ります。

create database expressjs

これでDBが作成されました。

一旦DBから抜けます。

exit;

作成したユーザーに権限を付与

もっかいRootでログインします。

sudo mysql;

次に作成したユーザーに作成したDBを操作する権限を与えます。

grant all on expressjs.* TO '[お好きなユーザー名]'@'localhost' identified by 'password';

OKがでたら作成したユーザーにそのDBに対してだけすべての権限を与えました。

一旦抜けます。

exit;

作成したユーザーでログインしてDBにアクセスできるかチェック

MariaDBに作成したユーザーでアクセスする場合は以下のコマンドで入ります。

sudo mysql -u [お好きなユーザー名] -p

パスワードを求められるので入力してログインします。

ログインできたらデータベースを選択します。

use expressjs;

問題なくDBを選択できたらOKです、

試しにテーブルを作成できるか試してみましょう。

create table user (id int, name varchar(10)); 

問題なく作成できたら完璧です!

一旦作成したテーブルを削除しておきましょう。

drop table user;

削除できたらOKです。

Rootのログイン制御をしておく

このままだとrootで簡単にログインできてしまうので、初期パスワードの設定をしましょう。

本来なら最初にやっておくべきでしたが、後回しにしました。

sudo mysql_secure_installation

これで初期設定ができるのですが、最初にパスワードがきかれます。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

元々パスワードは設定されていないのでそのままエンターを押してOKです。

Set root password? [Y/n]

となるのでYを入力してエンターを押して 次にセキュアなパスワードを入れましょう。

パスワードを入れ終わると、匿名ユーザーの除外を行うか聞いてきます。

ユーザーは既に作成しているので、匿名ユーザーはセキュリティ的に邪魔なのでYで消してしまいましょう。

その次はリモートでRootログインできないようにするかきいてくるので、 これもYを押して進めます。

次にテストデータベースを消すかどうかがあるのでYでけしましょう。

次はここまでやってきた権限の変更等を即時反映したいのでYを押して進めます。

これで設定は終わりです!

DBから抜けて一回再起動をかけましょう。

sudoだとログインできてしまう

このままだとsudoを付けたらリモートでもrootログインできてしまうのでもうちょっと制御したいところですが、 記事の方向性がズレてしまうので各自調べてください(笑)

phpMyAdminをインストールする

最後にDBを操作しやすいようにphpmyadminを入れてしまいましょう。

sudo apt -y install phpmyadmin

インストール途中に青い画面でサーバーを尋ねられるので 「Apache2」でスペースを押してエンターを押しましょう。

その後YES、OKを選びましょう。

インストールが終わったらブラウザからphpmyadminにログインできるようになります。

http://192.168.0.11/phpmyadmin

後は作成したユーザーとパスワードでログインすればOKです!

ルートでログインしてください。

node.jsからアクセスできなかったのでその設定

最後に、node.jsのexpressでSequelizeというモジュールでDBのテーブルを作成しようとしたら エラーで弾かれてたのでその対策を行いました。

結論から言うと、DBのユーザーを作る時に「@localhost」で作成したので localhostからしかその名前は使えなかったというわけです。

phpmyadminの場合は内部的にはローカルホストで処理してくれてるのでいけてただけですね。

なのでmysql側で許可する設定を与える必要があります。

sudo mysql -u root -p

でまずログインします。

その後、以下のコマンドで許可を与えてやりましょう。

grant all privileges on *.* to [お好きなユーザー名]@'192.168.%' identified by 'root のパスワード' with grant option;

意味合い的には作ったユーザーを使ってログインするときのホストは ローカルIPであればすべて許可するような感じです。

セキュリティ敵にはちゃんと許可したいIPだけを設定したほうがいいですが、 今回はローカルでの作業のみになるのでローカルのIPはすべて許可しておきます。

恐らくこれで別PCからnode.jsとかを使ってmysqlにアクセスできると思います。

それでもつながらない場合は以下のことも試してみてください。

hosts.allowに許可IPを書き込む

やる必要はあるかはわからないのですが、一応ローカルIPからmysqlにアクセスできるように許可設定をしておきます。

sudo nano /etc/hosts.allow

これで開いたファイルの最終行に

mysqld: 192.168.0.

と記述して保存してください。

mysqlの設定ファイルをいじる

mysqlの設定ファイルは/etc/mysql/my.cnfで設定します。

sudo nano /etc/mysql/my.cnf

開いたら最終行に以下を書き込んでください。

[mysqld]
bind-address = 0.0.0.0

1行目を追加しておかないとbind-addressなんて無いぜ!って怒られるので気をつけてください。

本来はもうちょっと別の場所に記載されている設定なのですが、 my.cnfはその設定ファイルの後に読み込まれるので、最初に設定されている値を上書きしてくれるわけです。

linuxでなにかソフトをいじる時、直接コアファイルをいじるよりも こうやって用意されている上書き用設定ファイルを使うのが基本になってきます。

mysqlの再起動

最後にmysqlの再起動を行いましょう

sudo systemctl restart mariadb

ちょっとまったら再起動が完了します。

これでラズパイがDBサーバーとして使えるようになりました!