在网上查询了一下halo定时备份有三种方案:邮箱和Dropbox,以及github。

备份到QQ邮箱

安装邮件发送依赖组件

Centos 7

1
yum install sendmail mailx -y

Centos 8

1
2
3
yum -y install postfix sendmail-cf mailx
service postfix start
sudo systemctl enable postfix

Debian

  1. 安装 mailtuils:
    1
    sudo apt install mailutils -y
  2. 安装postfix后缀:
    1
    sudo apt install postfix
    在安装过程即将结束时,您将看到一个类似于下图中的窗口的窗口。默认选项是Internet Site。这是本教程的推荐选项,请按TAB,然后按ENTER
    之后,您将获得另一个窗口,就像下一个图像中的窗口一样。该系统邮件名称应该是一样的,你分配给服务器,当你在创造它的名字。如果它显示子域subdomain.example.com,请将其更改为ust example.com。完成后,按TAB,然后ENTER

修改附件发送大小限制

看下现在邮件的大小限制:

1
sudo postconf message_size_limit
message_size_limit = 20480000

差不多是10M,放大20倍,应该差不多了。

1
sudo postconf -e "message_size_limit = 204800000"

获得&编辑备份脚本

1
wget https://raw.githubusercontent.com/iwyang/scripts/master/halo_email_backup.sh

创建备份文件夹

如果选择将文件备份到临时目录的话,这步可跳过,直接修改脚本即可。我直接跳过了这一步。
1
mkdir -p /home/back

修改脚本

脚本原来模样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# 进入到备份文件夹
cd /home/back
#压缩网站数据
tar zcvf web_$(date +"%Y%m%d").tar.gz 网站目录
# 导出数据库到备份文件夹内
mysqldump -uroot -p数据库密码 数据库名称 > web_data_$(date +"%Y%m%d").sql
# 以附件形式发送数据库到指定邮箱
echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -a web_data_$(date +"%Y%m%d").sql 收件人邮箱
# 删除本地3天前的数据
rm -rf web_$(date -d -3day +"%Y%m%d").tar.gz web_data_$(date -d -3day +"%Y%m%d").sql
# 登录FTP
lftp ftp地址 -u ftp用户名,ftp密码 << EOF
# 进入FTP根目录
cd ftp根目录文件夹
# 删除3天前备份文件
mrm web_$(date -d -3day +"%Y%m%d").tar.gz
mrm web_data_$(date -d -3day +"%Y%m%d").sql
# 上传当天备份文件
mput web_$(date +"%Y%m%d").tar.gz
mput web_data_$(date -d -3day +"%Y%m%d").sql
bye
EOF

根据实际需求,改成下面模样:

1
vi email.sh
1
2
3
4
5
#!/bin/bash
cd /tmp
tar zcvf web_$(date +"%Y%m%d").tar.gz /root/.halo
echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -a web_$(date +"%Y%m%d").tar.gz 455343442@qq.com
rm -f web_$(date +"%Y%m%d").tar.gz

上面代码中最后的rm -f web_$(date +"%Y%m%d").tar.gz,表示删除本地的临时文件。

注意Debian下要讲-a 改成 -A(如下)

1
2
- echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -a web_$(date +"%Y%m%d").tar.gz 455343442@qq.com
+ echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -A web_$(date +"%Y%m%d").tar.gz 455343442@qq.com

设置定时任务

赋予文件执行权限
1
chmod +x /root/email.sh

运行的时候就输入下面的代码即可:./email.sh

设定自动任务
1
crontab -e
1
01 00 * * * /root/email.sh

意思是每天凌晨0:01运行这个脚本。

备份到Dropbox

创建Dropbox应用

首先,需要创建一个Dropbox应用,可以从该网址进行创建:https://www.dropbox.com/developers/apps/create

在这里,应用类型选择Dropbox API,数据存储类型选择App folder,然后命名创建。然后切换到Permissions选项卡,勾选相应权限。最后记录下App keyApp secret,下面要用。

下载dropbox_uploader.sh

dropbox_uploader 是一个第三方Dropbox备份脚本,首先下载脚本:

1
curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

然后,为该脚本添加执行权限:

1
chmod +x dropbox_uploader.sh

执行该脚本,绑定APP:

1
./dropbox_uploader.sh

在终端里输入App keyApp secret,接着会返回一个网址,浏览器打开,复制得到的token,最后在终端里完成绑定。

之后可以执行下面的命令测试上传,提示Done就是绑定成功了:

1
./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old

如果报错unlink,先执行命令rm ~/.dropbox_uploader,删除相应文件夹,然后删除上面申请的APP。按上面的操作重新申请

APP、重新绑定,一般第二次申请就会成功。

编写备份脚本

编写定时备份脚本,取名为backup.sh。代码原来模样如下:

