博客の前には、常に军哥の LNMP(Linux+Nginx+MySQL+PHP)ワンクリックインストールスクリプトを使用して WordPress サイトを構築していました。途中で宝塔や 1pancel なども使用しましたが、最も長く使用していたのは LNMP でした。しかし、2023 年下半期から、作者の军哥が何年もの間ウェブサイトをある会社に売却したことにより、LNMP.COM のコードに悪意のあるバックドアコードが埋め込まれていることが発見されました。同時に、oneinstack も買収され、悪意のあるコードが出現しました。LNMP と oneinstack のワンクリックウェブサイト環境インストールパッケージは広く廃止されました。
もちろん、代替案はまだたくさんありますが、新しいものを試してみたいという機会があるので、秋水在佬の LCMP(Linux + Caddy + MariaDB + PHP)スクリプトを試してみましょう(Github アドレス)。Caddy 2 は、シンプルな構成構文、組み込みの自動 HTTPS サポート、動的な構成とサービスディスカバリ、モダンな HTTP/2 および HTTP/3 サポート、プラグインシステム、簡単なデプロイと管理などの特徴で、モダンで軽量なオープンソースの Web サーバです。もちろん、機能、エコシステム、パフォーマンスなどの面では、現時点では Nginx の方が優れています。
以下では、秋水大佬の LCMP ワンクリックスクリプトを使用して WordPress を構築する方法を紹介します。
現在サポートされているシステム#
- Enterprise Linux 7(CentOS 7、RHEL 7)
- Enterprise Linux 8(CentOS Stream 8、RHEL 8、Rocky Linux 8、AlmaLinux 8、Oracle Linux 8)
- Enterprise Linux 9(CentOS Stream 9、RHEL 9、Rocky Linux 9、AlmaLinux 9、Oracle Linux 9)
- Debian 10
- Debian 11
- Debian 12
- Ubuntu 20.04
- Ubuntu 22.04
現在サポートされているソフトウェア#
- Caddy 2
- MariaDB 10.11
- PHP-7.4、PHP-8.0、PHP-8.1、PHP-8.2、PHP-8.3
インストールの前に依存関係をインストールします#
apt update && apt -y upgrade
apt install wget -y
apt install socat -y
apt install git -y
LCMP のインストールを開始します#
- Debian 10+ / Ubuntu 20.04 + の場合:
apt-get -y install wget git
git clone https://github.com/teddysun/lcmp.git
cd lcmp
chmod 755 *.sh
./lcmp.sh 2>&1 | tee lcmp.log
- Enterprise Linux 7 / 8 / 9 の場合:
yum -y install wget git
git clone https://github.com/teddysun/lcmp.git
cd lcmp
chmod 755 *.sh
./lcmp.sh 2>&1 | tee lcmp.log
以下のような出力が表示されたら、LCMP のインストールが完了です。
LCMP(Linux + Caddy + MariaDB + PHP)のインストールが完了しました
個人的には、LCMP の操作コマンドは LNMP と少し似ていると感じます。なぜなら、仮想ホストを追加する方法が次のようになるからです:
lcmp vhost add
見覚えがありますか?C と N の違いですね。具体的なコマンドと使用方法については、秋水大佬のGithubを参照してください。
WordPress のウェブサイト構築プロセスについては、詳細は省略します。それは問題ではありません。ただし、私は WordPress で写真をアップロードしたり、プラグインをダウンロードしたりする際にパーミッションの問題に遭遇しました(おそらく私の個別のケースです)。以前はウェブサイトディレクトリに www ユーザーのパーミッションを与えていましたが、Caddy を使用すると、この操作を行ってもバックエンドにアクセスできない問題が発生します。後で多くのウェブサイトを参照しましたが、ウェブサイトディレクトリに caddy ユーザーのパーミッションを与える必要があることがわかりました。具体的な操作は次のとおりです(ウェブサイトディレクトリが /data/www/ であると仮定します):
chown -R caddy:caddy /data/www/*
ウェブサイトが構築されたので、必要なバックアップ手順も必要です。秋水大佬のワンクリックスクリプトにはバックアップスクリプトが含まれていないため、军哥の Github からbackup.sh
を抽出してカスタマイズするだけで済みます。ローカルバックアップに加えて、バックアップファイルを阿里云の OSS にアップロードすることで、二重のバックアップを作成して予期しない問題に備えます。以下は、大まかな手順とコードです:
阿里云の ossutil を設定する#
- ossutil をインストールします(公式チュートリアルを参照https://help.aliyun.com/zh/oss/developer-reference/install-ossutil?spm=a2c4g.11186623.0.0.5ed75436NQwjIE)
sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
- ossutil を設定します
ossutil config
プロンプトに従って Endpoint、AccessKey ID、AccessKey Secret、STSToken パラメータを設定します。対応する値の取得方法は、すべて阿里云で説明されていますが、stsToken の値については、私は理解できなかったので、多くの時間を無駄にしました。後で分かったのは、直接エンターキーを押して空白のままにするだけでよいということです。ああ!
バックアップスクリプトをカスタマイズする#
# ウェブサイトのバックアップパスを設定します
Backup_Home="/data/www/backup/"
# データベースパスを設定します
MySQL_Dump="/usr/bin/mysqldump"
# バックアップするウェブサイトのパスを設定します
Backup_Dir=("/data/www/a.com" "/data/wwww/b.com")
# バックアップするデータベース名を設定します。異なるデータベーステーブルはスペースで区切ります
Backup_Database=("wordpress_" "typecho_")
# Mysqlのユーザー名とパスワードを設定します
MYSQL_UserName='root'
MYSQL_PassWord='123456'
TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql
OldWWWBackup=www-*-$(date -d -3day +"%Y%m%d").tar.gz
OldDBBackup=db-*-$(date -d -3day +"%Y%m%d").sql
Backup_Dir()
{
Backup_Path=$1
Dir_Name=`echo ${Backup_Path##*/}`
Pre_Dir=`echo ${Backup_Path}|sed 's/'${Dir_Name}'//g'`
tar zcf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz -C ${Pre_Dir} ${Dir_Name}
}
Backup_Sql()
{
${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord $1 > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql
}
if [ ! -f ${MySQL_Dump} ]; then
echo "mysqldump command not found.please check your setting."
exit 1
fi
if [ ! -d ${Backup_Home} ]; then
mkdir -p ${Backup_Home}
fi
echo "ウェブサイトファイルをバックアップしています..."
for dd in ${Backup_Dir[@]};do
Backup_Dir ${dd}
done
echo "データベースをバックアップしています..."
for db in ${Backup_Database[@]};do
Backup_Sql ${db}
done
echo "古いバックアップファイルを削除しています..."
rm -f ${Backup_Home}${OldWWWBackup}
rm -f ${Backup_Home}${OldDBBackup}
# バックアップしたデータベースを阿里云にアップロードします。Bucket-nameを対応する名前に変更してください
ossutil cp -r -f /data/www/backup/$TodayDBBackup oss://Bucket-name/
ossutil cp -r -f /data/www/backup/$TodayWWWBackup oss://Bucket-name/
テストして、バックアップディレクトリに対応するファイルがあることを確認し、次に阿里云 OSS で確認します。すべて表示されていれば、成功です。ここでは、データベースファイルのみを阿里云の OSS にアップロードしています。最後に、クロンジョブを追加することを忘れないでください。以下を参考にしてください:
[root@localhost ~]# crontab -e
オプション:
-e: crontabジョブを編集する
-l: crontabジョブを表示する
-r: 現在のユーザーのすべてのcrontabジョブを削除する
0 14 * * * /bin/bash /data/www/backup/backup.sh
やっと終わりました。ドラマを見る時間です。