投稿

8月, 2020の投稿を表示しています

uWSGI on OpenWrt

以下の内容は OpenWrt 19.x の時点でのやや古いものであり当面の間は残しておくが、最近の 23.05 に基いた新しい文書 を別途作成したので、通常は新しい方を参照して欲しい。 OpenWrt ルーターに Django を導入したいと思ったので、それにあたってはその下準備として、アプリケーションサーバーを整えておく必要がある。Python 系のアプリケーションサーバーとしては uWSGI が定番のようなので、まずここでは uWSGI 環境の構築について一通り行いたいと思う。 luci-ssl-nginx OpenWrt では luci-ssl-nginx というパッケージがあり、これを導入するとデフォルトの uHTTPd 環境の LuCI に代えて、NGINX(かつ SSL)環境の LuCI が動くようになる。この環境において、Lua プログラムである LuCI に NGINX が CGI としてリレーするために、uWSGI が使われている。この場合は、uWSGI はあくまでも CGI を扱うためのアプリケーションサーバーの一種として使われているだけで、Python 固有の WSGI サーバーとして使われているわけではないが、それでも NGINX ⇔ uWSGI 間のプロトコルは uwsgi プロトコルが使われている点は特筆すべき点だろう(NGINX は uwsgi プロトコルにネイティブ対応している)。 NGINX が uwsgi プロトコルを使うということは、設定ファイル中で uwsgi_* プレフィックスを使った設定が行え、uwsgi_pass でソケットを通じて uWSGI にリレーできることを意味している。 例えば、OpenWrt の luci-ssl-nginx を入れた状態では uWSGI 関連の設定は次のようになっている。 /etc/nginx/luci_uwsgi.conf(/etc/nginx/nginx.conf からインクルードされている) location /cgi-bin/luci { index index.html; include uwsgi_params; uwsgi_param SERVER_ADDR $server_addr; uwsgi_modifier1 9; uw

ASCII の IPv6 の記事

とりあえずのブックマーク なぜいま、あらためて「IPv6」を学ばなければならないのか IPv6で使うアドレスは、IPv4とどこが同じでどこが違うのか Webサーバーの設定を変更して「IPv6対応サイト」にする【前編】 Webサーバーの設定を変更して「IPv6対応サイト」にする【後編】

NGINX を Drupal 用に設定する

とりあえず Drupal のインストールは成功した が、処理時間の設定を除き、特に Drupal 用の設定を何も行っていないので、現状では少々問題が残っている。この記事ではより細かい設定を行って行こうと思う。 NGINX 公式の Drupal 用設定例 👉 NGINX 公式の Drupal 用設定例 server { server_name example.com; root /var/www/drupal8; ## <-- Your only path reference. location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Very rarely should these ever be accessed outside of your lan location ~* \.(txt|log)$ { allow 192.168.0.0/16; deny all; } location ~ \..*/.*\.php$ { return 403; } location ~ ^/sites/.*/private/ { return 403; } # Block access to scripts in site files directory location ~ ^/sites/[^/]+/files/.*\.php$ { deny all; } # Allow "Well-Known URIs" as per RFC 5785 location ~* ^/.well-known/ { allow all; } # Block access to "hi

Drupal を低スペック OpenWrt ルーターにインストール

イメージ
Buffalo WZR-HP-AG300H CPU: 680MHz; ROM: 32MB; RAM: 128MBa OpenWrt 19.07.3 HTTPd NGINX (with SSL) 1.17.7 PHP 7.2.31 (FPM) SQLite php7-mod-pdo-sqlite 3.31.1 Drupal 8.9.3 (最新は 9.0 だが、OpenWrt の最新の 19.07 では PHP 9.2 のため、要件にギリギリ届かない) USB フラッシュドライブ、NGINX + PHP (FPM) のセットアップ WordPress のインストール(👉 WordPress を低スペック OpenWrt ルーターにインストール )で行った作業に準ずるものとする。 SQLite のセットアップ 👉 core/INSTALL.sqlite.txt 単独の SQLite は不要。PHP の SQLite 関連モジュールだけで良い。 opkg update opkg install php7-mod-pdo-sqlite ファイルの置き場には、インストール過程でデフォルトとして示される ./sites/default/files/.ht.sqlite をそのまま使うものとする。留意しなければならないのは、デフォルトのパスを使うにせよ、フォルダーとファイル自身が書き込み可にパーミッションを変更しておかなければならない点である。このパーミッション変更を忘れていると、インストール自体が無事終ってから、最初にサイトの画面を表示する段階でデータベースエラーが発生する。 特に、インストーラーが自前で作成する .ht.sqlite までもがパーミッション変更が必要なことに気付くまで、当初はエラーの原因がわからずに悩む羽目になった。インストーラーが自分で作成できるのだから、こちらでパーミッションを変更せずとも、どうとでもなるんじゃないかと思うのだが、インストーラーと、インストール後の Drupal 本体では、セキュリティ的に権限が違っているからだろう。 PHP の調整 PHP 側の処理が重く時間がかかり過ぎると、NGINX が 504 Gateway Time-out にする場

WordPress を低スペック OpenWrt ルーターにインストール

イメージ
Buffalo WZR-HP-AG300H に OpenWrt をセットアップし、WordPress をインストールしてみる。 Buffalo WZR-HP-AG300H CPU: 680MHz; ROM: 32MB; RAM: 128MB OpenWrt 19.07.3 HTTPd NGINX (with SSL) 1.17.7 PHP 7.2.31 (FPM) MySQL MariaDB 10.2 WordPress 5.4.2 USB フラッシュドライブ 今回は 8GB のフラッシュドライブを使った。256MB を swap 用に割り当て、残りをデータ用(/mnt/data)に使い、続く作業で nginx の Web ルート、MariaDB のインストール場所として割り当てるために利用する。 👉 OpenWrt での USB フラッシュドライブ Web サーバーの NGINX 化と、PHP 7(FPM)との連携 WordPress をインストールする前提として、Web サーバーを通じて PHP 7 が使える環境を整えておく必要がある。ここでは Web サーバー(HTTPd)としてNGINX(SSL 対応版)を使い、PHP は FPM で NGINX と連携させた。 👉 OpenWrt で NGINX と PHP 7(FPM)環境を整える MariaDB のインストール 本当は SQLite3 にしたかったが、WordPress の SQLite 用プラグイン( sqlite-integration )が開発が停止したままとなっていて将来性が不透明なため、素直に MySQL 互換の MariaDB を使うことにする(MariaDB にするとサイズ的に 6.6MB と比較的大きいので、可能であれば避けたかったが)。 MariaDB を適切にセットアップ(👉 OpenWrt で MariaDB を使えるようにする )した後、例えば、データベース名:wordpress;ユーザー名:wordpress;パスワード:******** で WordPress 用のデータベースを用意する。そのためには下のようにする(👉 WordPress 公式 )。 CREATE DATABASE wordpress; GRAN

OpenWrt で MariaDB を使えるようにする

イメージ
WordPress をインストールする ために、MySQL 互換で MySQL よりは軽量の(とはいってもそれなりに ROM 容量は食うが)MariaDB を使えるようにする。 前提状況:USB フラッシュドライブ データ領域として USB フラッシュの外部ドライブを用意(👉 OpenWrt での USB フラッシュドライブ )し、/mnt/data にマウントしていることを前提としている。 アプリケーション自体(MariaDB)のインストール opkg install mariadb-server 設定は /etc/mysql にある my.cnf はサーバー・クライアントに共通のグローバル設定用 conf.d/50-server.cnf はサーバー専用のグローバル設定 conf.d/60-galera.cnf は Galera Cluster 用のグローバル設定(Galera Cluster を使わない限り無関係) ユーザー別のローカル設定用は ~/.my.cnf を作成する ということなので、基本的に /etc/mysql/conf.d/50-server.cnf を編集して設定を調整することになる。 MariaDB の設定 デフォルトの /etc/mysql/conf.d/50-server.cnf(抜粋) # # * Basic Settings # user = mariadb pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr # Don't put this on flash memory # Figure out where you are going to put the databases and run # mysql_install_db --force datadir = /mnt/data/mysql # tmpdir should also not go on flash memory tmpdir = /tmp lc-messages-dir = /usr/share/mariadb skip-extern

OpenWrt での uHTTPd 設定

USB フラッシュドライブ を前提として、uHTTPd がそのマウントされた外部領域を使うように設定することにする。 やったことは以下で、SSH で設定ファイルを直接編集して行なった。 (参考 👉 uHTTPd Web Server Configuration ) uHTTPd 用に /etc/config/uhttpd の option home を linux home パーティションのマウントポイント(/mnt/data)下に指定する。 /www/luci-static, /www/cgi-bin/luci のコピーを /mnt/data 下の対応する場所に置く あとは、index.html を自前のものに変更するなりして、動作を確認した。デフォルトの index.html は、LuCI の管理画面である、/cgi-bin/luci にリダイレクトされるようになっているので、この index.html を別のものに変更してしまったとしても、直接 /cgi-bin/luci にアクセスすればちゃんと管理画面に入ることができるので、何も問題はない。 CGI ちなみに、/etc/config/uhttpd を見ると、PHP や Perl は cgi-bin 以外の場所でも実行可能なように設定できるようだが、Python ではできないようだった(設定してみても、無効のようだった)。 その他 試しに uHTTPd の代わりに Apache を入れようとしたが、正常に動かすことができなかった。 現在(OpenWrt 19.07)では、NGINX の環境が整っており、自分の場合は uHTTPd はアンインストールして使わず、LuCI も含めて SSL 対応版の NGINX で使っている(👉 OpenWrt で NGINX と PHP 7(FPM)環境を整える )。

OpenWrt で NGINX と PHP 7(FPM)環境を整える

イメージ
例えば WordPress をインストールする ためには PHP 7 が Web サーバーと連携して使える状態(FastCGI)を整えておく必要がある。この文書では、WordPress のことはとりあえずおいておいて、一般的に OpenWrt に Web サーバーとして NGINX(SSL 版)を利用し、PHP 7 を FPM(FastCGI Process Manager)で連携する方法について記す。 前提状況:USB フラッシュドライブ WWW 用のデータを置く場所として USB フラッシュの外部ドライブを用意(👉 OpenWrt での USB フラッシュドライブ )し、/mnt/data にマウントしていることを前提としている。 LuCI もろとも Web サーバー(HTTPd)を SSL 対応 NGINX 化する 以前の OpenWrt 18.x とは飛躍的に進歩して、19.07 では SSL 対応版の NGINX が opkg として用意されている(以前は自前で Linux ソースコードからモジュールをビルドする必要があった)のみならず、NGINX 版 LuCI がセットアップされている opkg すら用意されており、OpenWrt コミュニティの旺盛な活動を感じる(👉 LuCI on other web servers > LuCI on nginx )。 opkg update opkg install luci-ssl-nginx opkg remove luci デフォルトでインストールされている LuCI/uHTTPd の方は不要になるのでアンインストールした。 用意した USB の外部領域(/mnt/data)があるので、デフォルトの Web ルート(/www 以下)を /mnt/data/www/default 以下にコピー。 mkdir -p /mnt/data/www/default cp -rp /www/* /mnt/data/www/default それに連動して /etc/nginx/nginx.conf の設定を変更して、Web ルートが /mnt/data/www/default を指し示すように修正する。ただし、元々の root オプションが http ブロック直下にあっ