TermuxでPHP7を使いたい! PHP8からPHP7にして使う。

じゃんくはっく
じゃんくはっく

今年の初めくらいからtermuxのPHPは7から8に上がったようですね!

何か不具合でも?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

WordPressを動かすには少々、問題ありで。

termux はダウングレードできないですよね?

ぴー
ぴー

先日、termux上でNGINXとPHP-FPMの設定記事を書いたときに気がついたんですが、termuxのPHPって7から8になってPHP7はもうPKGがなく入れられませんでした。

TermuxでNGINX+php-fpm+mariadbを動かす具体的な設定例

Link

で、一つ前の記事でPHP7を暫定配布していたのですが、ビルドしたのでその過程とビルドしたPHP7のdepパッケージをどうやって入れるのかネタにしようかと思います。

ビルドしたPHP7のダウンロード先

GITHUBに、ビルドしておきました。arm64bitのCPUを使っている方向けです。32bit版はありません。

Github: termux-php7

LINK

インストールの仕方は簡単に記載しておきます。

(1) 一旦、PHP8関連を入れておく

とりあえず一旦、アップデートしておきます。アップデートできない人は1つ前の記事を見てください。

$ pkg update $$ upgrade

その後、php8やphp-fpm、php-apacheなど入れておきます。

$ pkg install php php-fpm php-apache

今入っているバージョンを再確認しておきます。

$ dpkg -l | grep php

2021/06/01現在ですと以下が最新です。

$ dpkg -l | grep php | cut -b 4-35
 php                8.0.6       
 php-apache         8.0.6       
 php-fpm            8.0.6 

PHP8関連だけ消す

例えば、上の3つPHP8関連だけ消したい場合は以下のようにします。

$ apt purge php php-apache php-fpm

ちゃんと消えたか、1つ上のコマンドをタイプして確認してみましょう。

PHP7をダウンロードしてインストール

php-pgsqlは今回入れないので、消しておきます。

$ wget https://github.com/take-i/termux-php7/raw/master/php7.4.12-aarch64-deb.zip
$ unzip php7.4.12-aarch64-deb.zip
$ cd php7.4.12-aarch64-deb.deb/
$ rm php-pgsql*
$ dpkg -i ./php* ./libicu_67.1_aarch64.deb

以下のようになっていればOKです。

$ dpkg -l | egrep "php|libicu"
ii  libicu             67.1           aarch64
ii  php                7.4.12         aarch64
ii  php-apache         7.4.12         aarch64
ii  php-fpm            7.4.12         aarch64

apache や、nginxの設定をしてみてphpinfo()関数が動作することを確認しておきました。libicuだけ最新の環境から下がっていますので、何かこれ関連で入れられないパッケージが出るかもしれません。何かあれば教えてください。

PHP7をアップデートしないよう設定

今入れたのがアップデートされないよう設定しておきます。

$ apt-mark hold libicu php php-apache php-fpm

確認は以下で。

$ apt-mark showhold
libicu
php
php-apache
php-fpm

ホールドを解除したい場合は、apt-mark unhold <package-name> で解除できます。

まとめ

今回、なんとなくわかったのは以下となります。

・ビルドするときは、dockerイメージをubuntuに実機に作ってあれこれする
・これはまた次回に紹介
・termux独自のパッケージ管理のバージョンなどについては未調査
・とりあえず、PHP7はapacheでもnginxでも使えるようになった

あとがき

