Setup Arch Linux on MacStudio M1 Ultra 128MB
この記事は、 Install Arch Linux on MacStudio M1 Ultra 128MB のミドルウェア編です。
お品書き
この記事のお品書きは以下の通り。
- vi? nano? いいえ、vscodeです!
- 共有ディレクトリー
- systemctlの使い方
- Apache2.4
- localhost
- 仮想ドメイン
- Nginx
- php
- php-apache
- PHP-FPM
- バージョンの異なるPHPをインストール
- MySQL
- postfix
Visual Studio Codeは神
/etc/
以下のconfファイルの設定で、vi(vim)やnanoを使うのは、正直いってしんどいし、非効率だ。
そこで、VSCodeのSSHリモート接続を使って、ローカルからVSCodeを使って編集する。rootログインがベストだ!そのためには、PermitRootLogin
をno
からyes
に変更する。(自己責任で!)[1]
PermitRootLogin yes
万が一のために、作成者は信頼しないようにしよう!
共有ディレクトリー
共有ディレクトリーは、/mnt/share
にマウントされる。
/etc/fstab
には既に設定が書いてある。
共有ディレクトリーはめちゃくちゃ遅い!
systemctl の使い方
めちゃくちゃ使いにくい。init.dの方が使いやすい。控えめに言って糞。
起動
末尾の.service
はなくても動く。
systemctl start サービス名.service
有効化(自動的に起動させる)
systemctl enable サービス名
有効化されているか確認する
systemctl is-enabled サービス名
unitファイルの一覧を表示する
systemctl list-units-files
systemctl list-units-files | grep httpd
サブコマンド一覧
- start:サービスの起動
- stop:サービスの終了
- restart:サービスを再起動
- reload:サービスの設定をもう一度読み込む
- status:サービスの状況を表示する
- enable:サービスが自動的に起動するようにする
- disable:サービスが自動的に起動しないようにする
- list-unit-files:すべてのUnitを表示する
Apache2.4
Apacheのインストール
sudo pacman -Syy
sudo pacman apache
sudo apachectl start
http://192.168.64.2/
にアクセスして、表示されるか確認する。
Apacheを自動的に起動させる
サービス名がapache
ではなく、httpd
なことに注意する。[2]
sudo systemctl enable httpd
Virtual Domain - 仮想ドメイン
Virtual Domain(仮想ドメイン)とは、一つのWebサーバー上に、複数のサイト(異なるドメイン)を公開する方法。
Apache 2.2からできるはずだが、2.2ではSSLは一つのサイト(ドメイン)しか公開できなかった。(URLも暗号化されるため)
Apache 2.4からは、SSLのサイトも仮想ドメインとして公開できるようになった!やった!!
設定ファイルの賢いロード方法
Includeで、confファイルをロードする指定は、ワイルドカード(*)が使える。
仮想ホスト用のディレクトリーを作成し、そこに保存したconfファイルは全てロードするように設定する。
読み込ませたくないconfファイルは、拡張子を.con_
などと変更するだけでよい。賢い![3]
sudo mkdir /etc/httpd/conf/vhost
sudo vi /etc/httpd/httpd.conf
Include conf/vhost/*.conf
任意のディレクトリーをドキュメント・ルートにして公開する方法
自分の好きな場所(私の場合は/www/
)にサイトを作って公開したい場合は、設定を追加する必要がある。
sudo mkdir -p /www/localhost/
sudo vi /etc/httpd/conf/vhost/www.conf
ServerName alarm.localhost
ServerAdmin alarm@localhost
<Directory /www/>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
仮想ドメインの設定は、必ず2つ以上のドメインを設定する必要がある。一つだとエラーになる。
この設定のポイントは、グローバルIPアドレスからのアクセスの場合は、デフォルトの空のディレクトリーを表示し、プライベートIPアドレスの場合には、プライベートなサイトを公開するところ。
<VirtualHost *:80>
ServerName 93.184.216.34
DocumentRoot "/srv/http/"
ErrorLog "/var/log/httpd/errors.log"
CustomLog "/var/log/httpd/access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAlias 192.168.0.2
ServerName localhost
DocumentRoot "/www/localhost/"
ErrorLog "/var/log/httpd/localhost-errors.log"
CustomLog "/var/log/httpd/localhost-access.log" common
</VirtualHost>
configtestは、設定にミスがないか確認をしてくれる。
設定ミスがなければ、gracefulで安全に再起動する。
sudo apachectl configtest
sudo apachectl graceful
PHP
インストール
sudo pacman -Syy
sudo pacman -Ss php-apache
php-apache
と-legacy-apache
がある。最新と一つ前の古いバージョン。最新を入れる。
php-fpm
も、php-legacy-fpm
がある。面倒なトラブルはごめんなので、常に最新を選択しておくこと。
extra/php-apache 8.2.5-1
Apache SAPI for PHP
extra/php-legacy-apache 8.1.18-1
Apache SAPI for PHP
設定
/etc/httpd/httpd.conf
を変更する。
mpm_event_moduleを無効にして、mpm_prefork_moduleを有効にする
公式サイトの記述を確認する。
php-apache に含まれている libphp7.so は mod_mpm_event で機能せず、mod_mpm_prefork でしか動作しないために上記の設定が必要になっています。設定しないと以下のエラーが表示されます。
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
AH00013: Pre-configuration failed
httpd.service: control process exited, code=exited status=1
PHPのライブラリーを読み込む順番は決まっている
LoadModule dir_module modules/mod_dir.so
の次の行に以下の行を追加する。
LoadModule php_module modules/libphp.so
AddHandler php-script php
httpd.confの最後に以下を追加する。
Include conf/extra/php_module.conf
sudo apachectl restart
で再起動すると有効になっている。
Nginx
sudo pacman -Syy
sudo pacman -S nginx
sudo apachectl stop
sudo systemctl enable nginx
sudo systemctl start nginx
PHP-FPM
sudo pacman -Syy
sudo pacman -S php-fpm
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
Discussion