ラズベリーパイ 初期設定とサーバー構築
※ 本ページにはプロモーション(Amazonアソシエイトのリンク)が含まれています。
Raspberry Piを、PLCのデータ収集やWeb表示に使うサーバーとして使えるようにするまでの手順メモです。
OSの初期設定(Wi-Fi・SSH・固定IP)から、Java・FTP・Apache・PHP・Node.js・MariaDBのインストールまでを、実際に打ち込むコマンドと一緒にまとめています。コマンドの右下にある「コピー」ボタンで、そのまま貼り付けて使えます。
ラズベリーパイそのものの概要や機種の選び方は「ラズベリーパイとは」を参照してください。
環境
| 項目 | 内容 |
|---|---|
| ハードウェア | Raspberry Pi 4 Model B(4GB) |
| OS | Raspberry Pi OS(64-bit) |
| 接続 | 有線LAN(eth0)に固定IP、Wi-Fiは初期設定用 |
cat /etc/os-release で確認できます。
この手順で使った機材
- Raspberry Pi 4 Model B(4GB)この手順の動作確認機。新しく買うならPi 5でも同じ手順で動きますAmazon
- USB-C 電源(5V/3A)電源不足はSDカード破損や不安定動作の原因になりますAmazon
- microSDカード(32GB~)データベースを置くので、耐久性の高いものがおすすめAmazon
- ケース(ファン付き)DBやWebサーバーを常時動かすので放熱対策をAmazon
Amazonのアソシエイトとして、当サイトは適格販売により収入を得ています。
セットアップ
ダウンロード
Raspberry Pi Imagerをダウンロードします
https://www.raspberrypi.com/software/
ダウンロードした「Raspberry Pi Imager」を実行してMicroSDカードに書き込みます。ここではRaspberry Pi 4 に Raspberry Pi OS(64-bit)をセットアップしています。OSはUbuntuなどのOSも選択できます。




以降の項目を入力してインストールを完了すると次の画面のようになります

