baserCMSを新規でインストール

baserCMSという国産のCMSを導入します。もしかするとワードプレスのコンテンツを移行するのにそれほど苦労はないかもしれないというのが導入する理由です。さらに、無料で使える国産のオープンソース・ソフトウェアであるのがうれしいです。AWS、GoogleCloud、Azureなどのクラウドに設置することができます。本日はOracleCloudのインスタンスにDockerを使用してインストールします。ホストのOSはUbuntu22.04です。

まずはphpとapacheのコンテナを起動します。

https://hub.docker.com/_/php

docker run --name phptest -d php:8.2.0RC6-apache-buster

コンテナの中を解析するため一度テストで立ち上げます。

コンテナに入ってPHPなどのファイルの場所を確認します。

docker exec -ti phpba bash

/var/www/html→ドキュメントルート
/etc/apache2→webサーバーの設定ファイル
/usr/local/etc/php→PHP関連

適当なディレクトリをホストに作成して、コンテナからホストへディレクトリごとファイルを転送します。

mkdir baser
docker cp phptest:/usr/local/etc/php /root/baser/
docker cp phptest:/etc/apache2 /root/baser/
docker cp phptest:/var/www/html /root/baser/

配置場所の確認とファイルの取得をしたのでコンテナを停止して削除します。

docker stop phpba
docker rm phpba

今度は実際に運用できるようにコンテナを起動します。ホストに取得したファイルとコンテナのファイルの場所が合致するようにして起動します。アクセスできるポート番号の指定もします。あとはbaserCMSをコンテナのドキュメントルートに相当するホストのディレクトリに配置します。

docker run 
 --name phpba 
 --net net1722525 
 -p 8887:80 
 --ip 172.25.25.75 
 -v /root/baser/php:/usr/local/etc/php 
 -v /root/baser/apache2:/etc/apache2 
 -v /root/baser/html:/var/www/html 
 -d php:8.2.0RC6-apache-buster

外部からアクセスできるように、ホストでファイヤーウォールの設定をします。

ufw allow 8887/tcp

最新版のbaserCMSをダウンロードします。

https://basercms.net/

WindowsPCでダウンロードしたのでTeraTermのSSH SCP機能を利用してLinuxにファイルを転送しました。転送後にファイルを展開します。展開する場所は先に示したコンテナのドキュメントルートです。マウントしたのでホストの対応したディレクトリに展開します。

unzip basercms-4.7.0.zip

ディレクトリ(basercms)付きで解凍されたので意図した場所ではなくなりました。ディレクトリの中身をすべて所定のディレクトリに移動します。

cd /baser/html/basercms
mv * /root/baser/html

ここまでで準備はできたはずです。ブラウザでアクセスします。

http://192.168.26.10:8887/

ページが表示されない場合は、コンテナ内でapacheのリライト機能を有効にします。

a2enmod rewrite

ステップ2でエラーが発生しました。

http://192.168.26.10:8887/installations/step2

ディレクトリに無いファイルにアクセスしています。これはapacheのRewrite機能なので問題はありませんでした。アクセスのあったURLを、正規表現で書き換えてから処理するので、このようになったわけです。

解決方法
後から気が付いたのですが隠しファイルやディレクトリは普通に入力したmvコマンドでは移動できないという重大なミスをしていました。
移動できなかった隠しファイルやディレクトリ
.github .editorconfig .htaccess

これらを所定の場所に配置することで次に進むことができました。PHPモジュールのGDとZIPが不足しているので対処します。

コンテナ内で次のコマンドを入力します。

docker exec -ti phpba bash
docker-php-ext-configure gd zip

しかし、エラーが発生しました。次のコマンドに訂正します。

docker-php-ext-install gd zip

今度は違うエラーが発生しました。

No package 'zlib’ found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables ZLIB_CFLAGS
and ZLIB_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

そこでコンテナ内で不足しているパッケージをインストールします。

apt install zlib1g-dev

その後再びPHPモジュールのgdとzipをインストールするコマンドを入力します。

No package 'libpng’ found

エラー内容が変わりました。同様にして不足しているパッケージをインストールしてPHPモジュールをインストールします。

apt install libpng-dev

その後、libzipも不足しているので同様にして対処します。

apt install libzip-dev

これでようやくエラーがなくなりました。ブラウザで再チェックをしますが直りません。この問題はコンテナを再起動することで解決することができました。

docker restart phpba

ブラウザで次に進みます。しかし、MySQLが選択できません。設定ファイルに記述する必要があるようです。設定ファイルの場所は次の通りで、ファイル名は「database.php」です。
app/Config
その前に、新規でデータベースを作成しておきました。さらにデータベースが別コンテナや別サーバーにある場合はユーザーにリモート操作できる許可をしておきます。

外部接続する方法は以前記事にしました。

https://minokamo.tokyo/2022/03/26/4506/
https://minokamo.tokyo/2021/12/10/4190/
記述内容
class DATABASE_CONFIG {
public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => '172.25.25.4',
        'port' => '3306',
        'login' => 'mamushi',
        'password' => 'testpass',
        'database' => 'baser',
        'schema' => '',
        'prefix' => '',
        'encoding' => 'utf8'
);

ブラウザで戻ってデータベースの設定に進むとエラーが発生しました。この「database.php」はデータベースの選択ページに進んだ時、作成されることが判明しました。さらに、MySQLが表示されないのはPDOが必要であることがわかりました。「database.php」を削除します。

rm database.php

コンテナに入ってPDOをインストールします。

docker-php-ext-install pdo_mysql

忘れずにコンテナを再起動します。この作業でMySQLが選択可能になりました。

MySQLにして次に進むとデータベース情報を入力する画面が表示されます。データベースサーバーは別コンテナにあるのでその情報を入力します。先に述べたようにMySQLで外部接続できるデータベースユーザーを作成しておく必要があります。

実は後から気が付いたのですが、WordPressのコンテナを利用するとPDOだけインストールすれば正常に起動しました。

教育

Posted by admin