1
vi backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
SCRIPT_DIR="/root" #这个改成你存放刚刚下载下来的dropbox_uploader.sh的文件夹位置
DROPBOX_DIR="/backup" #这个改成你的备份文件想要放在Dropbox下面的文件夹名称,如果不存在,脚本会自动创建
BACKUP_SRC="/home/wwwroot /usr/local/nginx/conf" #这个是你想要备份的本地服务器上的文件,不同的目录用空格分开
BACKUP_DST="/tmp" #这个是你暂时存放备份压缩文件的地方,一般用/tmp即可
MYSQL_SERVER="localhost" #这个是你mysql服务器的地址,一般填这个本地地址即可
MYSQL_USER="mysqluser" #这个是你mysql的用户名名称,比如root或admin之类的
MYSQL_PASS="password" #这个是你mysql用户的密码
# 下面的一般不用改了
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tar.gz"
# 备份mysql数据库并和其它备份文件一起压缩成一个文件
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --all-databases > "$NOW-Databases.sql"
echo "数据库备份完成,打包网站数据中..."
tar cfzP "$DESTFILE" $BACKUP_SRC "$NOW-Databases.sql"
echo "所有数据打包完成,准备上传..."
# 用脚本上传到dropbox
$SCRIPT_DIR/dropbox_uploader.sh upload "$DESTFILE" "$DROPBOX_DIR/$NOW.tar.gz"
if [ $? -eq 0 ];then
echo "上传完成"
else
echo "上传失败,重新尝试"
fi
# 删除本地的临时文件
rm -f "$NOW-Databases.sql" "$DESTFILE"

根据实际情况改成下面模样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
SCRIPT_DIR="/root"
DROPBOX_DIR="/backup"
BACKUP_SRC="/root/.halo"
BACKUP_DST="/tmp"
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tar.gz"
echo "打包网站数据中..."
tar cfzP "$DESTFILE" $BACKUP_SRC
echo "所有数据打包完成,准备上传..."
$SCRIPT_DIR/dropbox_uploader.sh delete "$DROPBOX_DIR"
$SCRIPT_DIR/dropbox_uploader.sh upload "$DESTFILE" "$DROPBOX_DIR/$NOW.tar.gz"
if [ $? -eq 0 ];then
echo "上传完成"
else
echo "上传失败,重新尝试"
fi
rm -f "$DESTFILE"

先用$SCRIPT_DIR/dropbox_uploader.sh delete "$DROPBOX_DIR"删除Dropbox备份文件夹,再上传文件。这样就保证Dropbox永远只有一个最新的备份文件,不用手动删除多余的备份文件了


当然也可以通过脚本设置保留旧数据的时长。如下面一个脚本就是让旧数据在Dropbox保留7天,本地保留10天。(不过觉得没有必要,还是上面的方法简单,下面方法尝试过,老是出现问题,旧数据删除不了,不想折腾了)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash

# 定义需要备份的目录
WEB_DIR=/home/www # 网站数据存放目录

# 定义备份存放目录
DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录
LOCAL_BAK_DIR=/home/backup # 本地备份文件存放目录

# 定义备份文件名称
DBBakName=DB_$(date +%Y%m%d).tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz

# 定义旧数据名称
Old_DROPBOX_DIR=/$(date -d -7day +%Y-%m-%d)
OldDBBakName=DB_$(date -d -10day +%Y%m%d).tar.gz
OldWebBakName=Web_$(date -d -10day +%Y%m%d).tar.gz

cd $LOCAL_BAK_DIR

#使用命令导出数据库
mongodump --out $LOCAL_BAK_DIR/mongodb/ --db bastogne

#压缩数据库文件合并为一个压缩文件
tar zcf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/mongodb
rm -rf $LOCAL_BAK_DIR/mongodb

