博客的再一次折腾

博客之前一直都是用的军哥的LNMP(Linux+Nginx+MySQL+PHP)一键安装脚本搭建WordPress网站,中间偶尔也用过宝塔、1pancel等,但用的最久的还是LNMP,但从2023年下半年,随着作者军哥用爱发电很多年后将网站卖给某公司,有大神发现LNMP.COM网站的代码里被恶意植入了后门代码,而该公司同时收购了oneinstack,同时期出现了恶意代码,LNMP和oneinstack一键网站环境安装包被广泛弃用。

当然替代方案还是有很多的,但还是想借此机会折腾一下新的,那就尝试一下秋水在佬的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

  • 安装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 "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

    终于折腾完了,可以看会剧去了。

6 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注