Joomla! 4.3 on OpenBSD 7.3: インストール
Tags: joomla, php, cms, openbsd
Published: 2023-09-07 11:17:38

## はじめに

[Joomla!](https://www.joomla.org/) は、広く使われている [PHP](https://www.php.net/) のコンテンツ管理システム (CMS) の一つです。ブログプラットフォームとしてだけでなく、ポータルサイトのような Web サイトにも適しています。最初のバージョンは 2005 年にリリースされました。そこから長い進歩を経て、最新のメジャーバージョンが 2 年前 (2021 年 8 月 17 日) にリリースしました。

Joomla! のインストールの流れを本記事で書きます。堅牢な OS である [OpenBSD](https://www.openbsd.org/) と PHP/[PHP-FPM](https://www.php.net/manual/install.fpm.php) を使用します。いずれも現時点での最新のものです。

### 環境

- OS: OpenBSD [7.3](https://www.openbsd.org/73.html)
- データベース: [MariaDB](https://mariadb.com/) [10.9](https://mariadb.com/kb/en/changes-improvements-in-mariadb-109/)
- Web: OpenBSD [httpd](https://man.openbsd.org/httpd.8)
  - 設定ファイルは [`httpd.conf`](https://man.openbsd.org/httpd.conf.5)
- アプリ: PHP [8.2](https://www.php.net/releases/8.2/)
  - PHP-FPM
- CMS: Joomla! [4.3](https://www.joomla.org/announcements/release-news/5882-joomla-4-3-0-stable-featuring-guided-tours.html).4

#### 参考記事

以下のいずれかが完了していない場合、お読みください:

- [MariaDB](https://obsd.solutions/ja/blog/2023/09/05/mariadb-109-on-openbsd-73-install/index.html) のインストール
- [httpd](https://obsd.solutions/ja/blog/2023/08/06/openbsd-httpd-73-web-server/index.html) のセットアップ
- [PHP](https://obsd.solutions/ja/blog/2023/08/06/php-fpm-82-on-openbsd-73/index.html) のインストール

#### Joomla! システム要件に関わる注意書き

PHP 8.2 の使用は、現在のところ Joomla! から公式に推奨されてはいません。 (参照: [技術要件 (英語)](https://downloads.joomla.org/technical-requirements)) しかしながら 8.2 は「サポートの強化」を 4.3 リリースで受けました。(参照: 公式 ["What’s new in Joomla 4.3.0 Stable?" (英語)](https://www.joomla.org/announcements/release-news/5882-joomla-4-3-0-stable-featuring-guided-tours.html)) PHP 8.2 を使うことは 8.1 と比べて良い選択肢になったと言えるでしょう。また 8.0 というもう 1 つの選択肢もありますが、こちらは間もなくサポートが終了します。 (参照: PHP の [サポートバージョン (英語)](https://www.php.net/supported-versions.php))

## チュートリアル

### データベースの準備

クライアントツールでサーバーに接続しましょう (たとえば `mysql -u root -p` を実行します):

```sql
-- データベースの作成
CREATE DATABASE <dbname> \
    CHARACTER SET utf8mb4 \
    COLLATE utf8mb4_unicode_ci;

-- ユーザーの作成
GRANT ALL PRIVILEGES \
    ON <dbname>.* \
    TO <dbuser>@'localhost' \
    IDENTIFIED BY '<dbpass>';

-- 権限をリロード
FLUSH PRIVILEGES;
```

### PHP エクステンションのインストールと有効化

MariaDB 接続のために [`mysqli`](https://www.php.net/manual/book.mysqli.php) を取得しましょう:

```console
$ doas pkg_add php-mysqli
```

出力内容、私の選択、および実行結果は、以下の通りでした:

```console
quirks-6.122 signed on 2023-09-01T21:25:11Z
Ambiguous: choose package for php-mysqli
a	0: <None>
	1: php-mysqli-7.4.33
	2: php-mysqli-8.0.30
	3: php-mysqli-8.1.22
	4: php-mysqli-8.2.9
Your choice: 4
php-mysqli-8.2.9: ok
```

有効化しておく必要があります (なお [`opcache`](https://www.php.net/manual/book.opcache.php) もあわせて有効化します)。こちらを実行します:

```console
$ doas ln -s /etc/php-8.2.sample/* /etc/php-8.2/
```

これで有効化されました:

```console
$ ls -l /etc/php-8.2
total 0
lrwxr-xr-x  1 root  wheel  30 Sep  2 10:09 mysqli.ini -> /etc/php-8.2.sample/mysqli.ini
lrwxr-xr-x  1 root  wheel  31 Sep  2 10:09 opcache.ini -> /etc/php-8.2.sample/opcache.ini
```

### Joomla! パッケージの取得

前提: **`/var/www/joomla` を作業ディレクトリ**とします。

GitHub の [releases](https://github.com/joomla/joomla-cms/releases) からファイルをダウンロードするために、以下を実行します:

```console
$ curl -LO https://github.com/joomla/joomla-cms/releases/download/4.3.4/Joomla_4.3.4-Stable-Full_Package.tar.gz
```

解凍と展開と行います:

```console
$ tar xzf Joomla_4.3.4-Stable-Full_Package.tar.gz
```

パーミッションを Web ユーザー向けにします:

```console
$ doas chown -R www:www ./*
```

### `httpd` (Web) サーバーの追加

httpd または PHP-FPM 8.2 デーモンが有効化されていない場合、まずそれを行うことが必要です。 (参照: [参考記事](#参考記事))

それらが完了している場合は、続行して Joomla! サーバーの定義を追加します:

```console
$ doas nvim /etc/httpd.conf
```

以下のように記述します。ここで `<fqdn>` は、あなた次第です。`<chroot-parent-dir>` は空文字列のはずです。 (これは作業ディレクトリ次第です。) さらに、TLS を有効にするためには、TLS 構成ファイルが必要です (後述)。

```apache
server "<fqdn>" {
        listen on egress tls port https
        tls {    
                certificate     "/etc/ssl/<fqdn>.crt"
                key             "/etc/ssl/private/<fqdn>.key"
        }
        log {
                access  "<fqdn>-access.log"
                error   "<fqdn>-error.log"
        }

        # `/var/www` 以下のどこを作業ディレクトリとしているかと `chroot` の設定次第です:
        root "<chroot-parent-dir>/joomla"
        directory index index.php

        location "/*.php" { 
                fastcgi socket "/run/php-fpm.sock"
        } 
        location "/*.php[/?]*" { 
                fastcgi socket "/run/php-fpm.sock"
        } 
}
```

デーモンを再起動します:

```console
$ doas rcctl restart httpd
httpd(ok)
httpd(ok)
```

これで Joomla! の Web インストーラーにブラウザから接続できるようになりました。`https://<fqdn>/` にアクセスしましょう !!

#### TLS 構成ファイル

[`acme-client`](https://man.openbsd.org/acme-client.1) を用いて [Let's Encrypt](https://letsencrypt.org/) にリクエストすることで、ファイルを取得できます。 (参照: OpenBSD [acme-client の設定方法](https://obsd.solutions/ja/blog/2023/09/09/openbsd-acme-client-70-for-letsencrypt-certificates/index.html)).

別の方法もあります。自己署名証明書としてつくる方法です。以下のようなコマンド操作で行えます:

```console
$ cd /etc/ssl

$ # [ 定数 ]
$ # ksh の場合:
$ export MY_DOMAIN="..."
$ export MY_COUNTRY_CODE="XX"
$ export MY_STATE="..."
$ export MY_ORGANIZATION="..."
$ # fish の場合:
$ # set -x MY_DOMAIN "..."; (...)

$ # [ 生成 ]
$ doas openssl req -newkey rsa:2048 -new -nodes -x509 -days 36500 -keyout private/$MY_DOMAIN.key -out $MY_DOMAIN.crt \
    -subj "/C=$MY_COUNTRY_CODE/ST=$MY_STATE/L=/O=$MY_ORGANIZATION/OU=/CN=$MY_DOMAIN"
$ doas chmod 400 private/$MY_DOMAIN.key

$ # 作業ディレクトリに戻る
```

#### TLS 接続をサポートしないサーバーの場合 (オプション)

https では無く http を使うサーバーを立てることもできます (安全性は下がります):

```diff
# httpd.conf
<         listen on egress tls port https
<         tls {    
<                 certificate     "/etc/ssl/<fqdn>.crt"
<                 key             "/etc/ssl/private/<fqdn>.key"
<         }
>         listen on egress port http
```

#### TLS 接続あり無し両方の通信をサポートするサーバーの場合 (オプション)

それから、http リクエストをすべて https にリダイレクトさせることも、必要見合いで可能です:

```apache
# httpd.conf
server "<fqdn>" {
        listen on egress http
        # (...)
        block return 301 "https://$SERVER_NAME$REQUEST_URI"
}
server "<fqdn>" {
        listen on egress tls port https
        # (...)
}
```

### Web インストーラーの実行

インストーラーに従って進めれば大丈夫です。なお私の時は、上述の `<fqdn>` は `192.168.122.175` でした。

デフォルトの言語を選択して、サイト名を入力します:

![joomla-4-install-01](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nw715nnhoaebnqsv5e13.png)

システム管理者を作成します:

![joomla-4-install-02](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2k1h7xjbbchn14dtft5w.png)

データベース情報を入力します。そしてボタンをクリックすると実際のインストールが始まります:

![joomla-4-install-03](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l9awwb373pk6s8zfe9xa.png)

成功メッセージが表示されます:

![joomla-4-install-04](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2ml4y4n2qemlexm28gf.png)

### インストール内容の検証

`https://<fqdn>/` へのアクセスで、フロントページを表示できます:

![joomla-4-home-01](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/je3e8vepim9pwmwrjp27.png)

管理画面の入口は `https://<fqdn>/administrator/` です:

![joomla-4-admin-01](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8rxij1spvpdxcfwkxcdd.png)

認証が成功すると管理者パネルが表示されます:

![joomla-4-admin-02](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtdscgmx9pwqxaeqc113.png)

## おわりに

これで最新の Joomla! を使用して Web サイトを構築する準備が整いました。非常にささいな操作に関する例を示してみます。メディアビューでメディアファイルをアップロードしてみます:

![joomla-4-media-01](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9lezlqd6uqv1qnjka5vs.png)

"Upload" をクリックして、ファイルを選択します。OpenBSD ロゴで試したところ、成功しました :)

![joomla-4-media-02](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7ohifdrd62423zqdqal.png)

本記事で示したように、httpd と PHP-FPM が構成されている場合、OpenBSD 上で PHP アプリを構築・公開するのは難しいことではありません。OpenBSD プロジェクトとコミュニティが PHP と Web サービス関連のコンポーネントをサポートしてくれているためです。

🕊 Happy serving 💫