WordPressなんかを動かすときは、まだPHP7が安定しています。この前、PHP8で動かしてみたんですが対応していないプラグインなどもあり、またWP-CLIというコマンドラインのツールも警告を出します。ということで、PHP8はもう少し、様子見となりました。termuxでPHP7とか勉強している人もいると思うので今回のネタは少しは需要があるかもしれません。やっぱりビルドするって、面倒ですしね。いつか、その過程も紹介していきたいです。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

    Termuxでpkg updateできなくなって困ってる人へ

    じゃんくはっく
    じゃんくはっく

    5/1からGoogleStoreから入れたTermuxはパッケージのアップデートできなくなっています。

    えっ!そうなの?

    ぴー
    ぴー
    じゃんくはっく
    じゃんくはっく

    では、どうすればいいの?っていう記事になります。

    日本語の情報ってば、ほとんどないですね!

    ぴー
    ぴー

    2021/5/1から、termux で、pkg update などできなくなてエラーになります。こんな感じ。

    $ pkg update
    Checking availability of current mirror: ok
    Ign:1 https://dl.bintray.com/grimler/game-packages-24 games InRelease
    Ign:2 https://dl.bintray.com/grimler/science-packages-24 science InRelease
    Hit:3 https://termux.mentality.rip/termux-packages-24 stable InRelease
    Err:4 https://dl.bintray.com/grimler/game-packages-24 games Release
      403  Forbidden
    Err:5 https://dl.bintray.com/grimler/science-packages-24 science Release
      403  Forbidden
    Reading package lists... Done
    E: The repository 'https://dl.bintray.com/grimler/game-packages-24 games Release' does no longer have a Release file.
    N: Metadata integrity can't be verified, repository is disabled now.
    N: Possible cause: repository is under maintenance or down (wrong sources.list URL?).
    E: The repository 'https://dl.bintray.com/grimler/science-packages-24 science Release' does no longer have a Release file.
    N: Metadata integrity can't be verified, repository is disabled now.
    N: Possible cause: repository is under maintenance or down (wrong sources.list URL?).

    これはリポジトリの参照先が閉鎖されたからです。今まで、見ていた先は上のログからもわかるように「bintray」というところでした。この対応策は以下で書かれていますが、日本語で書かれた情報がなかったので書いておくことにしますね。

    [README] Bintray repositories are down now #6726

    Link

    もう少し速く記事を書こうかなと思っていたのですが、ずるずると5月末になってしまいました。

    リポジトリの参照先を変更する

    GooglePlayからtermuxを入れた人が、この現象にあっていると思いますが、次のコマンドでリポジトリを変更できます。実行はリモートのsshからでもOKです。

    termux-change-repo

    すると、以下のようにCUIインターフェイスの画面が出てきます。

    3つとも選択して、OKを押します。

    次の画面にて、上から3つめのGrimler を選択します。

    OKを押すと以下のよう表示され、ターミナル入力に戻ります。

    [*] Grimler's mirrors selected
        Changing main repository
        Changing game repository
        Changing science repository
    [*] Running apt update
    Hit:1 https://grimler.se/termux-packages-24 stable InRelease
    Hit:2 https://grimler.se/game-packages-24 games InRelease
    Hit:3 https://grimler.se/science-packages-24 science InRelease
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    62 packages can be upgraded. Run 'apt list --upgradable' to see them.

    そうしたら、以下のコマンドをパッケージのアップデートを行なっておきます。このコマンドは、インストールされている packages が最新のバージョンにアップグレードされます。

    $ pkg upgrade

    一応、PHP7など入れている場合は、PHP8になりますので(ダウングレードはtermuxはできません)注意してくださいね。WordPressはまだphp7で動作させたほうが良いです。php8.x は、いくつかのプラグインはwp-cliでエラーや警告がでます。

    まだ、テスト中ですが取り急ぎ php7のパッケージを作っておきました。

    Github: termux-php7

    Link
    ../php7.4.12/
       ├── apache2_2.4.46-4_aarch64.deb
       ├── libicu_67.1_aarch64.deb ★
       ├── php-apache_7.4.12_aarch64.deb
       ├── php-fpm_7.4.12_aarch64.deb ★
       ├── php-pgsql_7.4.12_aarch64.deb
       └── php_7.4.12_aarch64.deb ★
    
    ★のは動作することを軽く確認済み。

    また、今度これらのネタについてはブログ記事にしたいと思います。

    まとめ

    今回、なんとなくわかったのは以下となります。

    ・termuxのオフィシャルは、GooglePlayより、F-Droidからインストールを進めています。
    ・これにはちゃんと理由があるようで、そのあたりも次のネタで取り上げる予定
    ・Bintray側は、告知ページで「Into the Sunset on May 1st」と表現しています。Sunsetって、つまりクローズってことです!
    ・取り急ぎ、クロスビルド環境でPHP7.4.12をビルドしましたがこれもネタにしたいです。
    ・nginxとphp-fpmの組み合わせでは軽くテストしました。

    あとがき

    今年も折り返しの月に入りましたね! バイク関連のDIYをいろいろやりたいのですが、休みの日も急に仕事が入ってなかなか手がつけられずでした。ありがたいことなんで、仕事はやりますが趣味のDIYもやりたいので、うずうずしています。夏にはカスタム完了したバイクでツーリング行きたいですからね!

    著者にメッセージ

    間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

      備忘録:Ryzen 5 3600のLinuxでUnixBench

      じゃんくはっく
      じゃんくはっく

      WordPressの仕事が終わったんで、今日は好きなことやるよ!

      WordPressの仕事もやってるのね!

      ぴー
      ぴー
      じゃんくはっく
      じゃんくはっく

      だいたい、何でも頼まれたらやっちゃうよ!w

      で、Linuxはubuntuですか?

      ぴー
      ぴー

      そういえば、だいぶ前にRyzen 5 3600をメインマシンにしたんですが、これでLinux動かしてなくて、UnixBenchのスコアが気になっていました。Diskはさくっと入れ替えられるよう、2.5inchの脱着ベイをつけてありますので今回はこのマシンにUbuntuを入れてUnixBenchを計測してみようと思います。

      Intelチップ、2022年までしばらくさようなら!
      投稿日:  更新日:2020年11月13日

      Link

      もう1年以上使っていますね。intelがRyzenを盛り返すまで繋ぎで使っているんですが、なかなかintelは画期的なのを出しませんね。AppleはM1のオリジナルCPU出してきたし、5年後はintelが昔のAMDみたいになっていなければいいんですが。

      Ubuntu 20.04.1 LTSでUnixBench

      MacOS10.14.x でUnixBenchを計測した時は、マルチCPUで2323.1でした。Ubuntu 20.04.1 LTSで、Ryzen 5 3600は以下のスコアです。

      UNIX Benchmarks (Version 5.1.3) on AMD Ryzen 5 3600

      Single-Core Score:2422.6
      Multi-Core Score:7919.0

      詳細は以下です。SSDは、SLCのsata2 64GBです。

         BYTE UNIX Benchmarks (Version 5.1.3)
      
         System: mone: GNU/Linux
         OS: GNU/Linux -- 5.4.0-42-generic -- #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020
         Machine: x86_64 (x86_64)
         Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
      ------------------------------------------------------------------------
      Benchmark Run: 日  5月 30 2021 00:29:08 - 00:57:06
      12 CPUs in system; running 1 parallel copy of tests
      
      Dhrystone 2 using register variables       50630225.0 lps   (10.0 s, 7 samples)
      Double-Precision Whetstone                     9059.2 MWIPS (9.9 s, 7 samples)
      Execl Throughput                               7946.0 lps   (29.9 s, 2 samples)
      File Copy 1024 bufsize 2000 maxblocks       1256459.1 KBps  (30.0 s, 2 samples)
      File Copy 256 bufsize 500 maxblocks          338174.5 KBps  (30.0 s, 2 samples)
      File Copy 4096 bufsize 8000 maxblocks       3192098.2 KBps  (30.0 s, 2 samples)
      Pipe Throughput                             2633467.7 lps   (10.0 s, 7 samples)
      Pipe-based Context Switching                 364452.5 lps   (10.0 s, 7 samples)
      Process Creation                              10672.3 lps   (30.0 s, 2 samples)
      Shell Scripts (1 concurrent)                  10448.3 lpm   (60.0 s, 2 samples)
      Shell Scripts (8 concurrent)                   5218.2 lpm   (60.0 s, 2 samples)
      System Call Overhead                        3716288.0 lps   (10.0 s, 7 samples)
      
      System Benchmarks Index Values               BASELINE       RESULT    INDEX
      Dhrystone 2 using register variables         116700.0   50630225.0   4338.5
      Double-Precision Whetstone                       55.0       9059.2   1647.1
      Execl Throughput                                 43.0       7946.0   1847.9
      File Copy 1024 bufsize 2000 maxblocks          3960.0    1256459.1   3172.9
      File Copy 256 bufsize 500 maxblocks            1655.0     338174.5   2043.4
      File Copy 4096 bufsize 8000 maxblocks          5800.0    3192098.2   5503.6
      Pipe Throughput                               12440.0    2633467.7   2116.9
      Pipe-based Context Switching                   4000.0     364452.5    911.1
      Process Creation                                126.0      10672.3    847.0
      Shell Scripts (1 concurrent)                     42.4      10448.3   2464.2
      Shell Scripts (8 concurrent)                      6.0       5218.2   8697.0
      System Call Overhead                          15000.0    3716288.0   2477.5
                                                                         ========
      System Benchmarks Index Score                                        2422.6
      
      ------------------------------------------------------------------------
      Benchmark Run: 日  5月 30 2021 00:57:06 - 01:25:17
      12 CPUs in system; running 12 parallel copies of tests
      
      Dhrystone 2 using register variables      377415057.2 lps   (10.0 s, 7 samples)
      Double-Precision Whetstone                    85109.8 MWIPS (9.8 s, 7 samples)
      Execl Throughput                              38242.8 lps   (29.9 s, 2 samples)
      File Copy 1024 bufsize 2000 maxblocks        870656.3 KBps  (30.0 s, 2 samples)
      File Copy 256 bufsize 500 maxblocks          231207.7 KBps  (30.0 s, 2 samples)
      File Copy 4096 bufsize 8000 maxblocks       2754722.9 KBps  (30.0 s, 2 samples)
      Pipe Throughput                            17510677.3 lps   (10.0 s, 7 samples)
      Pipe-based Context Switching                1622682.3 lps   (10.0 s, 7 samples)
      Process Creation                              70024.7 lps   (30.0 s, 2 samples)
      Shell Scripts (1 concurrent)                  67019.5 lpm   (60.0 s, 2 samples)
      Shell Scripts (8 concurrent)                  10011.7 lpm   (60.0 s, 2 samples)
      System Call Overhead                       16785255.3 lps   (10.0 s, 7 samples)
      
      System Benchmarks Index Values               BASELINE       RESULT    INDEX
      Dhrystone 2 using register variables         116700.0  377415057.2  32340.6
      Double-Precision Whetstone                       55.0      85109.8  15474.5
      Execl Throughput                                 43.0      38242.8   8893.7
      File Copy 1024 bufsize 2000 maxblocks          3960.0     870656.3   2198.6
      File Copy 256 bufsize 500 maxblocks            1655.0     231207.7   1397.0
      File Copy 4096 bufsize 8000 maxblocks          5800.0    2754722.9   4749.5
      Pipe Throughput                               12440.0   17510677.3  14076.1
      Pipe-based Context Switching                   4000.0    1622682.3   4056.7
      Process Creation                                126.0      70024.7   5557.5
      Shell Scripts (1 concurrent)                     42.4      67019.5  15806.5
      Shell Scripts (8 concurrent)                      6.0      10011.7  16686.2
      System Call Overhead                          15000.0   16785255.3  11190.2
                                                                         ========
      System Benchmarks Index Score                                        7919.0

      同じRyzenだと、ThinkCentre M75q-1 Tiny のRyzen 5 Pro 3400GE (3.30GHz, 2MB) が以下のスコアです。

      UNIX Benchmarks (Version 5.1.3) on Ryzen 5 Pro 3400GE (3.30GHz, 2MB)

      Single-Core Score:2151.7
      Multi-Core Score:6552.1

      Ryzen 5 3600のが速いですが、このマシンも頑張っていますね。これは以下で紹介しています。

      130W電源でThinkCentre M75q-1 Tinyのベンチマーク

      URL

      ちなみに、このマシンはWEBサーバにしようと思いっていたのですがフォートナイトやるっていうんで息子に持っていかれてしまいました。。。なので、このブログはスマホPixel3のWEBサーバでがんばっています!

      まとめ

      今回、なんとなくわかったのは以下となります。

      ・Ryzen 5 3600 は、シングル2422.6 マルチ7919.0 のUnixbenchスコア
      ・2021/05/30時点でintelの次のCPUは、「Alder Lake」を2021年後半に発売予定
      ・これは10nmのようです
      ・特に困っていないので、7nmとか5nmのintelが出るまでじっくり待ちます

      あとがき

      Intelがこのまま、黙ってAMDを先行させるだけではないと思っていますが、苦戦しているようです。まぁ、しかし、普通の作業をしているだけであれば、Core i7 3770; (Ivy Bridge)でもぜんぜん十分で、いまだにサブマシン(メインマシンに近い存在)で頑張っています。このCPUは、第3世代のもので、今から約10年前にリリースされました。macosも10.8くらいから10.15(現在)でずっと使っています。重い作業するのは、ビルドするときくらいでしょうか。あとはアプリケーションを同時に30個くらい開いたりしながら作業するとき、少しもたつくくらいです。

      著者にメッセージ

      間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

        工学社 の本、androidの改造 に掲載されたよ!

        なんと、このブログの記事が工学社の本に掲載されましたよ!

        ぴー
        ぴー
        じゃんくはっく
        じゃんくはっく

        なにぃー! こんなふざけたブログが本に載っただと!

        よかったら、本屋さんまたはネットでポチってね!

        ぴー
        ぴー
        じゃんくはっく
        じゃんくはっく

        ネタは「Pixel3のroot化」の件です。

        工学社 出版のI/O編集部さんが、「Androidスマホの改造」っていうタイトルの本を出されたのですがその中で、なんと、このブログの記事の一部が載っていますよ。ただいま、絶賛予約中です! 5/27発売です。

        出版社 : 工学社 (2021/5/27)
        発売日 : 2021/5/27
        言語 : 日本語
        単行本 : 112ページ
        ISBN-10 : 4777521494
        ISBN-13 : 978-4777521494
        寸法 : 14.8 x 1 x 21 cm

        元ネタとなった当ブログの記事はこれです。

        Pixel3・android11(R)正式リリース版でroot化!

        LINK

        内容抜粋

        工学社さんのサイトに抜粋がありましたので引用しておきます。第一章に、赤文字部分が掲載された部分です。

        ■非公式アプリを入れる―root化
         機械オンチでも出来る!Androidをroot化する方法
         Pixel3・android11(R)正式リリース版でroot化

        ■“スクショ”禁止のアプリで画像を保存 ―「Xposed」導入
         Androidに「Xposed」を導入する方法
         「Xposed」の使い方に関するアレコレ

        ■有志が作った最新OSでセキュリティ向上 ―ROM焼き
         「Xperia XZs」のROM焼き
         ROM焼き手順

        ■キャリア以外のSIMカードを入れる―「SIMロック解除」
         「SIMロック解除」とは
         「SIMロック解除」の条件と手順について

        ■高度なカスタマイズを可能に―adbコマンド
         「Windows」で「adbコマンド」を使う方法
         「Mac」で「adbコマンド」を使う方法

        あとがき

        こんなブログの記事が、まさか本になるとは思っていませんでした。依頼が来た時は、びっくりです! 汎用性がある記事っていうのは、目に止まるっていうことですかね。root化の記事もそれなりに需要があるということですね。

         今度は root化したらこんなことができるよっていう記事も書いていこうと思いました。今回の本にも載っている「あっとはっく」さんのサイトは面白い記事がたくさんありますね。見習いたいと思います。

        日々をハックする記事をお届け:あっとはっく

        LINK

        著者にメッセージ

        間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

          TermuxでNGINX+php-fpm+mariadbを動かす具体的な設定例

          じゃんくはっく
          じゃんくはっく

          今日もTermuxとWordPress触っていくよ〜!

          今日は何するんですか〜?

          ぴー
          ぴー
          じゃんくはっく
          じゃんくはっく

          一時的にPixel3からUmidigiF2へスマホサーバを移動しようと思って設定を纏めておいた!

          設定の備忘録ですね!

          ぴー
          ぴー

          さて、最近記事をサボりがちでしたがコメントにて、「TermuxでWordPressを動かす具体的な設定例」が見たいとご意見をいただきましたので、自分のメモがてら纏めておきます。

          まずはUmidigiF2の電池交換

          アリエク:UmidigiF2 バッテリー(購入時は1,283円)

          Link

          UmidigiF2の電池が膨らんできましたので、アリエクで買ったUmidigiF2の電池に交換します。裏蓋は粘着テープで貼り付けられているだけなので、カードとかピックで分離します。

          NFCやカメラ部分がプラスティック部品で固定されているので、周りのネジ11本を外してバッテリーコネクタを外せるようにします。

          バッテリーの裏は透明なフィルムで剥がせるよう工夫されています。よく切れるテープとかは使われていませんでした。交換自体はPixel3とかと比べると非常に楽ですね。メンテナンス性は良いです。あとは両面テープを貼り直して裏フタを固定するだけです。

           さてと、では面倒な設定まとめを書いておきます。

          Termuxを入れてアプリを設定

          Termuxについては、Google Play Storeから入れます。root化していなくても大丈夫ですが、ポート制限があるので1024ポート以上でないとWEBサーバは公開できない仕様です。

          Termux:Google Play Store

          URL

          リモートから設定したほうが楽なので、最低限SSHを入れて起動しておきます。パスワードを設定しておきます。

          pkg update 
          pkg install openssh
          sshd
          passwd

          あとはリモートからSSH接続して設定していきます。面倒でなければSSH鍵認証の設定をしておいてもOKです。

          ssh termux_host_ip -p 8022

          他、アプリNGINX+php-fpm+mariadbも入れておきます。

          pkg install nginx php-fpm mariadb

          どんなバージョンが入っているか確認しておきます。

          dpkg -l | egrep 'nginx|php|mariadb'

          現時点、2021/05/11 時点では以下のバージョンになりました

          $ dpkg -l | egrep 'nginx|php|mariadb'
          ii  mariadb                    2:10.5.8       aarch64      A drop-in replacement for mysql server
          ii  nginx                      1.20.0         aarch64      Lightweight HTTP server
          ii  php                        8.0.6          aarch64      Server-side, HTML-embedded scripting language
          ii  php-fpm                    8.0.6          aarch64      FastCGI Process Manager for PHP

          2020/10頃は、PHPが7.4.xだったのでver8系になったようです。PHP8の新機能はここ参照。

          PHP7が良い場合は、ここにdebfileがあるようです。Wordpressを動かす場合はPHP7.4.12のほうが無難かも。あとで検証してみます。

           ※追記

          上記のdebfile だとエラーになって動作しないようでしたので、ビルドしなおしました。ここ参照

          NGINXの設定

          ホームディレクトリ以下にWEBのドキュメントROOTを作ります。どこでもいいのですが、termuxの$HOMEに作ります。自分の場合は、デフォルトのWEB ROOT(htdocs_default)と、www.gpl.jp ドメインのWEB ROOT(htdocs_nginx)を分離しています。

          $ echo $HOME
          /data/data/com.termux/files/home
          $ cd
          $pwd
          /data/data/com.termux/files/home
          $ mkdir htdocs_nginx
          $ mkdir htdocs_default

          あと、SSL関連のファイルを格納しておくのでそれ専用のディレクトリも作っておきます。SSL関連は以下を参照

          Termuxネイティブ環境でacme-nginxを使いワイルドカード証明書を自動取得!

          LINK
          $ cd
          $ mkdir -p ssl/gpl.jp/ 
          $ tree ssl
          ssl
          └── gpl.jp

          NGINXの設定ファイルを作ります。conf.dディレクトリに分離して設定ファイルを保存するのでディレクトリも作っておきます。

          $ cd
          $ cd ../usr/etc/nginx/
          $ mkdir conf.d

          オリジナルファイルをバックアップしておきます。UNIX系ではDiff取ったりして確認したりすることもあり、設定ファイルは消すより待避する癖をつけておいたほうが無難です。自分の場合は、_org が元あったファイルという意味にしています。

          $ cp -p nginx.conf nginx.conf_org

          今回の設定例では、root化してある端末なので、ポートは80と443にしています。root化していない場合は程よく読み替えてください。
          nginx.conf ファイルは以下のように設定しています。userは、termuxを入れた環境によって違いますので whoamiやidコマンドで確認しておきます。

          user  u0_a143;
          worker_processes  auto;
          worker_rlimit_nofile 4096;
          
          error_log  /data/data/com.termux/files/usr/var/log/nginx/error.log;
          #error_log  logs/error.log  notice;
          #error_log  logs/error.log  info;
          
          #pid        logs/nginx.pid;
          
          
          events {
              use epoll;
              multi_accept on;
              worker_connections  1024;
          }
          
          
          http {
              include       mime.types;
              default_type text/plain;
          
              charset            utf-8;
              sendfile           on;
              tcp_nopush         on;
              tcp_nodelay        on;
              server_tokens      off;
              keepalive_requests 100;
              keepalive_timeout  3;
          
              server_names_hash_bucket_size 64;
              types_hash_max_size 2048;
              client_body_buffer_size 64k;
              client_body_temp_path /data/data/com.termux/files/home/htdocs_default/tmp/client_body_temp 1 2;
          	
              log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                '$status $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
          
              access_log  /data/data/com.termux/files/usr/var/log/nginx/access.log  main;
          
              gzip  on;
              gzip_vary       on;
              gzip_proxied    any;
              gzip_comp_level 6;
              gzip_types      text/plain text/css text/xml text/javascript
                              application/json application/javascript application/x-javascript
                              application/xml application/rss+xml application/atom+xml
                              image/svg+xml image/x-icon;
          
              ssl_session_timeout 30m;
              ssl_session_cache   shared:SSL:10m;
              ssl_session_tickets off;
              ssl_protocols TLSv1.2 TLSv1.3;
              ssl_prefer_server_ciphers on;
              ssl_dhparam /data/data/com.termux/files/usr/etc/nginx/dhparam.pem;
              ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
          
              fastcgi_buffers         8 64k;
              fastcgi_buffer_size     64k;
              fastcgi_connect_timeout 60;
              fastcgi_send_timeout    60;
              fastcgi_read_timeout    300;
          
              proxy_connect_timeout 60;
              proxy_send_timeout    60;
              proxy_read_timeout    120;
              proxy_http_version    1.1;
              proxy_cache_bypass    $http_upgrade;
              proxy_set_header      Upgrade            $http_upgrade;
              proxy_set_header      Connection         "upgrade";
              proxy_set_header      Host               $host;
              proxy_set_header      X-Real-IP          $remote_addr;
              proxy_set_header      X-Forwarded-Host   $host;
              proxy_set_header      X-Forwarded-Server $host;
              proxy_set_header      X-Forwarded-For    $proxy_add_x_forwarded_for;
              proxy_set_header      X-Forwarded-Proto  $scheme;
              #proxy_set_header      X-Forwarded-Port   $server_port;
              proxy_set_header      X-Forwarded-Port   443;
              proxy_temp_path       /data/data/com.termux/files/usr/var/log/nginx/tmp;
          	
              ## cache_pathについては別ファイルで設定する
              include /data/data/com.termux/files/usr/etc/nginx/conf.d/cache_path.conf;
          		
              server {
                  listen *:80 default_server;
                  server_name  _;
          		root   /data/data/com.termux/files/home/htdocs_default;
          
          		charset utf-8;
          
          		access_log  /data/data/com.termux/files/usr/var/log/nginx/host.access.log  combined;
          		error_log  /data/data/com.termux/files/usr/var/log/nginx/host.error.log warn;
          
          	    index index.html;
          	    include /data/data/com.termux/files/usr/etc/nginx/conf.d/common.conf;
          
          	}
          
          	include /data/data/com.termux/files/usr/etc/nginx/conf.d/www.gpl.jp.conf;
          	include /data/data/com.termux/files/usr/etc/nginx/conf.d/gpl.jp.conf;
          	
          }

          SSLのdhparamは、以下で出しておきます。この意味についてはここ参照

          openssl dhparam -out /data/data/com.termux/files/usr/etc/nginx/dhparam.pem 2048

          設定ファイルはインクルードしてあります。

          conf.d/cache_path.conf
          conf.d/common.conf
          conf.d/www.gpl.jp.conf
          conf.d/gpl.jp.conf

          まず、cache_path.conf の設定です。キャッシュディレクトリも作成しておきます。

          mkdir -p /data/data/com.termux/files/home/cache/hackgpljp
          mkdir -p /data/data/com.termux/files/home/cache/proxy.gpljp
          mkdir -p /data/data/com.termux/files/home/cache/wwwgpljp

          cache_path.conf

          location ~ /. {
          
          ## php-fpmでキャッシュを作る時
          fastcgi_cache_path /data/data/com.termux/files/home/cache/hackgpljp levels=1:2 keys_zone=gpljp:30m inactive=600m max_size=10g;
          ## proxy経由でキャッシュを作る時
          proxy_cache_path /data/data/com.termux/files/home/cache/proxy.gpljp levels=1:2 keys_zone=proxy_gpljp:30m inactive=600m max_size=10g;
          
          # www.gpl.jp or gpl.jp
          fastcgi_cache_path /data/data/com.termux/files/home/cache/wwwgpljp levels=1:2 keys_zone=wwwgpljp:18m inactive=5m max_size=10g;

          common.conf は以下です。

          ## .htpasswdとか . から始まるファイルへのアクセスは404で応答
          ## 403だとそのファイルがあるのが外からわかってしまう
          location ~ /. {
              return 404;
          }
           
          ## ファイルが無くてもエラーログを出さない
          location ~ /(favicon.ico|apple-touch-icon-*) {
              log_not_found  off;
              access_log  off;
          }

          このサイトのメイン設定 www.gpl.jp.conf は以下です。

          server {
              listen      80;
              server_name jh.gpl.jp www.gpl.jp www.gpl.jp;
          
              root   /data/data/com.termux/files/home/htdocs_nginx;
          
              access_log  /data/data/com.termux/files/usr/var/log/nginx/hackgpljp.access.log  combined;
              error_log  /data/data/com.termux/files/usr/var/log/nginx/hackgpljp.error.log warn;
          
              client_max_body_size 20M;
              ## キャッシュの設定:有効 -> 0 無効 -> 1
              set $do_not_cache 0;
              ## キーゾーン名
              set $keys_zone gpljp;
          	
              include /data/data/com.termux/files/usr/etc/nginx/conf.d/common.conf;
              include /data/data/com.termux/files/usr/etc/nginx/conf.d/hackgpljp_wp.conf;
              include /data/data/com.termux/files/usr/etc/nginx/conf.d/add_header.conf;
          }
           
          server {
               listen      443 ssl http2;
               server_name jh.gpl.jp www.gpl.jp www.gpl.jp;
               root   /data/data/com.termux/files/home/htdocs_nginx;
          
               access_log  /data/data/com.termux/files/usr/var/log/nginx/ssl_hackgpljp.access.log  combined;
               error_log  /data/data/com.termux/files/usr/var/log/nginx/ssl_hackgpljp.error.log warn;
          
               client_max_body_size 20M;
               ## サイトのSSL証明書
               ssl_certificate     /data/data/com.termux/files/home/ssl/gpl.jp/gpl.jp.crt;
               ssl_certificate_key /data/data/com.termux/files/home/ssl/gpl.jp/gpl.jp.key;
          
               ## キャッシュの設定:有効 -> 0 無効 -> 1
               set $do_not_cache 0;
          
               ## キーゾーン名
               set $keys_zone gpljp;
          
               ## 必要な設定ファイルを読み込み
               include /data/data/com.termux/files/usr/etc/nginx/conf.d/common.conf;
               include /data/data/com.termux/files/usr/etc/nginx/conf.d/hackgpljp_wp.conf;
               include /data/data/com.termux/files/usr/etc/nginx/conf.d/add_header.conf;
          }

          ここで、インクルードしている設定は以下です。

          conf.d/hackgpljp_wp.conf
          conf.d/add_header.conf

          hackgpljp_wp.conf

          index index.php index.html;
          error_page 404 /index.php?error=404;
           
          # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
          # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
          location ~ /. {
              deny all;
          }
           
          # Deny access to any files with a .php extension in the uploads directory
          # Works in sub-directory installs and also in multisite network
          # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
          location ~* /(?:uploads|files)/.*.php$ {
              deny all;
          }
          
          set $is_mobile '';
           
          ## スマートフォン用のキャッシュを作る為の判定処理
          ## WordPress標準の wp_is_mobile() 関数と同じ判定処理
          if ($http_user_agent ~* '(Mobile|Android|Silk/|Kindle|BlackBerry|OperasMini|OperasMobi)') {
              set $is_mobile 'mobile.';
          }
          
          set $do_not_cache 0;
          
          ## GET メソッド以外はキャッシュを作成しない
          if ($request_method != GET) {
              set $do_not_cache 1;
          }
          
          if ($query_string != "") {
          	set $do_not_cache 1;
          } 
          
          ## キャッシュして欲しくないファイルは除外
          if ($request_uri ~* '/(wp-admin/|wp-login.php|wp-cron.php|xmlrpc.php|wp-json/|??feed|wp-json|sitemap.xml)') {
              set $do_not_cache 1;
          }
           
          ## ログイン済みのユーザー等、Cookie を持っていたらキャッシュを使わない
          if ($http_cookie ~* 'comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in') {
              set $do_not_cache 1;
          }
           
          ## 画像ファイル等はブラウザキャッシュを効かせる (60日)
          location ~* .(jpg|jpeg|gif|png|css|js|swf|ico|pdf|svg|eot|ttf|woff)$ {
              expires 60d;
              add_header Cache-Control "public, no-transform";
              access_log off;
          }
           
          ## リクエストは index.php に投げる
          location / {
              try_files $uri $uri/ /index.php?$args;
          }
           
          ## NginxとPHP-FPMはソケットで繋ぐ
          ## HTTPステータスコードによって各キャッシュの有効期限を制御する
          location ~ .php {
           
              try_files $uri /index.php;
           
              include fastcgi_params;
              fastcgi_pass  unix:/data/data/com.termux/files/usr/var/run/php-fpm.sock;
              fastcgi_param SCRIPT_FILENAME  /data/data/com.termux/files/home/htdocs_nginx$fastcgi_script_name;
           
              fastcgi_no_cache     $do_not_cache;
              fastcgi_cache_bypass $do_not_cache;
              fastcgi_cache        $keys_zone;
              fastcgi_cache_key    $is_mobile$scheme://$host$request_uri;
              fastcgi_cache_valid  200 5m;
              fastcgi_cache_valid  301 302 1h;
              fastcgi_cache_valid  404 1m;
              fastcgi_cache_valid  any 1s;
           
              fastcgi_hide_header X-Powered-By;
          }

          add_header.conf は以下です。

          add_header Strict-Transport-Security "max-age=15552000"; 
          add_header X-XSS-Protection "1; mode=block";
          add_header X-Frame-Options SAMEORIGIN;
          
          add_header X-Content-Type-Options nosniff;
          add_header Content-Security-Policy "default-src * 'self' data: 'unsafe-inline' 'unsafe-eval' ;";
          add_header Referrer-Policy strict-origin always;
          add_header Permissions-Policy "fullscreen=() geolocation=()";
          add_header X-hacker "Hello. :-)";

          PHPの設定

          WordPressを動かすなら、少しPHPの上限を上げておくほうが無難です。termuxパッケージのPHPは、デフォルトファイルがないので、php.iniは以下に作ります。

          vi /data/data/com.termux/files/usr/lib/php.ini
          [PHP]
          upload_max_filesize = 64M
          post_max_size = 64M
          memory_limit = 128M
          
          [mail function]
          sendmail_path = "/data/data/com.termux/files/usr/bin/msmtp -C /data/data/com.termux/files/home/.msmtprc -t"

          iniで指定してある、phpからのメール送信設定は、msmtpを使っています。これは以下を参照。

          Termuxからメールを送れるようにするには?

          https://www.gpl.jp/2020/09/30/termux-smtp-client/

          NGINX+php-fpmの動作確認

          たくさんインクルードファイルがあって、わかり辛いかもですね。うまく動作しているか動作確認です。

          sudo nginx

          root化してある場合は、nginxはroot で動作させないとポート80,443にバインドできません。1024以上であればtermuxの一般ユーザで起動させます。

           起動時に何かエラーメッセージが出たらその対応をしていきます。

          mariaDBの設定

          冒頭でmariaDBのパッケージはインストールしています。ここでは初期設定をします。基本的には以下でいけるはずです。

          Termux Wiki : MariaDB

          https://wiki.termux.com/wiki/MariaDB

          mysqlに接続するコマンドは、リモートからではなくtermuxのスマホ本体から行ってください。リモートからだと、権限がらみでtermuxユーザでmysql接続、use mysql; ができません。

          mariadb を起動します。

          $ mysqld_safe &

          以下はリモートからではなくtermuxのスマホ本体から行ってください。

          mysql -u $(whoami)

          リモートからDB Toolを使いたいので権限をつけておきます。リモートホストIPや、passwordなどは程よく読み替えてください。

          use mysql;
          set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
          GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY 'YOUR_ROOT_PASSWORD_HERE';
          flush privileges;
          quit;

          リモートのGUIツールから接続テストをしておきます。以下は、macのTablePlusというツールの画面です。

          termuxのsshユーザー名はなんでも良いです。ここでは無指定です。

          あと、デフォルトのcharacter-setを指定しておきたい場合は以下のようにします。

          vi /data/data/com.termux/files/usr/etc/my.cnf.d/server.cnf
          $ cd
          [client]
          default-character-set = utf8mb4
          [mysqld]
          character-set-server = utf8mb4

          utf8mb4は文字を1〜4byteで取り扱うので、こっちがよろしいかと。

          mariadbを再起動しておきます。

          $ ps axu | grep mariadb
           ※PIDを確認
          $ kill 30563
          $ mysqld_safe&

          WordPressを動かしてみる

          ほどよくDBを作成して、WEB ROOTにWordpressを展開します。

          $ cd
          $ wget https://ja.wordpress.org/wordpress-5.7.1-ja.zip
          $ unzip wordpress-5.7.1-ja.zip
          $ mv wordpress/* htdocs_nginx/
          〜省略〜

          以下、省略。PHP8環境でのWordPress動作確認は何か気がつけばネタにしたいと思います。

          まとめ

          今回、なんとなくわかったのは以下となります。

          ・現状の設定だとコメント投稿がうまく動作しない
          ・ジェットパックのいいね も動く時と動かない時がある
          ・TermuxのPHPパッケージが8になっていた
          ・WordPressがPHP8で問題ないか確認する
          ・とりあえず、wp5.7.1でプラグインが何もない状態であれば動いているように見える
          ・今、使っているプラグインやテーマを全部突っ込んでみて確認してみる

          あとがき

          サーバ設定とか、ほんとダルいですねー! 最近はインスタンスも1から作る機会なんてだいぶ減ってきているんで、こういう設定とかめんどくさいなーって感じました。AWSもGCCも、ずいぶん楽できる環境が整っているからそう感じるわけで。なんでもリモートできる、良い時代ですね。

          著者にメッセージ

          間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

            2021/03 site24x7 でのSLA状況・統計データ

            じゃんくはっく
            じゃんくはっく

            新年度、始まりましたね!

            この季節、あったかくて好きだわー

            ぴー
            ぴー
            じゃんくはっく
            じゃんくはっく

            リモートで自宅で仕事してるときが一番つらいねw

            せめて散歩でもして気晴らししないとね!

            ぴー
            ぴー

            春ですねー! めちゃくちゃ暖かくなって外出したいんですが、なかなか世間の事情で旅行とまでは行きませんよね。せめて、散歩くらいはしたいものです。仕事の用事で、東京ー名古屋間をバイクで走ったのですがまだ夜は寒かったです。昼はちょうどいい天気で、めちゃくちゃ気持ちよかったです。

             さて、ちょっと遅れましたが今回も3月のSLA統計データを出しておきます。

            何を目指しているの?

            稼働率・SLA99.95%をスマホ自宅サーバで目指せ!まずは1ヶ月間

            LINK

            site24x7のスターターパックを2020の10月から始めています。監視サービスでSLAを99.95%目指しています。99.95%とは1ヶ月にダウンタイムが21.6分以内であればOKということですが、10月から初めて1回しかクリアしていません。今年の2月に達成できたのですが、それ以外はNGINXか、PHPか、何かがメモリーリークしているような現象になります。

            2021・03のSLA

            今月の結果です。障害時間の合計は7 時間 39 分あって、SLAは98.972%となり目標の99.95%には届きませんでした。今月からなのか、site24x7のレポート画面が少し進化したようです。

            主な内容はNGINXの「Bad Gateway」問題です。この事象は不定期に発生しますが、必ずOSがフリーズしたような現象になります。おそらくメモリーリークしている感じです。完全にOSが死んでいるわけではなく、かろうじて動作はしています。なぜなら、NGINXはBad Gatewayの応答を出しています。また、thingspeakで、CPU温度や、バッテリー温度をpythonで投げているのですがこれは動作しています。再起動するときに AndroidOSのホームを開こうしても開ません。仕方なく、電源ボタン長押しで強制再起動という感じです。

            どのくらいのアクセス数なの?

            去年の10月くらいから、pixel3のスマホサーバに引越ししたのですが、アクセス状況はこんな感じです。引越し以前のデータもそれほどかわりません。横ばいといった感じです。

            こんなサイトでも3000人くらいのユーザさんが見ているのには驚きです。見ていてくださってる読者さんには感謝ですね。

            まとめ

            今回、なんとなくわかったのは以下となります。

            ・時間をなんとか作って、NGINXを新システムに載せ替える
            ・メモリ使用量などOS情報を外部に投げる仕組みを考える

            あとがき

            課題はわかっていて、その調査をするか、代替え策を実行するか、やるべきことはわかっているのですが、腰が重いです。やることが退屈なので、違う面白いことに目がいってしまい、そのうち手をつけたいなと数ヶ月ずっと思っています。

            著者にメッセージ

            間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。