# 日報(2021-06-05) Debian 10 に php の実行環境を準備する

# はじめに

「おまえ、いまどきそんな事してるの?」って思われそうなタイトルで恥ずかしいのでございますがちょっと待ってくだされ、これには仔細があるのでございます ^o^/

発端は先月に Scaleway から来た、とても寂しい mail

This is why our C1 Bare Metal instances offer will be discontinued as of September 1, 2021.

まさに「うっきーっ!」って一瞬でサル🐵に退化してしまうほどの衝撃を受けたのでございました。Atelier UEDA のサービスって実は C1 サーバ 5台で提供していたのでございます。ARM サーバーのみでサービス提供してる事例ってけっこう珍しいのではないかしら

でもまあ先様も事情があってやめるとおっしゃってる心中を察するに物悲しく、すみやかに引っ越しの準備を始めた次第でござったのでございました

ちなみに、最近のサービスは全部 go で作ってるので x86 でコンパイルしなおせばおしまいなのですが、昔のサービスは php で書いてたので、それを引っ越すために掲題の作業が必要になったのでございました

php はなにかとゆるい所が私は性格的に 大好き で、今でも json 触ってたり config いじってたり、そういう 本質的に動的なデータ を静的型付けな言語で interface{} で無理して動的に触ってる時なんか phpの頃は良かった と懐かしく思ったりする PHPer なのでございますが、Web Server だったり Cache Server だったりそういう余計なものの存在が必要になるのが嫌で Python + tornade に乗り換え、Python3 が嫌で go + gin に乗り換え、今日に至っている私なのでございました。嫌なものから逃げてるだけの人生ですけど、逃げ回っていると以外といいところにたどり着くものなのでこれででいいのだとバカボンのパパみたいに存じてます次第にございます

なので折をみて go に書き換えちゃおうとは思っていたのですが、世界の数十カ国(最初の頃はかぞえてたんだけど、今は何カ国になってるんだろ、もしかして 100いってるかも)の数百人の登録ユーザ様のありがたいご支持を頂いております Atelier UEDA といたしましては、とりあえずサービスの継続性を最優先でさっさと引っ越しちゃった次第なのでございます。そのうちゆっくり go にすればいいし、すでに頂いてます feature request も go 化してからでいいかと余裕こいてたりいたします次第です、プロダクトアウトでございますねえ

# PHP と Apache のインストール

以前、日報には書かなかったのですが C1 みたいな ARM サーバーで galera cluster を組む手順がわからずハマった時にお世話になった Computer for Geeks (opens new window) 様のサイトがいつもいつも頼もしく、掲題の件も こちら (opens new window) の手順でちゃちゃっとやっておしまい、いつも助かりますありがとうございます

ちなみに今どき galera なんて言ってるるのも懸命な諸兄諸姉に軽蔑されそうで怖いのですが、湯水のようにお金を突っ込めば話は別なのかもしれませんが firestore とか dynamo みたいな serverless な db って通信のレイテンシの分、基本、めちゃくちゃ遅いじゃないですか。といって cockroach みたいなのをローカルにインストールしてみるとリソースのオーバーヘッドが予想外にでかくて、単に可用性の確保が目的だったら galera cluster って工学的に適切な選択だとおもうんですよね

で、コードとデータをコピーして、/etc/apache2 の sites-available をコピーして、sites-enable でシンボリックリンクを貼って vertual host の設定もコピーして、lets encript の certification もコピーして、DNS の CNAME を新サーバに書き換え、IoT なサービスなので世界中の全ての端末の host 情報が書き換わるまでしばらくは旧サーバにデータが投げられそうなので(3ヶ月の猶予があるのに性急に引っ越した理由がコレです)落ち着くまでしばらくは旧サーバの cron に rsync を書いておいて

これで一見、サクッと引っ越しができたように見えていたのでございました

# apache の反撃

西部劇のタイトルみたいな小見出しになってしまいましたが、コンピュータって犬と同じで普段は人類の友みたいな顔して従順に言うことを聞いてくれるかわいい奴のフリしてるのでございますが、実はけっこう賢(さか)しくこちらの一番痛いタイミングをじっと狙って、その時がきたら確実に反撃してくる実は恐ろしい敵なのでございます。ちなみにわたくしは無駄に情報工学の博士号を持っていたりするのですが、下々のエンジニアには思いもよらないような高度な学識を駆使して、あらゆる工学的な課題を叡智の力で華麗に解決していく博士様^1のわたくしでございましても、コンピュータに反撃されて泣く 。゚(゚´Д`゚)゚。  のは日常茶飯事なのでございます

ブラウザで URL をいじってたらいきなりこちらの表示

なんと! apache って 2.4 になってもまだ、index を表示するのがデフォルトなの?!

そうなんですよ、前章で言った「web server だったり cache server だったりそういう余計なもんが嫌い」なのは、まさにそいつら自信がお守りが必要な、ほっとくと脆弱性の原因になるような面倒くさい stuff だからなのでございます。こっちは自分のコードに集中したいのになんで人のプロダクトの脆弱性の対処なんかにリソース使わないといけないんだか。redis なんかほっとくと cron に malware 仕掛けてくるしもう

で、さらに嫌らしいことに apache の設定ってバージョンだったりディストリビューションだったりでファイル名とか、置いてある場所とかが違って、ググって出てくる情報が自分の参考にならないという地味に精神的ダメージの大きい嫌がらせをしてきます、えっと indexes やめるのどうするんだっけ、あ、このサイトも役に立たない、の繰り返し

諦めて /etc の下を Indexes で grep したら Debian 10 では /etc/apache2.conf でしたので、以下のように修正します

	#Options Indexes FollowSymLinks
   Options FollowSymLinks

で、restart する前に apache2ctl configtest で設定を確認すると

# apache のモジュールが足りない

あああ、そうだった、そうなのでございました。なにかしようとおもったら必要な module いれないといけないのでした、go に慣れちゃうとこういうのがホントにウザい

まず、RewriteEngine がないとのことなので

a2enmod rewrite

あああ、apache うざい、さらに SSLEngine がないと

a2enmod ssl

メッセージと、a2enmod するモジュール名が一致していないのでいちいちググらないといけないのがまたウザいです

関係ないのですが英国の王子の高貴なお名前のウイリアムはドイツ語ではウィルヘルム、フランス語ではギョーム、そしてイタリア語ではなんとググリエルモなのでございますが、エルモがググりまくってるみたいな名前でかわいいですね。

ウィリアム・テルのお話も、オペラはジョアキーノ・アントーニオ・ロッシーニさんという名前みてすぐわかるようにイタリアの方の作なので、ググリエルモ・テルが正しいお名前になります。弓矢でりんご射る話というよりエルモがシッタカしテル話みたいでおかしいです

# 感想

初心者向けを歌って php を教えてる人とか未だに見かけますけど、go なり python なり、どうかすると C++ のほうがまだよけいなもんに関わり合いにならないで済む分、初心者に優しい気がしますですだよだんなさま


Last Updated: 2021/6/9 11:31:06