#压缩网站数据
cd $WEB_DIR
tar zcf $LOCAL_BAK_DIR/$WebBakName ./*

cd ~
#开始上传
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName
./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName

#删除旧数据
rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/

echo -e "Backup Done!"

赋予文件执行权限

1
chmod +x backup.sh

运行的时候就输入下面的代码即可:./backup.sh

设置定时任务

1
crontab -e
1
02 00 * * * /root/backup.sh

这样,就可以每天凌晨00:02自动备份到Dropbox了。

备份到github

准备工作

首先当然是在服务器上安装GIt,配置ssh公钥,并且在github上添加服务器ssh公钥。具体过程略。

初始化仓库

1
2
3
4
5
6
cd /root/.halo
git init
git remote add origin git@github.com:iwyang/halo.git
git add .
git commit -m "site backup"
git push --force origin master

注意要删除主题文件夹下的.git文件夹,不然的话就无法备份主题了。当然也可以不备份主题,因为主题所有配置选项都在数据库里。如果这样的话,命令要作如下调整:

1
git add application.yaml upload/ db/

设置定时任务

编写备份脚本

1
2
cd /root
vi github.sh

脚本原来模样:

1
2
3
4
5
6
7
8
#!/bin/bash
#进入到网站根目录,记得修改为自己的站点
cd /home/xxx.com
#将数据库导入到该目录,这里以mysql为例,passwd为数据库密码,typecho为数据库名称,typecho.sql为备份的数据库文件
mysqldump -uroot -ppasswd typecho > typecho.sql
git add -A
git commit -m "backsite"
git push -u origin master

根据实际情况修改如下:

1
2
3
4
5
6
#!/bin/bash
echo -e "\033[0;32mDeploying updates to github...\033[0m"
cd /root/.halo
git add .
git commit -m "site backup"
git push --force origin master

为了防止服务器里.git文件夹过大,脚本可以作如下调整:

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
echo -e "\033[0;32mDeploying updates to github...\033[0m"
cd /root/.halo
rm -rf .git
git init
git remote add origin git@github.com:iwyang/halo.git
git add .
git commit -m "site backup"
git push --force origin master
rm -rf .git

赋予文件执行权限

1
chmod +x /root/github.sh

设定自动任务

1
crontab -e
1
03 00 * * * /root/github.sh

意思是每天凌晨0:03运行这个脚本。

还原博客

1
git clone git@github.com:iwyang/halo.git .halo

接下来就是配置个 Java 环境,下载个 Halo 运行包,配置域名访问。具体可参考官方文档

总结

halo博客迁移后,最好删除logs文件夹下的日志文件。


SCP命令

下载文件

从服务器下载文件到本地,在Git Bash执行:

1
scp root@104.224.191.88:/root/.ssh/mysite ssh

意思是将服务器/root/.ssh目录下的mysite文件复制到当前路径下ssh文件夹下。

上传文件

从本地上传文件到服务器,在Git Bash执行:

1
scp .halo.zip root@137.220.43.191:/root/

意思是将当前目录下.halo.ip文件上传到服务器/root/目录下

wordpress相关

wordpress常用mysql命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1.删除数据库
mysqladmin -u root -p drop wordpress
# 2.新建一个空数据库
mysqladmin -u root -p create wordpress
# 3.导入数据
mysql -uroot -p”你的密码” wordpress < 你的数据sql文件
# 4.更新Url
# 4.1.连接数据库
mysql -u root -p
# 4.2. 选择数据库
use wordpress
# 4.3.更新URL
SELECT * FROM wp_options WHERE option_name = 'home';
UPDATE wp_options SET option_value="https://new_url/" WHERE option_name = "home";

SELECT * FROM wp_options WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value="https://new_url/" WHERE option_name = "siteurl";

Debian 10 五分钟/一键安装Wordpress

1
2
3
4
5
6
#Debian8下载脚本
wget http://w3.gubo.org/pubfiles/tylemp/10/tylemp.sh
#安装稳定版Nginx+PHP+MariaDB
bash tylemp.sh stable
#安装wordpress,www.yourdomain.com即为你的域名
bash tylemp.sh wordpress www.yourdomain.com

命令列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bash tylemp.sh system # 优化系统,删除不需要组件,dropbear替代sshd 
bash tylemp.sh exim4 # 更轻量级邮件系统
bash tylemp.sh mysql # 安装mysql
bash tylemp.sh nginx # 安装nginx,默认一个进程,可调整
bash tylemp.sh php # 安装php,包含php5-gd,可使用验证码
bash tylemp.sh stable # 安装上面所有,软件是debian官方stable源,版本较旧
bash tylemp.sh wordpress www.yourdomain.com # 一键安装wordpress, 数据库自动配置好。
bash tylemp.sh vhost www.yourdomain.com # 一键安装静态虚拟主机。
bash tylemp.sh dhost www.yourdomain.com # 一键安装动态虚拟主机,方便直接上传网站程序。
bash tylemp.sh typecho www.yourdomain.com # 安装typecho,提供数据库名,密码等自主添加完成安装
bash tylemp.sh phpmyadmin www.yourdomain.com # 一键安装phpmyadmin 数据库管理软件,用http://www.yourdomain.com/phpMyAdmin访问
bash tylemp.sh addnginx 2 #调整nginx进程,这里2表示调整后的进程数,请根据vps配置(cpu核心数)更改
bash tylemp.sh sshport 22022 #更改ssh端口号22022,建议更改10000以上端口。重启后生效。
bash tylemp.sh rainloop www.yourdomain.com # 增加Gmail的web客户端一键安装
bash tylemp.sh carbon www.yourdomain.com # 增加Carbon Forum的一键安装

修改 WordPress 上传文件大小限制

1.查找php.ini配置文件

1
find / -name "php.ini"

会出现两个结果,修改类似/etc/php/7.3/fpm/php.ini

2.修改 php.ini

1
vi /etc/php/7.3/fpm/php.ini

在其中搜索并修改以下配置:

1
2
3
upload_max_filesize = 512M
post_max_size = 512M
max_execution_time = 3000

这里配置上限为 512 MB,同时增加了最大处理时间。

3.修改 nginx.conf

1
vi /etc/nginx/conf.d/blog.bore.vip.conf

httpserver 配置下添加

1
client_max_body_size 512M;

这里配置上限为 512 MB。

4.重启nginx和php

1
2
service nginx restart
service php7.3-fpm restart

nginx: command not found 解决方案

只需要输入source /etc/profile ,让配置文件重新生效一下即可。

参考链接