作業の流れ
| 区分 | 項目 | 内容 |
|---|---|---|
| Software Configuration Tool | Wi-Fi・ロケール・SSH | OS書込み後に設定を変更する場合 |
| 固定IP | 有線LANに固定IPを割り当て | |
| パッケージの更新 | apt update / upgrade | |
| ソフトウェア | Java | JDK |
| FTP | vsftpd | |
| Apache2 | Webサーバー | |
| PHP | Apacheで動かすPHP | |
| Node.js・npm・Chart.js | JavaScriptの実行環境とグラフライブラリ | |
| NumPy・Matplotlib | Pythonの数値計算・グラフ | |
| データベース | MariaDB | インストール・DB/ユーザー作成・外部接続 |
| ログ出力 | 実行されたSQLの確認(デバッグ用) | |
| DBの移行 | バックアップとリストア | |
| 見える化(別ページ) | Metabase | DBのデータをブラウザでグラフ化するBIツール(ラズパイ上で動かす) |
| Grafana Cloud(無料枠) | クラウドのGrafanaからラズパイのDBを見える化(外出先からも閲覧可) |
初期設定
Software Configuration Tool
OS書込み後に設定する場合は、raspi-config で変更できます。
$ sudo raspi-config
固定IP
PLCや他のPCから決まったアドレスでアクセスできるように、有線LAN(eth0)に固定IPを設定します。ここでは例として次のアドレスを使います。環境に合わせて変更してください。
| 項目 | 設定例 |
|---|---|
| IPアドレス | 192.168.0.100/24 |
| デフォルトゲートウェイ | 192.168.0.1 |
| DNS | 192.168.0.1 |
Bookworm以降(NetworkManager)現行
まず接続プロファイルの名前を確認します。
$ sudo nmcli connection show
NAME UUID TYPE DEVICE
preconfigured 55dd2019-38f9-4b21-b160-d6408043729b wifi wlan0
lo cff20310-e389-4dd9-b607-b36de92abca9 loopback lo
Wired connection 1 54d7c64b-aef7-3bde-b00d-249f1e0b383e ethernet eth0DEVICEが eth0 の行(この例では Wired connection 1)が有線LANのプロファイルです。このプロファイルに固定IPを設定します(1行のコマンドです)。
$ sudo nmcli connection modify 'Wired connection 1' ipv4.method manual ipv4.addresses 192.168.0.100/24 ipv4.gateway 192.168.0.1 ipv4.dns 192.168.0.1設定を反映します。
$ sudo nmcli connection reload $ sudo nmcli connection up 'Wired connection 1'
設定されたか確認します。
$ ip -4 addr show eth0connection up を実行すると、アドレスが変わった時点で接続が切れます。新しいIPアドレスで接続し直してください。Wi-Fi経由で作業すると安全です。
Bullseye以前(dhcpcd)旧OS
/etc/dhcpcd.conf を編集します。
$ sudo nano /etc/dhcpcd.conf# ファイルの末尾に以下を追加
interface eth0
static ip_address=192.168.0.100/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
noipv6保存したら再起動します。
$ sudo rebootパッケージの更新
まずはパッケージ一覧を更新し、インストール済みのパッケージを最新にしておきます。
$ sudo apt update $ sudo apt upgrade -y
ソフトウェアのセットアップ
Java
JDKを入れればJRE(実行環境)も一緒に入ります。
$ sudo apt install -y default-jdk $ java -version
default-jdk で入るのは、BookwormではJava 17です。最新のMetabaseはJava 25が必要なため、Metabaseを使う場合は「Metabaseのセットアップ」のページで別途Java 25を入れます。
FTP(vsftpd)
PCからファイルを転送するためにFTPサーバーを入れます。
$ sudo apt install -y vsftpd設定ファイルを開き、次の行の先頭の # を外して有効にします。
$ sudo nano /etc/vsftpd.confwrite_enable=YES ascii_upload_enable=YES ascii_download_enable=YES
サービスを再起動します。
$ sudo systemctl restart vsftpdApache2
$ sudo apt install -y apache2PCのブラウザで http://192.168.0.100/ を開き、Apacheの初期ページが表示されれば成功です。公開するファイルは /var/www/html/ に置きます。
PHP
$ sudo apt install -y php $ php -v
Apacheを先に入れておくと、Apache用のPHPモジュールも一緒に入ります。動作確認する場合は、次のファイルを作ってブラウザで http://192.168.0.100/info.php を開きます(確認後は削除してください)。
$ echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.phpNode.js・npm・Chart.js
$ sudo apt install -y nodejs npm $ node -v $ npm -v
グラフ描画ライブラリのChart.jsは、使うプロジェクトのディレクトリでインストールします(sudoは不要です)。
$ cd ~/myproject $ npm install chart.js
<script src="https://cdn.jsdelivr.net/npm/chart.js">)から読み込む方法もあります。工場内などインターネットにつながらない環境では、node_modules/chart.js/dist/chart.umd.js を /var/www/html/ にコピーして使います。
NumPy・Matplotlib
$ sudo apt install -y python3-numpy python3-matplotlibsudo pip install でシステムのPythonにパッケージを入れることができません(externally-managed-environment エラー)。aptにないライブラリを使う場合は、仮想環境(python3 -m venv)を作ってその中でpipを使ってください。
MariaDB(MySQL互換データベース)
インストール
$ sudo apt install -y mariadb-server初期セットアップ
$ sudo mariadb-secure-installation(以前は mysql_secure_installation でしたが、現在は上のコマンド名になっています)
次の6つを順に聞かれます。
| 質問 | 意味 | 検証環境 | 本番運用 |
|---|---|---|---|
| Switch to unix_socket authentication | Linuxのユーザーで自動認証する方式に切り替えるか | n | n |
| Change the root password? | DBのrootパスワードを設定・変更するか | n | Y |
| Remove anonymous users? | 匿名ユーザーを削除するか | n | Y |
| Disallow root login remotely? | 外部のPCからrootでログインできないようにするか | n | Y |
| Remove test database and access to it? | テスト用データベース(test)を削除するか | n | Y |
| Reload privilege tables now? | 設定を今すぐ反映するか | Y | Y |
ここでは検証用として、ゆるい設定(ほぼ全部「n」)で進めています。現場で常時運用する場合は「本番運用」列のように設定してください。
データベースとユーザーの作成
$ sudo mariadb-- データベース作成 CREATE DATABASE testDB; SHOW DATABASES; -- 確認 -- ユーザー作成(ユーザー: testuser パスワード: passwd) CREATE USER 'testuser'@'%' IDENTIFIED BY 'passwd'; SELECT user, host FROM mysql.user; -- 確認 -- 権限付与(testDBに対する全権限) GRANT ALL PRIVILEGES ON testDB.* TO 'testuser'@'%'; SHOW GRANTS FOR 'testuser'@'%'; -- 確認 EXIT;
'%' はどのホストからでも接続できるという意味です。全データベースへの権限が必要な場合は testDB.* を *.* に変えてください。パスワードは必ず推測されにくいものに変更してください。
作成したユーザーでログインできるか確認します。
$ mariadb -u testuser -p
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| testDB |
+--------------------+外部(PC・PLC)から接続できるようにする
初期状態では、ラズベリーパイ自身(127.0.0.1)からしか接続できません。設定ファイルを開きます。
$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf# bind-address = 127.0.0.1 ← 先頭に # を付けてコメントアウト bind-address = 0.0.0.0 # ← すべてのネットワークで待ち受ける
MariaDBを再起動します。
$ sudo systemctl restart mariadbPCからは、ホスト 192.168.0.100、ポート 3306 で接続できます。PLCからDBへ直接書き込む場合(OMRON NJ/NXのDB接続など)も、同じアドレスとユーザーを使います。
ログ出力(実行されたSQLの確認)
デバッグ時に、実際に実行されたSQLを確認したいときに使います。
$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf# すべてのSQLを記録 general_log_file = /var/log/mysql/mysql.log general_log = 1 # 時間のかかったSQL(10秒以上)を記録 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mariadb-slow.log long_query_time = 10
$ sudo systemctl restart mariadb $ sudo tail -f /var/log/mysql/mysql.log
general_log = 0 に戻してください。ログが必要な時だけgeneral_log = 1にしてください。
DBの移行(バックアップとリストア)
他のPCやラズベリーパイからデータベースを移行するときの手順です。
1. バックアップ(移行元)
$ mysqldump -u testuser -p testDB > testDB_backup.sql2. データベース作成(移行先)
移行先にtestDBがまだない場合は作成します。
$ mysqladmin -u testuser -p create testDB3. リストア(移行先)
リストアは mysqldump ではなく mysql(mariadb)コマンドで行います。
$ mysql -u testuser -p testDB < testDB_backup.sqlまとめ
ここまでで、ラズベリーパイ1台に「Webサーバー(Apache・PHP)」と「データベース(MariaDB)」がそろいました。
あとはPythonなどでPLCからデータを読み出してMariaDBに記録し、MetabaseやGrafanaで表示すれば、ブラウザから設備の状態を確認できるシステムになります。PLCとの通信方法は下の関連ページを参照してください。
関連ページ

ラズベリーパイとは
歴史・現行機種のスペック・PLCとの連携構成を紹介します

OMRON FINS通信
PythonからOMRON製品とFINS通信します

KEYENCE 上位リンク通信
PythonからKEYENCE PLCと上位リンク通信します

MITSUBISHI MCプロトコル通信
PythonからMITSUBISHIシーケンサとMCプロトコル通信します
参考
Raspberry Pi is a trademark of Raspberry Pi Ltd.
Amazonのアソシエイトとして、当サイトは適格販売により収入を得ています。
