banner
Feng

Feng's xLog

我在xLog上的窝

博客的再一次折腾

博客之前一直都是用的軍哥的 LNMP(Linux+Nginx+MySQL+PHP)一鍵安裝腳本搭建 WordPress 網站,中間偶爾也用過寶塔、1pancel 等,但用的最久的還是 LNMP,但從 2023 年下半年,隨著作者軍哥用愛發電很多年後將網站賣給某公司,有大神發現 LNMP.COM 網站的代碼裡被惡意植入了後門代碼,而該公司同時收購了 oneinstack,同期出現了惡意代碼,LNMP 和 oneinstack 一鍵網站環境安裝包被廣泛棄用。

image

當然替代方案還是有很多的,但還是想借此機會折騰一下新的,那就嘗試一下秋水在佬的 LCMP (Linux + Caddy + MariaDB + PHP) 腳本(Github 地址)。Caddy 2 是一款現代、輕量級的開源 Web 伺服器,以其簡單的配置語法、內置自動 HTTPS 支持、動態配置和服務發現、現代的 HTTP/2 和 HTTP/3 支持、插件系統以及易於部署和管理而脫穎而出。當然論功能、生態、性能等,目前還是 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) installation complete

個人感覺 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#

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 "Backup website files..."
for dd in ${Backup_Dir[@]};do
    Backup_Dir ${dd}
done
echo "Backup Databases..."
for db in ${Backup_Database[@]};do
    Backup_Sql ${db}
done
echo "Delete old backup files..."
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

終於折騰完了,可以看會劇去了。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。