NanoPi NEO を Webサーバにする

OSインストールとか初期設定とかはこっち

Nginx で少しでも軽量に

Nginx のインストール

$ sudo apt update
$ sudo apt install nginx

インストールが終わったら、ブラウザでアクセスしてみて下記のように表示されればOK

ついでに PHP

いくらローカル用だとしても、html だけで Web サイトを作るのはちょっとね…
なので、せめて PHP は使えるようにしとこう。

$ sudo apt install php-fpm php-mysql

MariaDB を使う予定がなければ php-mysql は省いてもいいかも。

続いて Nginx の設定ファイルを編集するんだけど、その前に PHP のバージョン確認。

$ php -v
PHP 8.4.11 (cli) (built: Aug  3 2025 07:32:21) (NTS)
Copyright (c) The PHP Group
Built by Debian
Zend Engine v4.4.11, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.11, Copyright (c), by Zend Technologies

ということで、PHP のバージョンは 8.4.11 と確認できたところで、Nginxの設定ファイル編集。

$ sudo vi /etc/nginx/sites-available/default

やることは3つ。

・先頭行の「#」(コメントアウト)を削除
・fastcgi_pass の数字部分を、インストールされているPHPのバージョンに合わせる。
・172.0.0.1となっているところはコメントアウト

location ~ \.php$ {
       include snippets/fastcgi-php.conf;

       # With php-fpm (or other unix sockets):
       fastcgi_pass unix:/run/php/php8.4-fpm.sock;
       # With php-cgi (or other tcp sockets):
       #fastcgi_pass 127.0.0.1:9000;
}

編集が終わったら、Nginx の設定ファイルを再読み込みして、サービスのリスタート。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

$ sudo systemctl restart nginx
$sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: en>
     Active: active (running) since Sat 2025-11-15 17:13:25 JST; 16s ago

最後、Nginx のステータスを表示した際に、Active: active (running) になっていればOK

Nginx が正常に起動したら、/var/www/html/ 下に確認用 PHP ファイルを置いてみよう。
例えば test.php みたいなベタベタなので良い。(テスト終わったら消すから)

<?php
phpinfo();
?>

昔は <? の後に php を書かなくても動いたんだけど、今はセキュリティ上、php と続けなければならない。
ついうっかり php 書き忘れて「動かねぇぞ…」「エラーログも残ってねぇ…」となりがちw

で、ブラウザで http://[IP Address]/test.php とアクセスすると以下のような表示がずらずら出てくる。

Nginx と PHP が正常に動作していることが確認出来たら、今作った test.php は削除しておこう。

どこまでできる!?

NanoPi NEO の CPU は、Allwinner H3 で、Cortex-A7 1.2GHz が4つ乗ってる。
なので、Webサーバとしてもそこそこ動くらしい。

が、Wordpress ともなると厳しい。

まぁ、まずメモリが 512MB なので、デフォルトテーマでもカツカツで、良さげなテーマを入れようものならメモリ不足に陥るのは必至。
そこにプラグインモリモリだなんて恐ろしい…

ということで、Wordpress は諦めた方が良さげ。

軽量 CMS か、コツコツ自分でPHP書いていくのがいいのかな、と。

ただし、ローカルで同時アクセス数が少なければあり。
当然快適とは言えないけど、ちょっとした情報発信用には使える。

…ってことは、ウチのサイトも大丈夫なのでは!?(同時アクセスなんてほとんどされないからw)

WordPressでアップロードに失敗するんだけど!?

まず、あるあるな「アップロードサイズの上限設定が低すぎる」ということ。
下記の各ファイルの内容を確認&修正

/etc/nginx/sites-available/default

server {
        listen 80 default_server;
        listen [::]:80 default_server;
 
        client_max_body_size 1024M;   # この1行を追加

/etc/php/8.4/fpm/php.ini  ※8.4 の部分は fpm のバージョンに適宜変更で

post_max_size = 1024M
upload_max_filesize = 1024M

ここでは 1024M としたけど、512M とかでも問題ないんじゃないかな。
一部動画をアップロードするテストをしたときに、1GB 近いファイルサイズだったので、1024M にした。

2つのファイルを書き換えたので、それらに関連するサービスを忘れずに再起動。

$ sudo systemctl restart php8.4-fpm
$ sudo systemctl restart nginx

実はこれだけではアップロードできないので追加作業

Ubuntu を使ってると上記2ファイルの変更でアップロードファイルのサイズ上限を決められるけど、Armbian だとそうはいかない。

WordPress のメディアにファイルをアップロードするとき、直接 WordPress の保存先にはアップロードされない。
(wordpress/wp-content/uploads)
いったん、テンポラリディレクトリで受ける。
そして、armbian の場合、そのテンポラリディレクトリが超小さい。
以下のようにして確認すると…

$ df -h /tmp
tmpfs 242M 0 242M 0% /tmp

242MB しかない。
つまり 242MB を超えるようなファイルはアップロードに失敗する。
(tmpfs等は「いっぱいになったらスワップする」という挙動もあるけど、Armbianではそれがない)

「ディスクの書き込みに失敗しました」

のようなエラーが出てしまう。

では、ということで、Wordpress が使用するテンポラリディレクトリを変更してあげればよい。

/var/www/html/neoPress/wp-config.php

/* That's all, stop editing! Happy publishing. */
define('WP_TEMP_DIR', '/var/www/html/neoPress/wp-content/tmp');  # この行を追加

これでOK

尚、「/tmpを大きくしてやればいいじゃない!」ということもできるにはできる。

が、その場合、armbian-zram-config.service を停止させて、/tmp を ファイルシステム上のどこかに作る必要が出てくる。
/etc/fstab を編集して起動時にマウントさせることになるのだけれど…
テンポラリなのでいろいろと読み書き削除が行われる。

そうなると、ファイルシステム上のどこか、ということはSDカードになっていることが多いと思うので、SDカードの寿命を縮めることとなる…

なので、/tmp の設定はそのままに、目的の WordPress の設定変更で対処するのがベスト。

LLM な AI に聞くと「では、/tmpを広げましょう!」的な回答をしてくることもあるのでホント注意が必要。

この記事にコメントしてみる